Selenium Java报错NoSuchWindowException:目标窗口已关闭的解决问询
解决Selenium Java中
org.openqa.selenium.NoSuchWindowException错误 错误信息:
org.openqa.selenium.NoSuchWindowException: no such window: target window already closed
问题场景
- 脚本先在主标签页执行部分操作;
- 打开新标签页;
- 切换回主标签页并将其关闭;
- 尝试打开与原主标签页URL相同的新标签页时触发上述错误。
解决方案
1. 关闭主标签页后更新窗口句柄引用
关闭主标签页后,Selenium仍保留着原主窗口的句柄引用,此时必须重新获取当前所有有效的窗口句柄,确保后续操作使用的是活跃窗口的句柄。示例代码:
// 切换到主标签页并关闭 driver.switchTo().window(mainWindowHandle); driver.close(); // 重新获取当前所有有效窗口句柄 Set<String> currentHandles = driver.getWindowHandles(); // 切换到当前存在的标签页(此处假设仅剩余一个标签页) for(String handle : currentHandles) { driver.switchTo().window(handle); } // 打开目标URL的新标签页 driver.executeScript("window.open('原主标签页URL');");
2. 禁止复用已关闭窗口的句柄
不要将原主窗口的句柄用于后续打开新标签页的操作,每次打开新标签页前,确保当前操作的是活跃的有效窗口。直接在当前活跃标签页执行window.open()打开目标URL即可,无需关联已关闭的窗口。
3. 操作前检查窗口有效性
在执行打开新标签页的操作前,先验证当前驱动关联的窗口是否有效,可通过尝试获取当前窗口的URL或标题来判断:
try { driver.getCurrentUrl(); } catch(NoSuchWindowException e) { // 窗口已失效,切换到任意有效窗口 Set<String> handles = driver.getWindowHandles(); if(!handles.isEmpty()) { driver.switchTo().window(handles.iterator().next()); } } // 执行打开新标签页操作 driver.executeScript("window.open('原主标签页URL');");
内容的提问来源于stack exchange,提问作者Megha Hadagali
相关产品推荐
相关产品推荐

