目标窗口在硒中关闭

时间:2016-09-16 12:43:02

标签: java selenium-webdriver testng

在附带的屏幕截图中,我想单击“新建浏览器窗口”。 我想关闭浏览器窗口并单击“新建消息”窗口。 我关闭了浏览器窗口。 但我得到了例外

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();

2 个答案:

答案 0 :(得分:5)

我猜您尝试使用driver.switchTo().defaultContent();返回原始窗口?这不是正确的方法。

你应该:

  1. 在测试开始时存储原始窗口:
  2. String winHandleBefore = driver.getWindowHandle();

    1. 点击按钮,切换窗口,做任何事情

    2. 要返回原始窗口,请使用:

    3. driver.switchTo().window(winHandleBefore);

      答案基于:https://stackoverflow.com/a/9597714/4855333

答案 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)
      {

      }
   }
}