Selenium2(2)

後続処理を止める

画面遷移を行う場合など、次画面の表示完了まで後続処理を止めたい場合

// フレーム内部が表示されるまで最大10秒待ち
final long before = new Date().getTime() + 10000;
(new WebDriverWait(driver, 10)).until(new
  ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver d) {
  // 次の画面のタイトルが出たら処理続行
    return d.getTitle().toLowerCase().startsWith("タイトル");
  }
});

フレーム間の移動

フレームのある画面でフレーム間を移動したい場合

// nameが"MENU"のフレームへ移動
driver.switchTo().frame("MENU");

// idが"top"のフレームへ移動
driver.switchTo().frame(By.id("top"));

// 最初のフレームへ戻る
driver.switchTo().defaultContent();

ポップアップ

ポップアップを開いてポップアップ画面へコントロールを移す場合

// 現在操作しているWindow IDを控える。
String currentWindowId = driver.getWindowHandle();

// ポップアップ表示
driver.findElement(By.linkText("ポップアップ表示")).click();

// ポップアップ表示まで待機
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
  public Boolean apply(WebDriver d) {
    // ポップアップが表示されるとWindowHandlesのサイズが増える
    return d.getWindowHandles().size() > 1;
  }
});

// 増えたウィンドウIDを取得する。
String newWindowId = null;
for (String id : driver.getWindowHandles()) {
  if (!id.equals(currentWindowId)) {
    newWindowId = id;
  }
}
// ウィンドウ切り替え
WebDriver newWindowDriver = driver.switchTo().window(newWindowId);

参考
http://www.storklab.com/seleniumhq.org/docs/03_webdriver.html
http://d.hatena.ne.jp/kencharos/20111027/1319719613