0

検索に関する限り、watir でサポートされているブラウザーの最新のリストを見つけることができませんでした。

Firefox をバージョン 18 にアップグレードしたところですが、その間に watir-webdriver のバージョンも最新のものに更新します (を使用してgem update watir-webdriver)。

これまでのところ、解決策が見つからないように見える問題が1つ発生しました。

要素が存在するかどうかを確認しようとすると、$browser.a(:href, "#{$url}/admin/").exists?$url変数はテストサーバーのメインURLに定義されているため、問題ではありません。さらに、変数を実際のアドレスに置き換えても、まだ遭遇します同じ問題)、要素が存在しない場合は常にタイムアウト エラーが発生します。

要素存在する場合、すぐに の応答が返されtrueます。したがって、タイムアウトの問題は、要素が存在しない場合にのみ発生します。

だから私の質問は:

  1. メソッドを機能させる方法はあり.exists?ますか?
  2. 最新バージョンの Firefox(V. 18) で、そのような他の問題を知っている人はいますか?
  3. watir がサポートするブラウザーの最新リストを誰かが教えてくれたら、本当にありがたいです。定期的に更新されるリストが望ましいです。

PS、誰かがこのpresent?方法について質問を投稿したのを見ましたが、それが関連していることはわかりませんが、それでもまだ解決策がありません. 以前のバージョンの ff にダウングレードするのは嫌です。

喜んで助けてくれる人に感謝します。

よろしく、アサフ。

4

1 に答える 1

0

私はあちこちでそのような問題を抱えていました。解決策は、例外をキャッチして、この例外をトリガーしたコードを再実行することでした。もちろん、私はあなたの例外が何らかの一時的な原因、おそらくワティルのグリッチによって引き起こされていると思います。

簡単に言うと、次のようなことができます。

begin
  $browser.a(:href, "#{$url}/admin/").exists?
rescue Timeout::Error
  puts("Caught a TIMEOUT ERROR!")
  sleep(1)
  # Retry the sode that generates the esception.
  retry
end

これが最も単純な形式です。次のようなことを行うことで、無限ループに陥らないようにすることもできます。

retries_left = 3
begin
  $browser.a(:href, "#{$url}/admin/").exists?
rescue Timeout::Error
  puts("Caught a TIMEOUT ERROR!")

  # You may want to wait for a while before retrying.
  sleep(1)

  # Retry the code that generates the exception.
  retries_left -= 1
  retry if retries_left > 0

  # No more retries left - time to bail out! Re-raise the exception.
  raise
end

この例外処理コードを、ブロックを受け入れるテストヘルパーメソッドに抽象化して、次のように繰り返すことなく、はるかにクリーンな方法で使用することで、これを少し改善できます。

handle_transient_exceptions {
  $browser.a(:href, "#{$url}/admin/").exists?
}

しかし、それはあなたが尋ねたことではありません。:)

3番目の質問を参照すると、watir-webdriverは最新のChrome、Firefox、IE9をかなりうまくサポートしていると言えます。私は現在これらのブラウザを使用していますが、ブロッキングの問題はまだ発見されていません。

于 2013-01-17T10:45:44.993 に答える