Selenium を使用したブラウザのポップアップ ウィンドウの処理
-
01-07-2019 - |
質問
既存のコード ベースに対して Selenium 回帰テストを実行しており、Web アプリの特定の画面では中間ステップにポップアップを使用しています。
現在、テストでは次のコマンドを使用しています。
// force new window to open at this point - so we can select it later
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')");
selenium().click("//input[@value='Submit']");
selenium().waitForPopUp("enquiryPopup", getWaitTime());
selenium().selectWindow("enquiryPopup");
...うまくいきます ほとんどの時間. 。場合によっては、テストが失敗することがあります。 waitForPopUp()
と並んで
com.thoughtworks.selenium.SeleniumException: Permission denied
誰かがより良い、より多くのものを提案できますか 信頼性のある 方法?
また、これらのテストは主に IE6 と 7 で実行します。
解決
それは動作します!!セレネーゼを好む人々にとってそれを簡単にするためです。
これはIE7(通常モード)を使用してうまくいきました。
なんとも面倒なことだ。SO の空のスパゲッティ モンスターに感謝しなければ、IE でこれを動作させる方法はありません。
<tr>
<td>getEval</td>
<td>selenium.browserbot.getCurrentWindow().open('', 'windowName');</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>buttonName</td>
<td></td>
</tr>
<tr>
<td>windowFocus</td>
<td>windowName</td>
<td></td>
</tr>
<tr>
<td>waitForPopUp</td>
<td>windowName</td>
<td>3000</td>
</tr>
<tr>
<td>selectWindow</td>
<td>windowName</td>
<td></td>
</tr>
他のヒント
*iehta モードで実行している場合、あちこちで問題が発生することになります。私の仕事では Selenium を実行していますが、IE と AJAX に関して多くの問題があるようです。
ただし、あなたが遭遇している問題は、Selenium が完全にロードされる前に別のウィンドウのコンポーネントにアクセスしようとする問題のようです。デフォルトのタイムアウト範囲がどのくらいに設定されているかはわかりませんが、問題を回避するには、60 (60000 ミリ秒) 秒程度に増やしてみるとよいでしょう。
それ以外では、より信頼性の高い結果が得られるため、Firefox (*chrome を使用) でテストを実行することをお勧めしますが、ビジネス要件によりそれが不可能な場合もあります。
試しに別の Selenium 関数を追加してみたところ、 windowFocus()
:
// force new window to open at this point - so we can select it later
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')");
selenium().click("//input[@value='Submit']");
selenium().windowFocus("enquiryPopup");
selenium().waitForPopUp("enquiryPopup", getWaitTime());
selenium().selectWindow("enquiryPopup");
テストはローカルで実行すると成功しましたが、作成/フォーカス/待機/選択というすべてのメソッド呼び出しが必要でした。
ビルド サーバーにすべてのテストを実行させようとしています。それも成功したら、そこからライブラリ関数を作成します...!
ポップアップ ウィンドウ内で iframe を選択し、フォームに記入する必要がありました。selectWindow cmd の使用時に Selenium が iframe を見つけられずに問題が発生したため、コマンドを削除しました。
このセレネーゼは私にとってはうまくいきました(iframeのタイトルとID = account_frame):
<tr>
<td>click</td>
<td>//a[@class='item_add']</td>
<td></td>
</tr>
<tr>
<td>windowFocus</td>
<td>account_frame</td>
<td></td>
</tr>
<tr>
<td>waitForPopUp</td>
<td>account_frame</td>
<td>10000</td>
</tr>
問題の原因となっている呼び出しの周囲に wait ステートメントを追加してみてください。
以前にも同じエラーが発生したことがありますが、それが唯一の方法でした 確実に これらを解決するには、System.Threading.Thread.Sleep(5000) を呼び出します。