如何用硒滚动

时间:2011-09-07 01:05:44

标签: ruby selenium

我有一个挑战,我花了一些时间来解决。

Selenium告诉我,它无法点击不可见的链接,这意味着我需要滚动我的画布?我使用的是ubuntu 10,firefox 3,selenium 0.1,ruby 1.9.2和selenium-webdriver 2.5.0

我的代码是

driver = Selenium::WebDriver.for :firefox;
driver.get login_url

wait = Selenium::WebDriver::Wait.new(:timeout => 2)

wait.until {
    driver.find_element(:name => 'j_password')
}

driver.find_element(:name => 'j_username').send_keys(username)

driver.focus(:name => 'j_username')`

并且它表示focus()未定义。我应该如何修改我的代码以将输入元素放在屏幕上?

嗯,这是一个假设的例子,我真的需要滚动才能在屏幕上显示其他元素,但为了简单起见,我希望能够滚动s.t. 任何元素都在屏幕上,甚至

4 个答案:

答案 0 :(得分:7)

location_once_scrolled_into_view使用ruby滚动。
根据您的问题,您的元素不可见,因此selenium Web驱动程序无法单击它。

对此的简单解决方案是:

  1. 存储元素的可见元素的xpath。
  2. 滚动到该可见元素,以使您的元素可见。
  3. 确保您的元素现在可见,点击它
  4. 例如代码:

      element = dirver.find_element(:xpath, "xpath of nearby visible element")
      element.location_once_scrolled_into_view
      my_element = driver.find_element(:xpath, "xpath of your element")
      my_element.click
    

答案 1 :(得分:2)

我在页面底部有一个元素,没有其他元素足够接近以便先选择。最后,通过页面上表格中最后一个字段的标签来解决它。

element.send_keys(:标签)

答案 2 :(得分:1)

当文档说“不可见”时,它不是指视口,而是指页面上元素的状态。如果CSS隐藏了某些内容,则无法单击。

答案 3 :(得分:0)

如果你想使用 selenium webdriver 滚动firefox窗口,其中一种方法是在java代码中使用javaScript,向下滚动的javeScript代码如下:

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

我不知道ruby,但上面的代码可以用作向下滚动整个页面的java脚本。你甚至可以通过简单地编码{来定义你想在视图窗口中滚动的区域。 {1}}