2012-11-28 30 views
9

我想滚动网页以查找并单击页面滚动时延迟加载的内容。我使用下面的命令如何使用watir滚动网页

require 'watir-webdriver' 

@browser = Watir::new :firefox 
@browser.send_keys :space 

我使用的网络驱动器与Firefox和我在Ubuntu,但它无法正常工作。在下面的ruby代码中,我试图向下滚动页面,直到找不到具有以下内容的元素:id。该元素正在懒惰地加载。 几秒钟后,我收到了超时时间,任何想法下面的代码有什么问题。

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

什么是使用watir-driver滚动页面的最佳方式是什么?

回答

16

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

@browser.driver.executeScript("window.scrollBy(0,200)") 

会向下滚动沿y axix页面200个像素。

在这里看到该方法的文档:

http://www.w3schools.com/jsref/met_win_scrollby.asp

+9

注意,您不必访问执行脚本的驱动程序。你可以这样做:'@ browser.execute_script(“window.scrollBy(0,200)”)'。 –

2

对不起,因为我是新来的,没有足够的代表点尚未所以我只是创造了一个新的答案,我不能在最后回答评论。不管怎么说,如果有人正在和滚动问题多次尝试这种(添加循环和睡眠):

maximum_times_needed = max # of times you need the page to scroll down 

maximum_times_needed.each do 
@browser.driver.executeScript("window.scrollBy(0,200)") 
sleep 0.15 
end 

0.15可根据需要多长时间的页面加载变化。 0.15是0.15秒,所以根据需要进行调整,以便有足够的时间加载页面。 200也可能需要调整到更大的像素量。

+0

为什么不'wait_until {block}'?硬编码的等待方法=恼人的 – meatspace

2

我用一个叫做“watir-scroll”的宝石来帮助我。虽然它通常需要滚动到的位置,但它也会滚动到坐标。

https://github.com/p0deje/watir-scroll 

您可以滚动到特定元素

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] 
+2

它给'未定义的方法滚动#(NoMethodError)' – paul

+0

@paul - 在这里相同。我使用红宝石1.8.7,watir 1.6.7,watir-webdriver 0.6.2 – stack1

0

这为我节省了一大笔时间e:

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

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

@browser.driver.execute_script("window.scrollBy(0,document.body.scrollHeight)") 

其滚动到页面的y轴的底部。

0

它的工作原理

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