2012-11-28 34 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;")