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

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


当前回答

webElement = driver.findElement(By.xpath("bla-bla-bla"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", webElement);

更多的例子,请点击这里。都是俄语,但Java代码是跨文化的:)

其他回答

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

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

在滚动的大多数情况下,这段代码都是有效的。

WebElement element = driver.findElement(By.xpath("xpath_Of_Element"));                 
js.executeScript("arguments[0].click();",element);

我一直在用ADF组件做测试,如果使用惰性加载,你必须有一个单独的滚动命令。如果未加载对象,并且尝试使用Selenium查找它,则Selenium将抛出一个“元素未找到”异常。

我同意这里所有人所说的“Selenium有一个隐含的滚动选项”。同样,如果你使用的是Selenium 1,现在你已经升级到Selenium 2,并查找以前版本的命令,你可以使用命令:

Seleniumbackeddriver.

WebDriver driver = new FirefoxDriver();
public void setUp() throws Exception {

    String baseUrl = "http://www.google.co.in/";
    selenium = new WebDriverBackedSelenium(driver, baseUrl);
}

您可以使用这两个版本的命令。

webElement = driver.findElement(By.xpath("bla-bla-bla"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", webElement);

更多的例子,请点击这里。都是俄语,但Java代码是跨文化的:)