web-dev-qa-db-ja.com

watir-webdriverを使用してページの読み込みを待つ方法

watir-webdriver を使用して、リンクをクリックした後にページが読み込まれるのを待つにはどうすればよいですか?

私が使用している現在:

sleep n

ただし、ページの応答は大きく異なるため、これは理想的ではありません。

ページの準備ができているかどうか、またはページに特定の要素があるかどうかをテストする方法はありますか?通常のWatirgemにはWatir::Waiter.wait_untilなどがあることは理解していますが、Webdriverバージョンではこれが表示されません。

17
user138095

それらが最善の方法かどうかはわかりませんが、更新divがクリアされるのを待つためにこれを処理する方法は次のとおりです。

while browser.div(:id=>"updating_div").visible? do sleep 1 end

これは私が何かが表示されるのを待つ方法です:

until browser.div(:id=>"some_div").exists? do sleep 1 end
11
marc

本日のリリースでは、要素を待機するためのいくつかのヘルパーをもたらすオプションのrequireが追加されています。これらは(現時点では)Watir 1.6では利用できないため、両方のライブラリを並べて使用する場合は注意してください。

詳細については、Watir-webdriverWikiの " AJAXおよび要素の待機 "を確認してください。

7
jarib

最良の要約は「 待機中 」にあります。

これは一言で言えばそれです:

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' }
3
genegc

browser.wait_until に使える。

パラメータで何を待つかを定義できるので、より便利です(())、次のように:

browser.wait_until(browser.text.include("some text"))
1
Uday Swami

これが私のプロジェクトで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
1
C Scordias

同じ問題が発生したので、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")

ある。

0
shuke0327

wait_untilまたはwaituntilExistsメソッドを使用できます。

0
puzzle