我正在使用selenium自动化。我已编码登录页面,它工作正常。
结果登录并打开了新子窗口,父窗口关闭。
由于我的网络驱动程序停止并导致异常
线程main
org.openqa.selenium.NoSuchWindowException
中的例外:
找不到窗口(警告:服务器未提供任何堆栈跟踪信息)
请帮忙
答案 0 :(得分:1)
Selenium保留一个窗口(句柄)列表。 webdriver需要指向正确的句柄。当窗口关闭时,其句柄将被删除,您的驱动程序现在将指向不再存在的内容。
可能,您必须明确切换窗口以将驱动程序指向正确的窗口句柄。也许这可能会有所帮助:
“结果打开了新的子窗口,关闭了父窗口”
(1)下面的代码向您展示了如何检索窗口句柄列表,并根据其标题检索正确的句柄。
private void handleMultipleWindows(String windowTitle) {
Set<String> windows = driver.getWindowHandles();
for (String window : windows) {
driver.switchTo().window(window);
if (driver.getTitle().contains(windowTitle)) {
return;
}
}
}
您可以使用该功能(或类似的功能)来检索新窗口。从您提供的代码中,这将给出:
// Entering the credentials in the login window.
driver.findElement(By.id(txtUserId)).clear();
driver.findElement(By.id(txtUserId)).sendKeys(poovan);
driver.findElement(By.id(txtPassword)).clear();
driver.findElement(By.id(txtPassword)).sendKeys(welcome1);
driver.findElement(By.id(btnSubmit)).click();
// Here the login window gets closed, handler to that window disappears, and driver becomes stale.
// So we need update the driver to point to the new window
handleMultipleWindows("The title of my new window");
driver.findElement(By.name(bono)).sendKeys(080);
答案 1 :(得分:0)
请使用以下代码。它肯定会起作用。
String parentWindow = driver.getWindowHandle();
Set<String> handles2 = driver.getWindowHandles();
for (String windowHandle : handles2) {
if (!windowHandle.equals(parentWindow)) {
driver.switchTo().window(windowHandle);
}
}