web-dev-qa-db-ja.com

Selenium WebDriver:新しいウィンドウではなく新しいタブを開く

SeleniumWebDriverを使用しています。すべてのリンクは新しいブラウザウィンドウで開かれます。それは私には不便です。新しいタブで開くように変更するにはどうすればよいですか?

12
khris

現在、Seleniumにはタブを切り替える機能がありません。このため、ブラウザに新しいウィンドウでリンクを開くように強制しますが、ウィンドウを切り替えることができるため、ブラウザにアプローチを強制します。これmay後のバージョンで修正されます

6
AutomatedTester

Seleniumには、今日、タブを切り替える機能があります。以下のcode1:はfirefox、code2で機能します:for IE and chrome Robotクラスを使用すると、コントロールは現在のタブに自動的に移動しません。ウィンドウハンドルメソッドを使用して現在のタブに切り替える必要があります。以下のコードは、個々のスクリプトを実行している場合はうまく機能しますが、スイートとして実行している場合は、キーボードイベントを実行するのに苦労する可能性があります。 Selenium-Javaでjavascriptexecutorを使用して、ユーザー定義のjavascriptメソッドを使用することで他の可能性を実現しました。

開いたすべてのウィンドウに割り当てられた名前を識別することで、ウィンドウとタブを切り替えることができます。名前は英数字になります。

    ***Code 1***
    //First tab(default tab)
    driver.navigate().to("http://www.google.com");
    driver.manage().window().maximize();

    //second tab
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
    driver.navigate().to("https://yahoo.com");

    //third tab
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
    driver.navigate().to("http://www.google.com");

    //move to very first tab.
    driver.findElement(By.cssSelector("body"))
            .sendKeys(Keys.CONTROL + "\t");

    // To close the current tab.    
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "w");
    **code 2**
    driver.navigate().to("http://www.google.com");
    driver.manage().window().maximize();


    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_T);

    Set<String> handles = driver.getWindowHandles();
    List<String> handlesList = new ArrayList<String>(handles);
    String newTab = handlesList.get(handlesList.size() - 1);

    // switch to new tab
    driver.switchTo().window(newTab); 
    driver.get("http://www.yahoo.com");
10
Das Prakash