15

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

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 滚动页面的最佳方法是什么?

4

7 回答 7

22

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

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

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

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

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

于 2012-11-28T16:06:49.223 回答
7

我使用一个名为“watir-scroll”的宝石来帮助我解决这个问题。虽然它通常需要滚动到的地方,但它也会滚动到坐标。

https://github.com/p0deje/watir-scroll 自从 Watir v6.16 watir-scrollgem 合并到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]
于 2015-01-07T22:46:22.147 回答
4

这为我节省了很多时间:

browser.div(:id => 'start-date-holder').wd.location_once_scrolled_into_view 
于 2016-08-04T16:46:36.103 回答
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可能还需要调整到更大的像素量。

于 2015-01-06T18:39:50.947 回答
1
    300.times do
      @browser.driver.execute_script("window.scrollBy(0,200)")
      sleep 0.05
    end
于 2020-03-20T07:47:21.987 回答
0

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

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

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

于 2017-04-17T00:17:53.230 回答
0

有用

evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;")
于 2017-06-07T07:59:46.393 回答