Wednesday, 28 August 2013

Page Scroll using Selenium WebDriver


Scroll Down:

import org.openqa.selenium.JavascriptExecutor;
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("scroll(0, 250)"); //y value '250' can be altered

Scroll up:

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("scroll(250, 0)"); //x value '250' can be altered

Scroll bottom of the Page:

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));");
(or)
Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform();

Full scroll to bottom in slow motion:

for (int second = 0;; second++) {
        if(second >=60){
            break;
        }
            ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,400)", ""); //y value '400' can be altered
            Thread.sleep(3000);
}
(or)
JavascriptExecutor jse = (JavascriptExecutor)driver;
for (int second = 0;; second++) {
        if(second >=60){
            break;
        }
            jse.executeScript("window.scrollBy(0,800)", ""); //y value '800' can be altered
            Thread.sleep(3000);
}

Scroll automatically to your WebElement:

Point hoverItem =driver.findElement(By.xpath("Value")).getLocation();
((JavascriptExecutor)driver).executeScript("return window.title;");    
Thread.sleep(6000);
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+(hoverItem.getY())+");"); 
// Adjust your page view by making changes right over here (hoverItem.getY()-400)
(or)
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("Value')]")));
(or)
WebElement element = driver.findElement(By.xpath("Value"));
Coordinates coordinate = ((Locatable)element).getCoordinates(); 
coordinate.onPage(); 
coordinate.inViewPort();

12 comments:

  1. I want to know the command to scroll the page using SELENIUM IDE. And also what should be the target?

    ReplyDelete
  2. I wasn't able to get "scroll(x, y)" to work due to my special circumstances. However, I'm tempted to say that where it says "scroll" it should really be "window.scroll", and also questioning why you'd fill in a non-zero first argument to make it scroll up, and a non-zero second argument to make it scroll down. In my experience, a positive first argument makes it scroll down, and a positive second argument makes it scroll *right.* Again, though, I wasn't able to use window.scroll() for my purpose, so I couldn't test it for myself.

    It's fine if you want to scroll the whole window, but I have some divs with the CSS "overflow: auto" that I want to move around in. I'm also using Python, not Java, so my code will look a little different from that standpoint too. Nevertheless, I used:

    browser = selenium2lib._current_browser()
    browser.execute_script("document.getElementById('myDesiredElement').scrollTop += delta")

    The delta variable is an integer; positive makes the div scroll down, negative makes it scroll up.

    Since this is one of the highest-ranking Google results for scrolling in Selenium, I thought I should add that tidbit here. ;)

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Hi all,
    i want to perform scrolling for mobile application..this coding is not working for mobile apps.can anyone please help me how to perform scrolling in mobile application testing..
    thanks

    ReplyDelete
  5. Is 'window.scrollBy' works on Mac (Other OS) as well?

    ReplyDelete
    Replies
    1. it should work on any os since its javascript

      Delete
  6. How to scroll down on a dialog box which is in focus?

    ReplyDelete
  7. Thanks for the great information in your blog Selenium Training in Chennai

    ReplyDelete
  8. How can we scroll in horizontal style ?

    ReplyDelete
  9. Great way of explaining this..!! Thanks Selenium Tutorials

    ReplyDelete
  10. Great solution. worked out for me :)

    ReplyDelete