Ruby 如何使用watir滚动网页

Ruby 如何使用watir滚动网页,ruby,cucumber,watir,watir-webdriver,Ruby,Cucumber,Watir,Watir Webdriver,我正在尝试滚动网页以查找并单击在滚动网页时延迟加载的内容。我使用以下命令 require 'watir-webdriver' @browser = Watir::new :firefox @browser.send_keys :space 我在firefox上使用web驱动程序,我在ubuntu上,但它不工作。在下面的ruby代码中,我试图向下滚动页面,直到找不到id为的元素。该元素正在缓慢加载。 几秒钟后我就超时了,你知道下面的代码有什么问题吗 When /^deal (\d+) is l

我正在尝试滚动网页以查找并单击在滚动网页时延迟加载的内容。我使用以下命令

require 'watir-webdriver'

@browser = Watir::new :firefox
@browser.send_keys :space
我在firefox上使用web驱动程序,我在ubuntu上,但它不工作。在下面的ruby代码中,我试图向下滚动页面,直到找不到id为的元素。该元素正在缓慢加载。 几秒钟后我就超时了,你知道下面的代码有什么问题吗

When /^deal (\d+) is loaded$/ do |id|
  (0..5).each do |click|    
    @browser.send_keys :space
  end
end

使用watir驱动程序滚动页面的最佳方式是什么?

如果启用了JavaScript,则可以访问底层驱动程序并执行一些JavaScript在页面上滚动

@browser.driver.executeScript("window.scrollBy(0,200)")
将沿y轴向下滚动页面200像素

有关该方法的文档,请参见此处:


很抱歉,我无法对最后一个答案发表评论,因为我是新来的,没有足够的代表性,所以我刚刚创建了一个新答案。无论如何,如果任何人在多次滚动时遇到问题,请尝试以下方法(添加循环和睡眠):

0.15
可能会因加载页面所需的时间而异<代码>0.15为0.15秒,因此根据需要进行调整,以便有足够的时间加载页面。200可能还需要调整到更大的像素量。

我使用一个名为“watir scroll”的gem来帮助我完成这项工作。虽然它通常需要滚动到的位置,但它也会滚动到坐标

自Watir v6.16以来
Watir滚动
gem合并到
Watir

您可以滚动到特定的元素

button1 = @browser.input(:class => "mileage_rate")
@browser.scroll.to button1
或者只需滚动到中间或中间的顶部

@browser.scroll.to :top
@browser.scroll.to :center
@browser.scroll.to :bottom
或者滚动到一个坐标

browser.scroll.to [0, 200]

这为我节省了很多时间:

browser.div(:id => 'start-date-holder').wd.location_once_scrolled_into_view 

您可以访问底层驱动程序并执行一些javascript。例如,如果您想滚动到页面底部,您可以使用

@browser.driver.execute_script( "window.scrollBy(0,document.body.scrollHeight)" )  
在y轴上滚动到页面底部。

它可以工作

evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;")

请注意,执行脚本不必访问驱动程序。你可以这样做:
@browser.execute_script(“window.scrollBy(0200)”)
。为什么不
等到{block}
?hardcoded wait methods=iratingit为#(NoMethodError)@paul提供
未定义的方法滚动条-此处相同。我使用的是ruby 1.8.7、watir 1.6.7、watir webdriver 0.6.2。请检查您是否安装了gem“watir scroll”。现在在watir 6.15.1上工作正常。watir scroll 0.4.0请不要只发布代码作为答案,还要解释代码的作用以及如何解决问题。带有解释的答案通常质量更好,更容易吸引选票。
evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;")
    300.times do
      @browser.driver.execute_script("window.scrollBy(0,200)")
      sleep 0.05
    end