【问题标题】:Selenium WebDriver hungs or gets stuck while switching from child window to parent window using IE11 in Win 8.1在 Win 8.1 中使用 IE11 从子窗口切换到父窗口时 Selenium WebDriver 挂起或卡住
【发布时间】:2017-11-30 12:45:32
【问题描述】:

Selenium WebDriver - 从子窗口切换回父窗口时挂起或卡住。如果我在调试模式下手动更改父窗口中的特定页面,则成功从子窗口切换到父窗口。猜测父窗口中的特定页面会阻止窗口切换,因为它期望子窗口关闭。我该如何克服这个问题?(将控制权带回父窗口以进行进一步验证)(还建议是否有任何替代方法可用于切换窗户)

代码:(使用正确的代码)

String parentWin = browser.getWindowHandle();
Set<String> handles = browser.getWindowHandles();
String winHandle = null;
Iterator<String> itr = handles.iterator();while(itr.hasNext())
{
    winHandle = itr.next();
    if (!winHandle.equals(parentWin)) {
        browser.switchTo().window(winHandle); //Tried Giving Enough delay also
        browser.switchTo().window(parentWin);// It hungs here (Executes at
                                                // the case if change the
                                                // specific page in parent 
                                                // window)
    }

}

【问题讨论】:

  • 如果你在 switch 之间放置一些等待呢?
  • 尝试添加大量等待。但这没有帮助
  • 是仅在 Internet Explorer 中发生还是在其他浏览器中也发生?
  • 应用程序仅在 IE 中运行最佳。如果我在调试模式下手动离开父窗口中的特定页面,也会发生切换。以前从未遇到过此类问题。

标签: java selenium internet-explorer-11 webdriverwait window-handles


【解决方案1】:

问题

根据您的代码试验,您正在执行首先打开子窗口的操作。接下来,您尝试将父窗口句柄存储为String parentWin = browser.getWindowHandle();。但是到那时子窗口已启动,因此子窗口句柄存储在parentWin 中。因此 WebDriver 以后无法切换到真正的父窗口。

解决方案

在执行打开子窗口的操作之前,将父窗口的窗口句柄存储在字符串中。下面是工作代码集:

String parentWin = browser.getWindowHandle();
//perform the action/click which opens a child window
//Now create the Set
Set<String> handles = browser.getWindowHandles();
//Create iterator to traverse
Iterator<String> itr = handles.iterator();
//create a while loop if there are multiple window handles
while(i1.hasNext())
{
  //Store the Child window handle
  String child_window = i1.next();
  //Check if parent window handle not equals child window handle
  if (!parentWin.equalsIgnoreCase(child_window))
  {
    //child window present, so switch to child
    driver.switchTo().window(child_window);
    //Do your work here on child window
    //switch back to parent window
    browser.switchTo().window(parentWin );
  }
}

【讨论】:

  • 我也执行了与您在评论中提到的相同的操作。请参考我的代码。谢谢
  • @karthick 用更新的 cmets 检查我的更新答案。希望对您有所帮助。谢谢
  • 嗨,debanjan,我的表现和你说的一样。实际上,它可以切换。但是在父窗口 Driver.switchto.window(ParentWinInst) 的特定页面中被挂起。当我尝试在调试模式下手动更改父 win 中的页面时,控制权传递给父窗口。但我的问题是为什么我在拥有那个特定页面时不能切换到父窗口。还验证了窗口句柄有两个不同的会话 ID。谢谢
  • @karthick 没有看到您的实际代码就无法发表更多评论。但是你粘贴的代码肯定有一个错误,我已经详细说明了。谢谢
  • 我也试过上面的解决方案。但我没有解决我的问题。谢谢
最近更新 更多