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

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


当前回答

根据我的经验,当页面上有多个可滚动的部分时,Selenium Webdriver不会在单击时自动滚动到一个元素(这是很常见的)。

我使用Ruby,对于我的AUT,我必须猴子补丁点击方法如下;

class Element

      #
      # Alias the original click method to use later on
      #
      alias_method :base_click, :click

      # Override the base click method to scroll into view if the element is not visible
      # and then retry click
      #
      def click
        begin
          base_click
        rescue Selenium::WebDriver::Error::ElementNotVisibleError
          location_once_scrolled_into_view
          base_click
        end
      end

location_once_scrolled_into_view方法是WebElement类上已有的方法。

我理解你可能不使用Ruby,但它应该给你一些想法。

其他回答

JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("javascript:window.scrollBy(250,350)");

你可能想试试这个。

如果您想使用Selenium web驱动程序在Firefox窗口上滚动,其中一种方法是在Java代码中使用JavaScript。JavaScript代码向下滚动(网页底部)如下:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, Math.max(document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.clientHeight));");

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

我使用这种方式滚动元素并单击:

List<WebElement> image = state.getDriver().findElements(By.xpath("//*[contains(@src,'image/plus_btn.jpg')]"));

for (WebElement clickimg : image)
{
  ((JavascriptExecutor) state.getDriver()).executeScript("arguments[0].scrollIntoView(false);", clickimg);
  clickimg.click();
}

OpenQA。c#中的硒:

WebDriver.ExecuteJavaScript("arguments[0].scrollIntoView({block: \"center\", inline: \"center\"});", Element);

其中WebDriver是新的ChromeDriver(选项)或类似。