seleniumer’s diary

「手動でExcelにスクショ貼付け」地獄からきました。テスト自動化しか望みがありません。java + selenium(since 2015/5)

webdriverで子画面を扱う

テストあるあるなのが子画面のオペレーション。
ボタンからjavascriptで起動する子画面でデータをあれして、親画面も更新してあれして、みたいな。

webdriverではメソッドswichTo()とgetWindowHandle()、またはgetWindowHandlesを使って制御します。
String currentWindow = driver.getWindowHandle();
for (String popUpHandle : Driver.getWindowHandles()) {         if(popUpHandle.equalsIgnoreCase(currentWindow))
            continue;
        Driver.switchTo().window(popUpHandle);
        String sTitle = Driver.getTitle();
あらかじめデフォルトのwindowHandleを格納しておいて、getwindowHandlesを展開してデフォルトじゃないヤツがおそらく子画面だろつってことでswitchToする、って行き当たりばったりですねぇ。
子画面が二つ以上表示されていたらどーするのだろう。
ちなみに複数子画面がある状態で下記コードでforループさせた場合、chromeと他ブラウザだとループ順が違います。
現場は大混乱になります(笑)
私の場合は一度配列に変換して、Chromeならばreverseして、とかやってました。
とほほ。

あと、子画面を閉じた後は
driver.switchTo(currentWindow) 
とかで、親ウィンドウにスイッチするのを忘れずに。No such windowとか悲しいエラーで落ちます。

引用元: