2012-11-28 15 views
9

私は、ページがスクロールされたときに遅れて読み込まれるコンテンツを見つけてクリックするように、Webページをスクロールしようとしています。次のコマンドを使用していますwatirを使用してWebページをスクロールする方法

require 'watir-webdriver' 

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

私はFirefoxとWebドライバを使用していますが、私はubuntuを使っていますが、動作していません。次のルビコードでは、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ピクセルのページを下にスクロールします。

は方法の文書化は、ここを参照してください:

私はここに新しいですので、私はちょうど新しい答えを作成し、まだ十分な担当者のPTSを持っていないので、私は最後の答えにはコメントできない

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}'ではないのですか?ハードコードされたwaitメソッド=刺激 – 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、ワイア1.6.7、ワイアウェブドライバ0.6.2を使用しています – stack1

0

これで私にはたくさんの時間が節約されましたe:

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

基本的なドライバにアクセスして、いくつかのjavascriptを実行できます。あなたはページの一番下までスクロールしたい場合たとえば、あなたは、y軸上のページの一番下までスクロールし

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

を使用します。

0

それは、スクリプトを実行するためのドライバにアクセスする必要はありません

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