Java Selenium 3:在选项卡之间切换

Java Selenium 3:在选项卡之间切换,java,selenium-webdriver,selenium-chromedriver,Java,Selenium Webdriver,Selenium Chromedriver,使用Selenium 2的代码停止使用Selenium 3 这段代码在Chrome和Firefox中都不再有效 driver.get("http://the-internet.herokuapp.com/windows"); String firstWindow = driver.getWindowHandle(); driver.findElement(By.linkText("Click Here")).click(); driver.switchTo().window(firstWindo

使用Selenium 2的代码停止使用Selenium 3

这段代码在Chrome和Firefox中都不再有效

driver.get("http://the-internet.herokuapp.com/windows");
String firstWindow = driver.getWindowHandle();
driver.findElement(By.linkText("Click Here")).click();
driver.switchTo().window(firstWindow);
我发现Firefox有一个解决方法:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.PAGE_DOWN);
然而,Chrome不起任何作用。
请帮助

我认为您确实正在遭受新的错误或可能的预期行为的困扰

在检查并测试代码之后,我注意到,即使在Chrome中打开并聚焦了一个新选项卡,驱动程序也不会自动切换到该选项卡

您必须添加.switchTo.windowsecondWindow,以便您的驱动程序切换到新的活动选项卡

因此,switchTo不会聚焦驱动程序正在使用的选项卡,因此看起来您只是停留在第二个选项卡中,即使驱动程序本身切换回第一个窗口

以下是一些可能有助于您理解问题的代码:

    driver.get("http://the-internet.herokuapp.com/windows");
    String firstWindow = driver.getWindowHandle();
    System.out.print("First windowhandle: " + firstWindow + "\n");

    System.out.print("Clicking on 'Click Here' \n");
    driver.findElement(By.linkText("Click Here")).click();

    Set<String> stringSet = driver.getWindowHandles();
    System.out.print("All windowhandles: " + stringSet + "\n");
    List<String> handles = new ArrayList<>(stringSet);

    System.out.print("Switching to new window \n");
    driver.switchTo().window(handles.get(1));
    //wait for Title to change to second tab title
    new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs("New Window"));

    System.out.print("Second (and current) windowhandle: " + driver.getWindowHandle() + "\n");

    System.out.print("Switching back to first Window. \n");
    driver.switchTo().window(firstWindow);

    //wait for Title to change back to first title
    new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs("The Internet"));

    System.out.print("Last used windowhandle: " + driver.getWindowHandle() + "\n");
如果运行此代码,您将注意到两件事: a驱动程序将切换到正确的选项卡,查看WindowHandle输出 b驱动程序当前使用的选项卡将无法在Chrome中正确聚焦


这似乎是一个bug。

可能重复的。您能提供一个例外吗?到底什么东西不起作用了?去监狱。如果您查看您提供的链接,它使用的代码与Selenium 3不兼容,正如我所指出的。您只需停留在第二个选项卡上,而不切换到Chrome中的第一个选项卡。谢谢您的回复,Robert。在发布我的问题之前,我做了与您的代码片段相同的调查。这是一只虫子!谁来修理它Selenium 3真的很有问题。例如,Firefox驱动程序没有实现Actions类。