トップページ > >Selenium API(逆引き) > 【Java】getWindowHandles

【Java】getWindowHandles・・・複数のウインドウハンドルを取得する

「getWindowHandles」実行で複数のウインドウハンドルを取得できます。

カレントウインドウ(制御対象になっているウインドウ)のハンドルのみを取得する「getWindowHandle」と異なり「getWindowHandles」はカレントセッション(指定したインスタンス)の全てのハンドルを取得していきます。そして複数取得したウインドウハンドルをswitchTo.window(xxx)で指定することで制御したいウインドウ(ブラウザ)を切り替えることが出来ます。

「getWindowHandles」のウインドウハンドル取得順序ですが、最初にインスタンスウインドウのウインドウハンドルを取得し、それ以降は最も新しい(最後に開いた)ウインドウからウインドウハンドルを取得していきます

下記サンプルではまず初めにインスタンスウインドウで新規ウインドウを複数開いています。次にそれぞれのウインドウハンドルを取得し、ウインドウハンドルをswitchTo.window(xxx)で指定することで個別のウインドウ制御を可能にしています。

説明

◆メソッド
  ・java.util.Set<java.lang.String> getWindowHandles()
◆使用形態
  ・driver.getWindowHandles()
◆備考
  ・指定したインスタンスのウインドウハンドル(ウインドウを識別するための管理番号)
         を全て取得する
◆関連項目
  ・ウィンドウの位置を取得する
  ・ウィンドウのサイズを取得する

サンプル

public class WebTest{
  public static void main(String[] args){
    //Chrome制御のためChromeDriverサーバーのパスを指定
    System.setProperty("webdriver.chrome.driver",
			                            "D:\\AutoTest\\chromedriver.exe");
    //Chromeを起動する
    WebDriver driver = new ChromeDriver();
    //指定したURLに遷移する<図1>
    driver.get("file://D:/AutoTest/getWindowHandles.html");
    //それぞれのテキスト名のリンク要素を取得
    WebElement link1 = driver.findElement(By.linkText("Yahoo Top"));
    WebElement link2 = driver.findElement(By.linkText("Firefox Top"));
    WebElement link3 = driver.findElement(By.linkText("Opera Top"));
	//少々待機する
	try{
	    Thread.sleep(3000);
	   }catch (InterruptedException e){
	}
    //ローカルファイル内のYahooへのリンクをクリックし新規ウィンドウを立ち上げる
    link1.click();
    //ローカルファイル内のFirefoxへのリンクをクリックし新規ウィンドウを立ち上げる
    link2.click();
    //ローカルファイル内のOperaへのリンクをクリックし新規ウィンドウを立ち上げる
    link3.click();
	//少々待機する
	try{
	    Thread.sleep(5000);
	   }catch (InterruptedException e){
	}
    //全てのウィンドウハンドルを取得
    Set<String> set = driver.getWindowHandles();
    //それぞれのウインドウハンドルを別々の変数に保存
    Iterator<String> it = set.iterator();
    //ウィンドウハンドル1
    String window1 = it.next();
    System.out.println(window1);
    //ウィンドウハンドル2
    String window2 = it.next();
    System.out.println(window2);
    //ウィンドウハンドル3
    String window3 = it.next();
    System.out.println(window3);
    //ウィンドウハンドル4
    String window4 = it.next();
    System.out.println(window4);
    //getWindowHandles.htmlの内容からMSNページへ移行した
    driver.switchTo().window(window1).get("http://www.msn.com");
    //OperaページからGoogleページへ移行した
    driver.switchTo().window(window2).get("https://www.google.com");
    //FirefoxページからMicrosoftページへ移行した
    driver.switchTo().window(window3).get("https://www.microsoft.com");
  }
}

実行結果

getWindowHandles

getWindowHandles.html<図1>

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>SeleniumTest</title>
    </head>
    <body>
        <div>
            <a href="http://www.yahoo.co.jp/" target="YAHOO">Yahoo Top</a>
        </div>
        <div>
            <a href="https://www.firefox.com/" target="FIREFOX">Firefox Top</a>
        </div>
        <div>
            <a href="http://www.opera.com/ja" target="OPERA">Opera Top</a>
        </div>
    </body>
</html>

動画デモ

※字幕をONにすると解説のテロップが表示されます※

カテゴリー

Selenium導入

APIリファレンス

その他

ページ上部へ戻る
トップページ > >Selenium API(逆引き) > 【Java】getWindowHandles
Copyright © 2016- Seleniumクイックリファレンス All Rights Reserved