我使用这种方法:
for (String handle: driver.getWindowHandles ()) {driver.switchTo (). window (handle);}
但Chrome并不总是切换。我也等待窗口标题的值:
waitDriver.until (ExpectedConditions.titleIs ("new title"));
但是,(如果我理解的话),Webdriver没有在新窗口中切换。它保留在旧窗口中,并在同一窗口中而不是在新窗口中等待标题。所以我不能等待我需要的标题和窗口。任何异常或正确的开关。 结果是:
Timed out after 10 seconds waiting for title to be "new titile". Current title: "old titile".
答案 0 :(得分:0)
您是否尝试在调试模式下运行?它可能会告诉你问题是什么。
或者尝试遵循逻辑(为窗口句柄创建ArrayList<String>
,然后从列表中删除旧句柄。)如果这对您有用,请将其用作util方法并在需要时调用。
:
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
}
如果您想创建一个静态方法来切换到新窗口并将其放到您的工具中,这是一种方法:
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;
}
}