有没有办法在硒1。X或2。x来滚动浏览器窗口,以便XPath标识的特定元素在浏览器的视图中?在Selenium中有一个focus方法,但在FireFox中它似乎不能物理地滚动视图。有人有什么建议吗?
我需要这个的原因是我正在测试点击页面上的一个元素。不幸的是,除非元素是可见的,否则事件似乎无法工作。我无法控制单击元素时触发的代码,因此无法调试或修改它,因此,最简单的解决方案是将项目滚动到视图中。
有没有办法在硒1。X或2。x来滚动浏览器窗口,以便XPath标识的特定元素在浏览器的视图中?在Selenium中有一个focus方法,但在FireFox中它似乎不能物理地滚动视图。有人有什么建议吗?
我需要这个的原因是我正在测试点击页面上的一个元素。不幸的是,除非元素是可见的,否则事件似乎无法工作。我无法控制单击元素时触发的代码,因此无法调试或修改它,因此,最简单的解决方案是将项目滚动到视图中。
当前回答
瞄准任何元素并发送下键(或上/左/右)似乎也可以工作。我知道这有点像黑客,但我也不太喜欢使用JavaScript解决滚动问题。
例如:
WebElement.sendKeys(Keys.DOWN);
其他回答
瞄准任何元素并发送下键(或上/左/右)似乎也可以工作。我知道这有点像黑客,但我也不太喜欢使用JavaScript解决滚动问题。
例如:
WebElement.sendKeys(Keys.DOWN);
如果您认为其他答案太俗气,那么这个答案也是,但是这里不涉及JavaScript注入。
当按钮离开屏幕时,它会中断并滚动到它,所以重试它…¯\_()_/¯
try
{
element.Click();
}
catch {
element.Click();
}
在Java中,我们可以使用JavaScript进行滚动,如下所示:
driver.getEval("var elm = window.document.getElementById('scrollDiv'); if (elm.scrollHeight > elm.clientHeight){elm.scrollTop = elm.scrollHeight;}");
您可以为“elm”分配一个所需的值。scrollTop”变量。
有时我还面临使用Selenium滚动的问题。所以我使用javaScriptExecuter来实现这个。
向下滚动:
WebDriver driver = new ChromeDriver();
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollBy(0, 250)", "");
或者,也
js.executeScript("scroll(0, 250);");
向上滚动:
js.executeScript("window.scrollBy(0,-250)", "");
Or,
js.executeScript("scroll(0, -250);");
我发现元素的边框不正确,导致浏览器滚动到屏幕外。然而,下面的代码对我来说工作得相当好:
private void scrollToElement(WebElement webElement) throws Exception {
((JavascriptExecutor)webDriver).executeScript("arguments[0].scrollIntoViewIfNeeded()", webElement);
Thread.sleep(500);
}