watir-webdriver を使用して、リンクをクリックした後にページが読み込まれるのを待つにはどうすればよいですか?
私が使用している現在:
sleep n
ただし、ページの応答は大きく異なるため、これは理想的ではありません。
ページの準備ができているかどうか、またはページに特定の要素があるかどうかをテストする方法はありますか?通常のWatirgemにはWatir::Waiter.wait_until
などがあることは理解していますが、Webdriverバージョンではこれが表示されません。
それらが最善の方法かどうかはわかりませんが、更新div
がクリアされるのを待つためにこれを処理する方法は次のとおりです。
while browser.div(:id=>"updating_div").visible? do sleep 1 end
これは私が何かが表示されるのを待つ方法です:
until browser.div(:id=>"some_div").exists? do sleep 1 end
本日のリリースでは、要素を待機するためのいくつかのヘルパーをもたらすオプションのrequireが追加されています。これらは(現時点では)Watir 1.6では利用できないため、両方のライブラリを並べて使用する場合は注意してください。
詳細については、Watir-webdriverWikiの " AJAXおよび要素の待機 "を確認してください。
最良の要約は「 待機中 」にあります。
これは一言で言えばそれです:
require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
b.select_list(:id => 'entry_1').wait_until_present
b.text_field(:id => 'entry_0').when_present.set 'your name'
b.button(:value => 'Submit').click
b.button(:value => 'Submit').wait_while_present
Watir::Wait.until { b.text.include? 'Thank you' }
browser.wait_until
に使える。
パラメータで何を待つかを定義できるので、より便利です(()
)、次のように:
browser.wait_until(browser.text.include("some text"))
これが私のプロジェクトでAJAXを待つ方法です:
ajax_loader = $b.element(:xpath => "//*[@id='spinner-modal-transparent' and @aria-hidden='true']/div/div/div/div/img[@alt='Ajax transparent loader']")
if ajax_loader.exists?
ajax_loader.wait_while_present(timeout=350)
else
puts "The AJAX loader was not present."
end
同じ問題が発生したので、wait_until_present
とを組み合わせて修正しようとしました
until browser.div(:id=>"some_div").exists? do sleep 1 end
@marcによって提供されたトリック:
some_div = browser.div(:id => 'some_div')
begin
Watir::Wait.until
some_div.visible?
end
rescue Watir::Wait::TimeoutError
until some_div.visible?
sleep 1
end
end
それを確認するのはあなた自身の責任であることに注意してください
div(:id => "some_div")
ある。
wait_until
またはwaituntilExists
メソッドを使用できます。