Java
 Computer >> コンピューター >  >> プログラミング >> Java

Selenium WebDriver(Java)でタブを切り替える方法|Keys.chordとswitchToの使い方を実例で解説

Seleniumでは、新しいタブでリンクを開き、タブ間を自由に切り替えることができます。本記事では、Java版Selenium WebDriverを使ってタブを切り替える具体的な手順を、サンプルコード付きでわかりやすく解説します。

タブ切り替えの基本:Keys.chordメソッド

まず、リンクを新しいタブで開く必要があります。そのためにKeys.chordメソッドとsendKeysメソッドを組み合わせて使用します。

Keys.chordメソッドは、複数のキーを同時に渡すことができる便利なメソッドです。キーの組み合わせや文字列を引数として指定します。ここではKeys.CONTROL(Ctrlキー)とKeys.ENTER(Enterキー)を引数として渡し、生成された文字列全体をsendKeysメソッドの引数として渡します。

最後に、このsendKeysメソッドを、driver.findElementメソッドで特定したリンク要素に対して適用します。これにより、「Ctrl + Enter」キー操作がシミュレートされ、リンクが新しいタブで開かれます。

構文

String clickl = Keys.chord(Keys.CONTROL,Keys.ENTER);
driver.findElement(By.xpath("//*[text()='Terms of Use']")).sendKeys(clickl);

switchToメソッドでドライバーのフォーカスを移動する

次に、開いているすべてのウィンドウID(ウィンドウハンドル)をArrayListに保持し、switchToメソッドを使ってドライバーのフォーカスを新しいタブへ移動させます。このとき、新しいタブのウィンドウIDを引数として渡します。

新しいタブ上での作業が完了したら、再びswitchToメソッドを使用して親ウィンドウ(元のタブ)に戻ることができます。戻る際も、親ウィンドウのウィンドウIDを引数として渡します。

それでは、実際に2つのタブを切り替えてみましょう。

サンプルコード

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import java.util.List;
import java.util.ArrayList;
public class SwitchTab{
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver",
        "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.tutorialspoint.com/about/about_careers.htm");
        // 5秒間の待機
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        // Keys.Chord文字列の作成
        String clickl = Keys.chord(Keys.CONTROL,Keys.ENTER);
        // リンクを新規タブで開く(Keys.Chord文字列をsendKeysに渡す)
        driver.findElement(
        By.xpath("//*[text()='Terms of Use']")).sendKeys(clickl);
        Thread.sleep(1000);
        // すべてのウィンドウハンドルをArrayListに保持
        ArrayList<String> newTb = new ArrayList<String>(driver.getWindowHandles());
        // 新しいタブへ切り替え
        driver.switchTo().window(newTb.get(1));
        System.out.println("Page title of new tab: " + driver.getTitle());
        // 親ウィンドウへ切り替え
        driver.switchTo().window(newTb.get(0));
        System.out.println("Page title of parent window: " + driver.getTitle());
        driver.quit();
    }
}

コードのポイント解説

  • getWindowHandles():現在開いているすべてのウィンドウ・タブのハンドル(一意なID)をSet形式で取得します。ここではArrayListに変換して扱いやすくしています。
  • newTb.get(1):インデックス1は2番目に開かれたタブ(新しいタブ)を指します。
  • newTb.get(0):インデックス0は最初に開いた親ウィンドウを指します。
  • driver.getTitle():現在フォーカスされているページのタイトルを取得し、正しくタブが切り替わったかをコンソールで確認できます。

実行結果

このコードを実行すると、コンソールに以下のように出力されます。まず新しいタブのページタイトルが表示され、続いて親ウィンドウのページタイトルが表示されます。これにより、タブ間の切り替えが正常に行われたことを確認できます。

Page title of new tab: Terms of Use - Tutorials Point
Page title of parent window: Career Growth - Tutorials Point

まとめ

Selenium WebDriver(Java)でのタブ切り替えは、以下の流れで実現できます。

  1. Keys.chord(Keys.CONTROL, Keys.ENTER)でキー操作の文字列を作成する
  2. sendKeysメソッドでリンクに対してキー操作を送り、新規タブで開く
  3. getWindowHandles()ですべてのウィンドウハンドルを取得する
  4. switchTo().window()で目的のタブにフォーカスを移動する

この手法をマスターすれば、複数タブを扱うE2Eテストやスクレイピング自動化など、さまざまなシーンで活用できます。

  1. PythonとSelenium WebDriverで特定のドメインにCookieを設定する方法

    PythonのSelenium WebDriverでは、特定のドメインに対してCookieを設定することができます。Cookieはブラウザが送受信する情報を保持するために使われるもので、キーと値(key-value)のペア形式で構成され、サーバーからブラウザへ渡されるメッセージのような役割を果たします。Cookieを追加するにはadd_cookieメソッドを使用します。このメソッドにはキーと値がパラメータとして渡されます。すべてのCookieを取得したい場合はget_cookiesメソッドを、特定のCookieだけを取得したい場合はget_cookieメソッドを使用します。また、Cookieを

  2. PythonでPhantomJSとSelenium WebDriverを使ってウィンドウサイズを設定する方法

    PhantomJSとSelenium WebDriverでウィンドウサイズを設定する方法Pythonでは、PhantomJSとSelenium WebDriverを組み合わせることで、ブラウザのウィンドウサイズを自由に制御できます。PhantomJSを利用するには、まずwebdriver.PhantomJSクラスのドライバーオブジェクトを作成します。その際、phantomjs.exeドライバーファイルへのパスを引数として渡してください。ウィンドウサイズを設定するには、set_window_sizeメソッドを使用し、幅と高さを引数として指定します。また、現在のブラウザのウィンドウサイズを取得した