在附带的屏幕截图中,我想单击“新建浏览器窗口”。 我想关闭浏览器窗口并单击“新建消息”窗口。 我关闭了浏览器窗口。 但我得到了例外
org.openqa.selenium.NoSuchWindowException: no such window: target window already closed
截图
以下是详细信息 Screenshot
以下是代码
@Test
public void testing()
{
driver.manage().window().maximize();
driver.get("http://www.seleniumframework.com/Practiceform/");
driver.findElement(By.id("button1")).click();
Set<String> handle=driver.getWindowHandles();
for(String handles:handle){
try{
String text=driver.switchTo().window(handles).getPageSource();
if(text.contains("Agile Testing and ATDD Automation")){
System.out.println("Text found");
driver.close();
break;
}
}catch(Exception e){}
}
driver.switchTo().defaultContent();
driver.findElement(By.xpath("//button[contains(text(),'New Message Window')]")).click();
driver.quit();
答案 0 :(得分:5)
我猜您尝试使用driver.switchTo().defaultContent();
返回原始窗口?这不是正确的方法。
你应该:
String winHandleBefore = driver.getWindowHandle();
点击按钮,切换窗口,做任何事情
要返回原始窗口,请使用:
driver.switchTo().window(winHandleBefore);
答案 1 :(得分:0)
在您的代码中,Set<String> handle=driver.getWindowHandles();
将包含浏览器的句柄列表。这也将包含当前标签在其第一个位置的窗口句柄。
所以当你第一次执行循环时,焦点将只在当前窗口上。所以当你的代码执行它时会关闭当前窗口。
您需要先获取当前窗口句柄,然后在切换到任何窗口之前,只需检查您需要切换的窗口是否不是当前窗口句柄。
请看下面的例子。
String mainwindow = driver.getWindowHandle();
Set<String> handle=driver.getWindowHandles();
for(String handles:handle)
{
if(!mainwindow.equals(handles)){
try
{
String text=driver.switchTo().window(handles).getPageSource();
if(text.contains("Agile Testing and ATDD Automation"))
{
System.out.println("Text found");
driver.close();
break;
}
}catch(Exception e)
{
}
}
}