有没有办法在硒1。X或2。x来滚动浏览器窗口,以便XPath标识的特定元素在浏览器的视图中?在Selenium中有一个focus方法,但在FireFox中它似乎不能物理地滚动视图。有人有什么建议吗?

我需要这个的原因是我正在测试点击页面上的一个元素。不幸的是,除非元素是可见的,否则事件似乎无法工作。我无法控制单击元素时触发的代码,因此无法调试或修改它,因此,最简单的解决方案是将项目滚动到视图中。


当前回答

Javascript

解决方法很简单:

const element = await driver.findElement(...)
await driver.executeScript("arguments[0].scrollIntoView(true);", element)
await driver.sleep(500);

其他回答

如果您认为其他答案太俗气,那么这个答案也是,但是这里不涉及JavaScript注入。

当按钮离开屏幕时,它会中断并滚动到它,所以重试它…¯\_()_/¯

try
{
    element.Click();
}
catch {
    element.Click();
}

Selenium 2尝试滚动到元素,然后单击它。这是因为除非Selenium 2认为元素是可见的,否则它不会与元素交互。

滚动到元素是隐式的,所以您只需要找到项目,然后使用它。

这是JavaScript的重复解决方案,但增加了一个等待元素。

否则,如果正在对元素进行某些操作,可能会出现ElementNotVisibleException。

this.executeJavaScriptFunction("arguments[0].scrollIntoView(true);", elementToBeViewable);
WebDriverWait wait = new WebDriverWait(getDriver(), 5);
wait.until(ExpectedConditions.visibilityOf(elementToBeViewable));

你可能想要访问页面滚动网页元素和网页-硒WebDriver使用Javascript:

public static void main(String[] args) throws Exception {

    // TODO Auto-generated method stub
    FirefoxDriver ff = new FirefoxDriver();
    ff.get("http://toolsqa.com");
    Thread.sleep(5000);
    ff.executeScript("document.getElementById('text-8').scrollIntoView(true);");
}

我已经尝试了很多关于滚动的东西,但下面的代码提供了更好的结果。

这将滚动直到元素在视图中:

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