web-dev-qa-db-ja.com

Selenium ideを使用して新しいウィンドウにどのように焦点を合わせますか?

Seleniumideを使用してアクションを複製しようとしています。アクションは、新しいウィンドウを開くリンクをクリックすることです。 Selenium ideを他のウィンドウではなく新しいウィンドウにフォーカスさせるにはどうすればよいですか?それは私のために働いていません。

13
chromedude

ウィンドウの選択

このためには、_selectWindow | windowName_コマンドを使用する必要があります。

他のウィンドウからメインウィンドウに戻るには、_selectWindow | null_を実行します。

_Arguments:

    * windowID - the JavaScript window ID of the window to select

Selects a popup window using a window locator; once a popup window
_

が選択されている場合、すべてのコマンドはそのウィンドウに移動します。メインウィンドウを再度選択するには、ターゲットとしてnullを使用します。

_Window locators provide different ways of specifying the window object:
_

タイトル別、内部JavaScriptの「名前」別、またはJavaScript変数別。

_    * title=My Special Window: Finds the window using the text that
_

タイトルバーにが表示されます。注意してください; 2つのウィンドウで同じタイトルを共有できます。その場合、このロケーターは1つだけを選択します。 * name = myWindow:内部JavaScriptの「name」プロパティを使用してウィンドウを検索します。これは、JavaScriptメソッドwindow.open(url、windowName、windowFeatures、replaceFlag)(Seleniumがインターセプトする)に渡される2番目のパラメーター「windowName」です。 * var = variableName:一部のポップアップウィンドウには名前がありません(匿名)が、現在のアプリケーションウィンドウのJavaScript変数名に関連付けられています。 "window.foo = window.open(url);"。そのような場合は、「var = foo」を使用してウィンドウを開くことができます。

_If no window locator prefix is provided, we'll try to guess what you
_

このような意味:

_1.) if windowID is null, (or the string "null") then it is assumed the
_

ユーザーは、ブラウザによってインスタンス化された元のウィンドウを参照しています)。

_2.) if the value of the "windowID" parameter is a JavaScript variable
_

現在のアプリケーションウィンドウでnameを指定すると、この変数にはJavaScript window.open()メソッドの呼び出しからの戻り値が含まれていると見なされます。

_3.) Otherwise, Selenium looks in a hash it maintains that maps string
_

ウィンドウの「名前」への名前。

_4.) If that fails, we'll try looping over all of the known windows
_

適切な「タイトル」を見つけようとします。 「タイトル」は必ずしも一意ではないため、予期しない動作が発生する可能性があります。

_If you're having trouble figuring out the name of a window that you want
_

操作するには、window.openを介して作成された(したがってSeleniumによってインターセプトされた)ウィンドウの名前を識別するSeleniumログメッセージを確認します。ウィンドウを開くと、ウィンドウごとに次のようなメッセージが表示されます。

_debug: window.open call intercepted; window ID (which you can
_

selectWindow()での使用は「myNewWindow」です

_In some cases, Selenium will be unable to intercept a call to
_

window.open(たとえば、「onLoad」イベント中またはイベントの前に呼び出しが発生した場合)。 (これはバグSEL-339です。)このような場合、Selenium openWindowコマンドを使用し、次のように空の(空白の)URLを使用して、Seleniumに開いているウィンドウの名前を認識させることができます:openWindow( ""、 "myFunnyWindow") 。

selectWindow(windowID)

selectPopup

ポップアップの場合は、_selectPopUp | windowId_を実行してから、メインウィンドウに戻るには_selectWindow | null_を実行します。

selectPopUp(windowID)引数:

  • windowID-ポップアップウィンドウの識別子。さまざまな意味を持ちます。

ポップアップウィンドウを選択するプロセスを簡素化します(また、selectWindow()がすでに提供している機能を超える機能は提供しません)。

  • WindowIDが指定されていないか、「null」として指定されている場合、最初の非トップウィンドウが選択されます。一番上のウィンドウは、windowIDを指定せずにselectWindow()によって選択されるウィンドウです。複数のポップアップウィンドウが表示されている場合は、これを使用しないでください。
  • それ以外の場合、ウィンドウはwindowIDを次の順序で考慮して検索されます:
    1. Window.open()に指定されたウィンドウの「名前」
    2. ウィンドウへの参照であるJavaScript変数
    3. ウィンドウのタイトル。これは、selectWindowによって実行されるのと同じ順序付きルックアップです。
8
AutomatedTester

Selenium Web Driver2を使用してこれを試してください。

driver.switch_to.window(driver.window_handles.last);
3
Brett Veenstra

storeAttribute’コマンドを使用して、ランダムウィンドウID(Selenium IDEによって生成された)を保存できます。 IDを変数に格納するだけで、「selectWindow」コマンドを使用してウィンドウを選択できます。

これを使用してみてください:

<tr>
   <td>storeAttribute</td>
   <td>link=Help Center@target</td>
   <td>window_ID</td>
</tr>

<tr>
   <td>selectWindow</td>
   <td>${window_ID}</td>
   <td></td>
</tr> 
2
Sohel Ahmed

これを考慮してください:target="_blank"属性を削除したいですか?私にとってこれは解決策でした:

getEval
this.page().findElement('link=Facebook').removeAttribute('target'); 

同じウィンドウ内にとどまると、Selenium IDEにはいくつかの利点があり、ターゲットブランクがサポートされていないことがわかります。

2
JohnP2