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