使用带有Java的Selenium WebDriver切换选项卡

使用Selenium WebDriver与Java。我正在尝试自动执行一项功能,我必须打开一个新选项卡,在那里执行一些操作并返回到上一个选项卡(父级)。我使用了开关手柄,但它不起作用。奇怪的是,两个选项卡具有相同的窗口句柄,因此我无法在选项卡之间切换。

但是,当我尝试使用不同的Firefox窗口时,它可以工作,但对于选项卡,它不起作用。

如何切换标签页?或者,如何在不使用窗口句柄的情况下切换选项卡,因为在我的情况下,窗口句柄与两个选项卡相同?

(我观察到,当您在同一窗口中打开不同的选项卡时,窗口句柄保持不变)


答案 1
    psdbComponent.clickDocumentLink();
    ArrayList<String> tabs2 = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs2.get(1));
    driver.close();
    driver.switchTo().window(tabs2.get(0));

这段代码非常适合我。试试吧。在想要在新选项卡上执行某些操作之前,始终需要将驱动程序切换到新选项卡。


答案 2

这是一个简单的解决方案,用于打开新选项卡,将焦点更改为新选项卡,关闭选项卡并将焦点返回到旧/原始选项卡:

@Test
public void testTabs() {
    driver.get("https://business.twitter.com/start-advertising");
    assertStartAdvertising();

    // considering that there is only one tab opened in that point.
    String oldTab = driver.getWindowHandle();
    driver.findElement(By.linkText("Twitter Advertising Blog")).click();
    ArrayList<String> newTab = new ArrayList<String>(driver.getWindowHandles());
    newTab.remove(oldTab);
    // change focus to new tab
    driver.switchTo().window(newTab.get(0));
    assertAdvertisingBlog();

    // Do what you want here, you are in the new tab

    driver.close();
    // change focus back to old tab
    driver.switchTo().window(oldTab);
    assertStartAdvertising();

    // Do what you want here, you are in the old tab
}

private void assertStartAdvertising() {
    assertEquals("Start Advertising | Twitter for Business", driver.getTitle());
}

private void assertAdvertisingBlog() {
    assertEquals("Twitter Advertising", driver.getTitle());
}