「タイムアウト」の意味によって異なります。私の知る限り、Watir-Webdriver について話すときに一般的に議論されるタイムアウトの 3 つの異なる定義があります。
- ブラウザがページの読み込みを待つ時間は?
- 「.when_present」関数を介して待機するように指示された場合、要素が「存在しない」または「表示されない」と見なす前に、Watir-Webdriver が明示的に待機する時間
- Watir-Webdriverは、要素が「存在しない」または「表示されない」と見なす前に、オブジェクトが表示されるのを暗黙的に待機する時間 (明示的に呼び出して待機していない場合は、#2 を参照)
#1: ページの読み込み
あなたの目標がそれを変更することである場合、説明されているようにページの読み込みタイムアウトを設定できることは Justin Ko が正しいですが、それを行う標準的な方法は、ブラウザーを作成して作成時にブラウザーに渡す前にクライアントのタイムアウトを設定することです。
client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 180 # seconds – default is 60
b = Watir::Browser.new :firefox, :http_client => client
- Alistair Scott、「Watir-Webdriver でページ読み込みタイムアウトを変更するにはどうすればよいですか」
#2: 明示的なタイムアウト
しかし、コードを見ずに確実に言うことはできませんが、明示的なタイムアウトが発生しているという@p0dejeの発言は正しいと思います。以下では、暗黙的な宣言をオーバーライドする明示的な宣言を経験しました(意図的なものかどうかはわかりません)。
b = Watir::Browser.new :firefox
b.driver.manage.timeouts.implicit_wait = 3
puts Time.now #=> 2013-11-14 16:24:12 +0000
begin
browser.link(:id => 'someIdThatIsNotThere').when_present.click
rescue => e
puts e #=> timed out after 30 seconds, waiting for {:id=>"someIdThatIsNotThere", :tag_name=>"a"} to become present
end
puts Time.now #=> 2013-11-14 16:24:43 +0000
'when_present' のおかげで、Watir-Webdriver はデフォルトで失敗するまで 30 秒待機します。または、「when_present(10)」と言ってデフォルトを変更し、10 秒待つこともできます。( Watir-Webdriver > Watir::Wait#when_present。)これをグローバルに行う方法を推測することはできません。あなたがそのようなことを見つけない限り、そしてあなたが見つけた場合は私に教えてください-それは電話ごとに行われなければなりません. :(編集:仲間の回答者であるジャスティン・コが、私が上記で説明したことを行う方法について回答をくれました。編集2:リンクされた回答の@justinkoごとに、@jaribがこれをWatirに追加しました:「更新:このモンキーパッチはそのため、watir-webdriver v0.6.5 では不要になります。次を使用してタイムアウトを設定できます: Watir.default_timeout = 90"
#3 暗黙のタイムアウト
あなたが提供したコードは、あなたが明示的に言わなくても、Watir-Webdriver が任意の要素が存在するのを待つ時間を設定します:
b = Watir::Browser.new :firefox
b.driver.manage.timeouts.implicit_wait = 3
puts Time.now #=> 2013-11-14 16:28:33 +0000
begin
browser.link(:id => 'someIdThatIsNotThere').when_present.click
rescue => e
puts e #=> unable to locate element, using {:id=>"someIdThatIsNotThere", :tag_name=>"a"}
end
puts Time.now #=> 2013-11-14 16:28:39 +0000