我为使用ModalDialog窗口的旧应用程序编写Selenium测试。我知道如何处理一个ModalDialog:
在打开ModalDialog之前我调用这个js - 将窗口专业版ModalDialog更改为经典窗口:
((IJavaScriptExecutor) _driver).ExecuteScript("window.showModalDialog = window.open;");
打开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;
}
}
}
但如果我想用第二个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 v3.0.1和FireFox 45.6.0。
感谢您的帮助!
答案 0 :(得分:0)
为了能够处理下一个窗口,您应该使用
将焦点切换回默认内容_driver.SwitchTo().DefaultContent();