web-dev-qa-db-ja.com

Seleniumでのブラウザーポップアップウィンドウの処理

既存のコードベースに対して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で実行されます。

20
brasskazoo

できます!!セレンを好む人のために簡単にするためです。

これは、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>
3
branchgabriel

* iehtaモードで実行している場合、あちこちでいくつかの不具合が発生します。私の仕事ではSeleniumを実行しており、IEとAJAXには多くの問題があるようです。

ただし、発生している問題は、Seleniumが完全に読み込まれる前に別のウィンドウのコンポーネントにアクセスしようとしている問題のようです。デフォルトのタイムアウト範囲がどのように設定されているかわかりませんが、問題を回避するために60(60000ms)秒程度に増やすことをお勧めします。

それ以外は、Firefoxでテストを実行することをお勧めします(* chromeを使用)。これにより、信頼性の高い結果が得られますが、ビジネス要件のために、単にそれができない場合もあります。

1
Josh

別の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");

ローカルで実行したときにテストは成功しましたが、それらのすべてのメソッド呼び出し(作成/フォーカス/待機/選択)を使用した場合のみです。

ビルドサーバーにすべてのテストを実行させます。これも成功した場合は、ライブラリー関数を作成します...!

0
brasskazoo

ポップアップウィンドウ内のiframeを選択してフォームに入力する必要がありました。 Seleniumがiframeを見つけられなかったselectWindow cmdの使用に問題があったため、コマンドを削除しました。

このセレン語は私にとってはうまくいきました(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>
0
nicholasklick