我可以使用Selenium处理多个modalDialog吗?

时间:2017-01-06 08:30:40

标签: javascript c# selenium showmodaldialog

我为使用ModalDialog窗口的旧应用程序编写Selenium测试。我知道如何处理一个ModalDialog:

  1. 在打开ModalDialog之前我调用这个js - 将窗口专业版ModalDialog更改为经典窗口:

    ((IJavaScriptExecutor) _driver).ExecuteScript("window.showModalDialog = window.open;");

  2. 打开ModalDialog后,我切换到该窗口,我可以用它处理:

    public static void SwitchToWindow(IWebDriver _driver, string url)
    {
        String parentWindowHandle = _driver.CurrentWindowHandle;
    
        IWebDriver popup = null;
        var windowIterator = _driver.WindowHandles;
    
        foreach (var windowHandle in windowIterator)
        {
            popup = _driver.SwitchTo().Window(windowHandle);
    
            if (popup.Url.Contains(url))
            {
                break;
            }
        }
    }
    
  3. 但如果我想用第二个ModalDialog(所以我现在在第三个窗口)这样做,我就遇到了这个问题:

      

    抛出异常:   OpenQA.Selenium.NoSuchElementException:找不到元素:By.Id:btnClearSearchName

    (在Firefox窗口中闪烁:发送请求,转移内容,读取内容)所以很明显Selenium无法找到元素,因为页面未加载。

    如果我之前尝试打开没有JS执行程序的第三个窗口,则显示此错误:

      

    抛出异常:   System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> OpenQA.Selenium.WebDriverException:对URL http://localhost:7057/hub/session/c7e75043-9605-4f7c-80ac-233803527709/element/%7B7664f1ae-9c42-4de6-9e16-34fede6a9e26%7D/click的远程WebDriver服务器的HTTP请求在60秒后超时。 ---> System.Net.WebException:操作已超时       在System.Net.HttpWebRequest.GetResponse()

    我使用Selenium v​​3.0.1和FireFox 45.6.0。

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

为了能够处理下一个窗口,您应该使用

将焦点切换回默认内容
_driver.SwitchTo().DefaultContent();