如何用selenium滚动

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

Selenium告诉我,它无法点击不可见的链接,这意味着我需要滚动我的canvas? 我使用的是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() 。 我应该如何修改我的代码以将输入元素放在屏幕上?

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

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

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

对此的简单解决方案是:

  1. 存储元素的xpath,该元素在元素可见且附近。
  2. 滚动直到该可见元素,以使您的元素可见。
  3. 确保您的元素现在可见,单击它

例如代码:

  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 

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

element.send_keys(:标签)

如果你想使用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脚本,它将向下滚动整个页面。你甚至可以通过简单地对window.scrollTo(200,350);硬编码来定义你想要在视图窗口中滚动的区域。 window.scrollTo(200,350);