2011-10-24 6 views
9

最近、Seleniumを使用してDjangoベースのアプリケーションのテストを開始しました。テストはLinux上で正常に動作しますが、Mac OS Xでは失敗するものもあります。両方のケースでFirefoxをブラウザとして使用していますが、2つのケースの重要な違いは、 FFは、フォアグラウンドアプリケーションまたはバックグラウンドウィンドウとして実行されています。 Linuxではどうなりますか?Mac OS X上でSeleniumでテストするときにFirefoxをフォアグラウンドアプリケーションにする方法

  1. SeleniumはFirefoxにユーザー登録ページを表示します。
  2. セレンはユーザー名に、は無効の電子メールアドレスを入力します。
  3. Seleniumは、電子メールアドレスフィールドから同じページの別のフィールドにフォーカスを変更します(これは検索ボックスになりますが、重要ではありません---重要なのはフォーカス変更イベントです)。
  4. ウェブページのJavascript検証コードは、電子メールアドレスが無効で、ページにエラーメッセージが挿入されたことに気付いています。
  5. Seleniumがエラーメッセージを検出し、テストが合格とマークします。私たちは、Mac OS X上で実行すると

、しかし、ステップ#4は、テストが実行されている間、私たちはバックグラウンドでそれを残せば、我々は手動である(--- Firefoxのウィンドウをフォアグラウンドない限り発生しません。ブラウザのJavascriptはフォーカスの変更イベントを取得しないため、エラーメッセージはページのDOMに挿入されないため、Seleniumはそれを待ってタイムアウトし、テストは失敗します。

テストが実行されたときにブラウザをフォアグラウンドでフォアグラウンドにすることができるので、Javascriptは必要なときにイベントを受け取ることができますか?もしそうなら、どうですか?

+1

使用しているコードを正確に投稿できますか? – Amey

答えて

2

セレンはJavascriptでブラウザを駆動します。 JSを介してブラウザーウィンドウを制御する方法はありません。一般的に、セレンの 'onfocus'イベントと 'onblur'イベントのテストは非常に難しいです。

無効なメールアドレスを入力した後、Seleniumの 'runScript'または 'getEval'メソッドを使用してJS評価を行うことで、このイベントを自分で試すことができます。これは「純粋な」ブラックボックステストではなく、検証の実装が変更された場合はテストを変更する必要がありますが、これはこのテストを実行する最も実現可能な方法です。

+1

ええ、JavaScriptかJavaのどちらからでも行う方法はありません。どちらもあまりにも砂のボックスです。 Seleniumを起動するときにフォーカスを操作し、JVMから呼び出すネイティブアプリケーションをObjectiveCまたはC++で記述する必要があります。ウインドウマネージャーは頻繁に(正確に)それがユーザーに任せられているので、焦点を合わせて回ることができないので、それはうまく動作しないかもしれません。 Pavanが言っているように、おそらく唯一信頼できる方法はフォーカスイベントを手動で起動することです。 –

関連する問題