如何使用Selenium WebDriver和Java滚动特定的DIV?
WebDriver无法识别某些WebElements,WebDriver无法找到浏览器可见区域中不可见的元素。
为了使WebDri可以通过WebDriver查看,我们需要在浏览器的视图中使该元素可见,以向下滚动特定的div!
如何在我的网页的特定区域执行操作(向下滚动并单击)。 我尝试了很多,没有帮助我。
请帮我解决我的问题。
向下滚动:
import org.openqa.selenium.JavascriptExecutor; WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("scroll(0, 250)"); //y value '250' can be altered
向上滑动:
JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("scroll(250, 0)"); //x value '250' can be altered
滚动页面底部:
JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));");
要么
Actions actions = new Actions(driver); actions.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform();
在慢动作中完全滚动到底部:
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); }
要么
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); }
自动滚动到您的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)
要么
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("Value')]")));
要么
WebElement element = driver.findElement(By.xpath("Value")); Coordinates coordinate = ((Locatable)element).getCoordinates(); coordinate.onPage(); coordinate.inViewPort();
首先,这里发布的大部分答案都不在此主题之内。 我现在一直在使用selenium 2和selenium 3,webdriver可以处理窗口滚动以使元素可见。
对于每个人发布片段,如:
driver.execute_script('scrollBy(0, 250)')
你根本得不到问题!
实际上我仍然没有找到一种方法来正确模拟滚动手柄的拖动动作,但这个答案似乎很有希望 – 但我没试过。
所以到目前为止,我个人有两种方法可以做到这一点:
- 使用
Keys.ARROW_DOWN
- 使用
Keys.PAGE_DOWN
实际上有第三种方式,只要放弃selenium并联系网站,如果他们提供任何API。
最简单的方法是执行Javascript以向上/向下滚动元素。
JavascriptExecutor jsExec = (JavascriptExecutor) driver; jsExec.executeScript("document.getElementById('id').scrollDown += 100");
driver.get("http://www.***.com/"); driver.manage().window().maximize(); WebElement scroll = driver.findElement(By.id("someId")); scroll.sendKeys(Keys.PAGE_DOWN);
使用JavascriptExceutor
的scrollIntoView()
方法执行此操作的另一种方法:
WebElement DIVelement = driver.findElement(By.xpath("xpath to div")); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("arguments[0].scrollIntoView(true)". DIVelement);
首先你应该滚动而不是找到元素,如下所示:
document.getElementById("your div id").scrollTop(250);
在上面你可以找到特定的div。
你也可以尝试下面:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("javascript:window.scrollBy(250,350)");
考虑您的HTML如下所示:
这将帮助您向下滚动。 它是一个JavaScript执行器,所以你当然需要实现它。
我的“替代方法”是按元素的x和y坐标滚动到位置。 我还为y添加了一个偏移量,这样任何页眉/页脚或其他元素都不会阻止我想要滚动到的元素的可见性。
我在这个问题下贴了我的答案 –
Selenium webdriver无法单击页面外的链接
所有发布的答案都不适合我,但是我找到了基于这篇文章的解决方案。
((JavascriptExecutor) driver).executeScript( "arguments[0].scrollTop=arguments[1].offsetTop", divWithScrollbarElement, elementToScrollTo);
其中divWithScrollbarElement
是您要滚动的div元素, elementToScrollTo
是您想要查看的子元素(在我的情况下实际上是我最初尝试查看的元素的父元素)。 如果elementToScrollTo
实际上还没有在DOM中,您可能需要使用脚本一次尽可能向下滚动,然后再次加载元素。