Selenium 3:在标签之间切换

时间:2017-02-24 07:18:57

标签: 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(firstWindow);

我发现对于Firefox有一种解决方法:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.PAGE_DOWN);

然而,Chrome无效 请帮忙

1 个答案:

答案 0 :(得分:1)

我认为你确实患上了一个新的错误(或者可能是预期的行为?)。

在检查完代码并对其进行测试后,我注意到即使新的标签页打开并集中在Chrome中,driver也不会自动切换到该标签。

您必须添加.switchTo().window(secondWindow),以便driver切换到新的(和有效)标签。

所以.switchTo()没有关注driver正在使用的标签,因此看起来您只是留在第二个标签中,即使driver本身切换回第一个窗口。

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

    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)driver将切换到正确的标签(请参阅WindowHandle输出)
b)driver使用的当前使用的标签将无法正确关注Chrome

这似乎是一个错误。