【问题标题】:Selenium handling browser windows in loopSelenium 循环处理浏览器窗口
【发布时间】:2017-01-31 19:54:54
【问题描述】:

所以我有这段代码,它使当前 url 成为父窗口和我通过执行任务子窗口打开的新窗口。问题是这段代码执行任务 1 然后关闭子窗口,但是当它进入 for() 循环时,它会打开另一个窗口但不聚焦它会抛出错误 no such window。

String parent=driver.getWindowHandle();
Set<String>s1=driver.getWindowHandles();
Iterator<String> I1= s1.iterator();

while(I1.hasNext()){
  String child_window=I1.next();
  if(!parent.equals(child_window))
    {
    driver.switchTo().window(child_window);
    //do task number 1
    driver.close();
for(int x = 1; x < 9000; x = x + 1) {
  driver.switchTo().window(parent);
  //opens another window
  driver.switchTo().window(child_window);
  //do task 2
  driver.close();
     }
   }
}

【问题讨论】:

  • @GrzegorzGórkiewicz 很好,它关闭了我的孩子窗口......回到父母并打开另一个孩子,这就是我想做的事

标签: java loops selenium iterator


【解决方案1】:

driver.switchTo().window(child_window); 行中,您正在使用第一个窗口的WindowHandle,您关闭且不再可用的窗口,因此NoSuchWindowException

每次打开新窗口时,您都需要获取新窗口的窗口句柄。你可以创建一个切换窗口的方法

private void switchToWindow(String parentHandle) {
    Set<String> windowHandles = driver.getWindowHandles();
    for(String windowHandle : windowHandles) {
        if (!parentHandle.equals(windowHandle)) {
            driver.switchTo().window(windowHandle);
            return;
        }
    }
}

代码会是这样的

String parentHandle = driver.getWindowHandle();

switchToWindow(parentHandle);
//do task number 1
driver.close();

for(int x = 1 ; x < 9000 ; x += 1) {
    driver.switchTo().window(parentHandle);
    //opens another window
    switchToWindow(parentHandle);
    //do task 2
    driver.close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多