如何使用watir滚动网页

时间:2012-11-28 15:44:11

标签: 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 loaded$/ do |id|
  (0..5).each do |click|    
    @browser.send_keys :space
  end
end

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

7 个答案:

答案 0 :(得分:20)

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

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

将沿y轴向下滚动200像素。

请参阅此处以获取该方法的文档:

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

答案 1 :(得分:5)

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

https://github.com/p0deje/watir-scroll 自Watir v6.16 watir-scroll 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]

答案 2 :(得分: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也可能需要调整到更大的像素量。

答案 3 :(得分:1)

这为我节省了很多时间:

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

答案 4 :(得分:0)

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

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

在y轴上滚动到页面底部。

答案 5 :(得分:0)

它有效

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

答案 6 :(得分:0)

    300.times do
      @browser.driver.execute_script("window.scrollBy(0,200)")
      sleep 0.05
    end
相关问题