有没有办法在硒1。X或2。x来滚动浏览器窗口,以便XPath标识的特定元素在浏览器的视图中?在Selenium中有一个focus方法,但在FireFox中它似乎不能物理地滚动视图。有人有什么建议吗?
我需要这个的原因是我正在测试点击页面上的一个元素。不幸的是,除非元素是可见的,否则事件似乎无法工作。我无法控制单击元素时触发的代码,因此无法调试或修改它,因此,最简单的解决方案是将项目滚动到视图中。
有没有办法在硒1。X或2。x来滚动浏览器窗口,以便XPath标识的特定元素在浏览器的视图中?在Selenium中有一个focus方法,但在FireFox中它似乎不能物理地滚动视图。有人有什么建议吗?
我需要这个的原因是我正在测试点击页面上的一个元素。不幸的是,除非元素是可见的,否则事件似乎无法工作。我无法控制单击元素时触发的代码,因此无法调试或修改它,因此,最简单的解决方案是将项目滚动到视图中。
当前回答
如果您认为其他答案太俗气,那么这个答案也是,但是这里不涉及JavaScript注入。
当按钮离开屏幕时,它会中断并滚动到它,所以重试它…¯\_()_/¯
try
{
element.Click();
}
catch {
element.Click();
}
其他回答
我已经尝试了很多关于滚动的东西,但下面的代码提供了更好的结果。
这将滚动直到元素在视图中:
WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Thread.sleep(500);
//do anything you want with the element
在滚动的大多数情况下,这段代码都是有效的。
WebElement element = driver.findElement(By.xpath("xpath_Of_Element"));
js.executeScript("arguments[0].click();",element);
我发现元素的边框不正确,导致浏览器滚动到屏幕外。然而,下面的代码对我来说工作得相当好:
private void scrollToElement(WebElement webElement) throws Exception {
((JavascriptExecutor)webDriver).executeScript("arguments[0].scrollIntoViewIfNeeded()", webElement);
Thread.sleep(500);
}
在Selenium中,我们需要借助JavaScript执行器来滚动到一个元素或滚动页面:
je.executeScript("arguments[0].scrollIntoView(true);", element);
在上面的语句中,元素就是我们需要滚动的元素。我尝试了上面的代码,它对我有用。
我有一个完整的帖子和视频:
http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/
我不确定这个问题是否仍然相关,但在参考https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView的scrollIntoView文档后。
最简单的解决办法是
executor.executeScript("arguments[0].scrollIntoView({block: \"center\",inline: \"center\",behavior: \"smooth\"});",element);
这将把元素滚动到页面中央。