所以我有一个selenium webdriver将我登录到一个网站,然后我点击一个按钮打开第二个窗口。我使用下面的代码切换到新窗口
String winParent = driver.getWindowHandle();
for (String winHandle : driver.getWindowHandles()) {
driver.switchTo().window(winHandle);
}
现在在第二个窗口我运行一些自动化。完成后,我会按下保存按钮,这将关闭当前窗口。如果窗口没有关闭它意味着我在页面上有一些错误,我需要循环并修复它。
driver.findElement(By.id("btnSave")).click();
if (isAlive(driver) == false) {
//break and exit
System.out.println("cic" + name);
finalString = finalString + "cic: " + name;
break;
}
public Boolean isAlive(WebDriver driver) {
try {
driver.getCurrentUrl();//or driver.getTitle();
return true;
} catch (Exception ex) {
return false;
}
}
当程序捕获错误并且窗口未关闭时,程序按预期工作。但是只要一切都清楚并且窗口关闭,它就会进入上面的if语句并显示此错误。
无法从渲染器接收消息。
我相信我不会检查窗口是否已正确关闭。
编辑:经过一些调试后,似乎一旦窗口关闭,程序就无法真正告诉下一步该做什么。 http://i.imgur.com/l8nsPPr.png
答案 0 :(得分:0)
我建议使用windowHandle。
您正在String winParent = driver.getWindowHandle();
然后切换到第二个窗口,它将具有不同的句柄。 当您需要检查第二个窗口是否仍然打开时,只需使用:
private boolean isNewWindowOpened(WebDriver driver, String parentWindowHandle) {
try {
return !driver.getWindowHandle().equals(parentWindowHandle);
} catch (Exception ex) {
driver.switchTo(parentWindowHandle);
return false;
}