Selenium webdriver 无法处理新窗口

Selenium webdriver 无法处理新窗口,selenium-webdriver,Selenium Webdriver,我的selenium脚本出现了一个失败的情况(如下所述)。有人能帮我吗 我有一个网页,其中有一个保存按钮,点击保存按钮打开一个新的弹出窗口。我的要求是切换到新窗口并单击其中一个按钮(在新窗口中),该按钮将自动关闭窗口并导航到其他页面。我已经写了一个代码,它实际上工作得很好,但有时由于应用程序问题,新窗口无法关闭。由于这个原因,我的脚本失败了。这是我使用的代码 public void test() { // i have two pages gets involved

我的selenium脚本出现了一个失败的情况(如下所述)。有人能帮我吗

我有一个网页,其中有一个保存按钮,点击保存按钮打开一个新的弹出窗口。我的要求是切换到新窗口并单击其中一个按钮(在新窗口中),该按钮将自动关闭窗口并导航到其他页面。我已经写了一个代码,它实际上工作得很好,但有时由于应用程序问题,新窗口无法关闭。由于这个原因,我的脚本失败了。这是我使用的代码

   public void test() {

          // i have two pages gets involved in this scenario

          driver.get("some url"); // user is in page 1

          // clicking on save button
          driver.findElement(By.xpath("some xpath")).click(); // a new window opens
          Set<String> winIDS = driver.getWindowHandles();
          if (winIDS.size() > 1) {
                 Iterator<String> it = winIDS.iterator();
                 it.next();
                 String childWindow = it.next();
                 driver.switchTo().window(childWindow);
                 driver.findElement(By.xpath("some xpath")).click();
                 //after clicking on this button the user is navigated to page2
          }


          // after clicking on the button in the new window the new window gets closed and the user is navigate to page 2 as mentioned before. 
          // To validate if that has happened i am using the below code so that my test case flow wont be stopped. But 
          // the code is getting hanged at the new window as the app fails to perform the button click action on the new window. 
          winIDS = driver.getWindowHandles();
          if(winIDS.size() > 1)
          {
                 Iterator<String> it = winIDS.iterator();
                 it.next();
                 String childWindow = it.next();
                 driver.switchTo().window(childWindow);
                 driver.close();

                 //i m making the test failed here as the new window is not closed. 
          }

   }
公共无效测试(){
//我有两页涉及到这个场景
driver.get(“某些url”);//用户位于第1页
//点击保存按钮
driver.findElement(By.xpath(“某些xpath”))。单击();//将打开一个新窗口
设置winIDS=driver.getWindowHandles();
如果(winIDS.size()>1){
迭代器it=winIDS.Iterator();
it.next();
String childWindow=it.next();
driver.switchTo().window(childWindow);
findElement(By.xpath(“某些xpath”)).click();
//单击此按钮后,用户将被导航到第2页
}
//单击新窗口中的按钮后,新窗口将关闭,用户将导航到前面提到的第2页。
//为了验证是否发生了这种情况,我使用下面的代码,这样我的测试用例流就不会停止
//由于应用程序无法在新窗口上执行按钮单击操作,代码在新窗口处被挂起。
winIDS=driver.getWindowHandles();
如果(winIDS.size()>1)
{
迭代器it=winIDS.Iterator();
it.next();
String childWindow=it.next();
driver.switchTo().window(childWindow);
driver.close();
//由于新窗口未关闭,我正在使测试失败。
}
}

查看您的代码,我可以看到您对下一个窗口进行了两次迭代:

it.next();
String childWindow = **it.next();**
第二个it.next()已过时。
希望这能解决您的问题。

我将解释我从编写的代码中理解的内容。如果我错了,请纠正我。初始阶段的迭代器总是在实际开始之前指向内存位置。因此,第一个it.next()指向父窗口。所以我用了它。第二个it.next()指向子窗口。这就是为什么我使用了它。next()两次。关于第一部分,您得到了一组可供驱动程序使用的窗口,这是正确的。但是你怎么知道第一个是父母,第二个是孩子呢?尝试添加一个基于windowID的检查,以确保切换到正确的窗口。我刚刚尝试过,它正在工作。我检查切换到的窗口是否正确,脚本运行是否正常。谢谢你的解决方案Diana R:)如果这回答了你的问题,请将其标记为答案。