0 votes
1 view
in Devops and Agile by (16.4k points)

Some of WebElements is not recognized by WebDriver, WebDriver fails to find the element which is not visible in the browser's visible area.

In order to make the WebElement viewable by WebDriver, We need to make that element to visible in the browser's view to do scroll down on particular div!

How can I perform my action(scroll down and click) on a particular area of my webpage. I tried a lot, doesn't help me.

Please help me resolve my issue.

1 Answer

0 votes
by (45.5k points)

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 axis value is set to'400', which 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(); 

...