selenium3 webdriverでの画面遷移の方法

selenium3 webdriverでの画面遷移の方法についてのせておきます。

seleniumを使っていて困ったことが、ポップアップ画面、モーダルウィンドウ画面に遷移してからも、その画面に対して操作を指定するときでした。

ブラウザ上部に画面タイトル情報が出ているのに、なぜか画面名を上手く取得できないときがあって……
そんなときでも使える画面遷移方法を、のせておきます。
java,chromedriverでの操作です。

 

画面数が2つのときに画面遷移してウィンドウを切り替えるコード(ウィンドウタイトルがわからなくても使える方法)

// 現在操作しているWindow IDを控える
String currentWindowId = driver.getWindowHandle();
// 画面遷移が行われる要素をクリック
driver.findElement(By.id(“button”)).click();
// ウィンドウ表示までに時間がかかると、seleniumが先走ってエラーになることがあるので、ウィンドウが増えるまでの待機処理
(new WebDriverWait(driver, 10)).until(new ExpectedCondition() {
public Boolean apply(WebDriver d) {
return d.getWindowHandles().size() > 1;
}
});
// 増えたウィンドウIDを取得する。
String newWindowId = null;
for (String id : driver.getWindowHandles()) {
if (!id.equals(currentWindowId)) {
newWindowId = id;
}
}
// 取得したウィンドウIDを引数で指定してウィンドウを切り替える
WebDriver newWindowDriver = driver.switchTo().window(newWindowId);

 

画面数が2つ以上のときに画面遷移してウィンドウを切り替えるコード(ウィンドウタイトルがわからなくても使える方法)

//画面遷移が行われる要素をクリック

driver.findElement(By.id(“sub”)).click();
driver.findElement(By.id(“popup”)).click();

//現在開かれている画面のIDをリストに入れる
Set<String> windowHandles = driver.getWindowHandles();
List<String> windowsList = new ArrayList<String>();

for (Iterator<String> iterator = windowHandles.iterator(); iterator.hasNext();) {
windowsList.add(iterator.next());
}

//操作したい画面のウィンドウIDを入れる
driver.switchTo().window(windowsList.get(2));
//画面遷移が行われる要素をクリック
driver.findElement(By.id(“sub”)).click();
//操作したい画面のウィンドウIDを入れる
driver.switchTo().window(windowsList.get(1));
//画面遷移が行われる要素をクリック
driver.findElement(By.id(“main”)).click();
//操作したい画面のウィンドウIDを入れる
driver.switchTo().window(windowsList.get(0));

 

いずれ、もっと簡単に指定できるようになると思うのですが、こんな感じで画面遷移させてます。

 

サブコンテンツ

このページの先頭へ