java - 无法关闭所有打开的Windows

标签 java selenium-webdriver

我有一个场景,打开了两个窗口 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/

相关文章:

javascript - 在 selenium python 中单击 slider 按钮

javascript - 网站加载 javascript 后如何解析网站?

c# - 从 C# 启动进程时无法将自定义数量的 ram 分配给 java

java - 当面板中的 JButton 悬停时,JPanel 上的 MouseExited 会运行吗?

java - 单击按钮后无法修改或编辑 JFrame 字段

html - 如何使用xpath在特定行的下拉列表中选择一个值?

c# - TeamCity 和 Selenium WebDriver

java - 如何获取ArrayList中记录的信息?

java - Java ScheduledExecutorService中使用的调度算法

java - 从 Spark 2.0 中的逗号分隔字符串行中获取不同的项目