我有一个场景,打开了两个窗口 A 和 B。窗口 B 通过窗口 A 中的按钮打开。运行代码后,我希望使用 Webdriver 关闭两个窗口。正如预期的那样,运行代码后只有窗口 A 无法关闭。以下是用于执行此操作的代码。
Set <String> allhandles =
driver.getWindowHandles(); // get all opened windows' handle
String window_B =
driver.getWindowHandle(); //get the handle for Window B
for(String all_handles:allhandles){
if(!all_handles.equals(window_B)){
driver.close(); //close Window B
}
String window_A = driver.getWindowHandles().toString();
driver.switchTo().window(window_A);
driver.close();
}
此外,错误消息指出它无法找到窗口 A,尽管它确实指出了正确的句柄。
最佳答案
要关闭所有窗口(以任意顺序),请使用以下代码:
for (String handle : allhandles) {
driver.switchTo().window(handle);
driver.close();
}
您的代码中存在一些缺陷:
if(!all_handles.equals(window_B)){
driver.close(); //close Window B
}
这不会关闭窗口 B(如注释所示),除非窗口 B 恰好是 Activity 窗口(但在这种情况下 if
语句是无用的)。而且,变量名all_handles
具有误导性,因为它只是 allhandles
组中的一个句柄。 .
这一行
String window_A = driver.getWindowHandles().toString();
不返回窗口 A 的名称(如变量名称所示),而是返回 Set<java.lang.String>
的字符串表示形式目的。这是一个巨大的差异,切换到这个将不可避免地导致错误(比如“窗口不存在”)。
关于java - 无法关闭所有打开的Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50946449/