2011-07-06 9 views
3

最初に、わかりやすい質問を申し訳ありません。セレン2.0rc3のクリック機能が速すぎますか?

私のチームは、現在ChromeでWebアプリケーションをテストするために、Pythonを使用したSelenium 2.0rc3を使用しています。 2.02bバージョンのSeleniumを使用したとき、私たちのテストは合格しました(少し遅く、webdriverに追加した小さなハックがありました)。アップグレード後、テストは非常に高速になり、失敗に終わりました。デバッグ後、webdriversのclick()関数が連続呼び出しをブロックしていないため、ほとんどのテストが失敗したことがわかりました。現在のところ、各クリック後にsleep()/ timeoutを追加しています。これはすぐに問題を解決しますが、私たちの主な目標は達成できません(テストを高速化することです)。

答えて

4

あなたの問題は実際にはあまりにも高速でクリックしているわけではありません。その要素が存在する前にクリックしているだけです。要素が

  • は私がwebdriverをPythonバインディングを使用していない怖い暗黙の待機時間を増やしクリックする前に存在するまで

    1. 待ち:このラウンドを取得するには、2つの方法があります。 。しかし、私はそれがJavaでどのように行われたのかを教えてくれるでしょうし、うまくいけば、あなた自身がPythonと同等のものを見つけることができればと思います

      要素を待つために、JavaではWebDriverWaitというクラスがあります。 Functionと書くと、要素が存在するときだけ通過するuntil()メソッドに渡されます。あなたが行うことができる1つの方法は、driver.findElements(By...)で、またはdriver.findElement(By...)を例外ハンドラに入れます。 Functionは、trueを返すか、指定されたタイムアウトに達するまでポーリングされます。

      あなたのケースでは2番目の方法が推奨され、Javaではdriver.manage().timeouts().implicitlyWait(...)を使用できます。

    0

    クリック)ajax呼び出しを実行します。NicelyResynchronizingAjaxControllerを使用することをお勧めします。

    0

    私はchromeのためにselenium-2 rc3 pythonバインディングを試しました。私の経験は、あなたが描いているものとは反対のものでした。クリックした後、ドライバーは、そのページがそれを続ける準備ができていることを知らなかった。だから、テストをスピードアップする代わりに、彼らは非常に遅くなった(ドライバーが年齢を待っていたため)。しかし、firefoxドライバはかなり安定しているようです - クロムドライバがもう少し焼き付けられるまでそれに固執するべきかもしれません。

    関連する問題