Most of the cases Selenium automatically calls the javascript "scrollIntoView" function on any element that you try to interact with. If you know an element exists at the bottom of the page then doing anything with that element (including getting an attribute or hovering over it, etc) will cause the page to scroll.
If the above doesn't work, please do either of the followings:
Scroll to a WebElement:
Scroll up the web page:
If the above doesn't work, please do either of the followings:
Scroll to a WebElement:
WebElement element = driver.findElement(By.id("navPanel")); JavascriptExecutor jsexecutor = (JavascriptExecutor) driver; jsexecutor.executeScript("arguments[0].scrollIntoView();", element);(Or)
WebElement element = driver.findElement(By.id("navPanel")); Coordinates coordinate = ((Locatable) element).getCoordinates(); coordinate.onPage(); coordinate.inViewPort();(Or)
Point point = element.getLocation(); ((JavascriptExecutor) driver).executeScript("return window.title;"); Thread.sleep(6000); ((JavascriptExecutor) driver).executeScript("window.scrollBy(0," + (point.getY()) + ");");
Scroll up the web page:
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; jsExecutor.executeScript("scroll(300, 0)"); // here x value(horizontal value)'300' can be changed as neededScroll down the web page:
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; jsExecutor.executeScript("scroll(0, 300)"); // here y value(vertical value) '300' can be changed as neededScroll to end/bottom of page:
Actions actions = new Actions(driver); actions.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform();(Or)
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; jsExecutor.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));");(Or)
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; for (int second = 0;; second++) { if(second >=60){ break; } jsExecutor.executeScript("window.scrollBy(0,750)", ""); Thread.sleep(3000); } //y value(vertical length) '750' can be changed as needed
Excellent post!
ReplyDelete