Chromedriver 并不总是在 window 中切换

Chromedriver does not always switch in the window

我用的是这个方法:

for (String handle: driver.getWindowHandles ()) {driver.switchTo (). window (handle);}

但Chrome不总是切换。我也在等待 window title:

的值
waitDriver.until (ExpectedConditions.titleIs ("new title"));

但是,(如果我没理解错的话)Webdriver 没有在新的 window 中切换。它保留在旧的 window 中,并在相同的 window 中等待 header,而不是在新的 window 中。所以我等不及标题和 window 我需要。任何异常或正确的开关。 结果是:

Timed out after 10 seconds waiting for title to be "new titile". Current title: "old titile". 

您是否尝试过 运行 调试模式?它可能会告诉您问题出在哪里。

或者尝试遵循以下逻辑(为 window 句柄创建一个 ArrayList<String>,然后从列表中删除旧句柄。)如果这对您有用,请将其用作 util 方法并调用 where曾经需要。 :

String oldTab = driver.getWindowHandle();
    try{
        List<String> newTab = new ArrayList<String>(driver.getWindowHandles());
        newTab.remove(oldTab);
        driver.switchTo().window(newTab.get(0));
    } catch (Exception e) {
        Reporter.log("No new tab found!! " + "Number of tabs currently open = "+driver.getWindowHandles().size(), Base.DEBUG_MODE);
        throw e; // or do whatever you wanna do here
    }

如果您想创建一个静态方法来切换到新的 window 并将其放入您的实用程序,这是一种方法:

public static void switchToNewTab(WebDriver driver) throws Exception {
    String oldTab = driver.getWindowHandle();
    try{
        List<String> newTab = new ArrayList<String>(driver.getWindowHandles());
        newTab.remove(oldTab);
        driver.switchTo().window(newTab.get(0));
    } catch (Exception e) {
        Reporter.log("No new tab found!! " + "Number of tabs currently open = "+driver.getWindowHandles().size(), Base.DEBUG_MODE);
        throw e;
    }   
}