我正在尝试使用Selenium Internet Explorer WebDriver,但是一旦我尝试在已加载页面中找到一个元素,它就会不断抛出异常。
我正在使用Windows 8.1 x64计算机上运行的Selenium客户端和2.44版本,Internet Explorer
11(我尝试过32位和64位版本)的.NET实现。
这是我正在使用的C#测试代码:
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://mytesturl.com");
const string name = "Test";
IWebElement nameElement = driver.FindElement(By.Name("name"));
nameElement.SendKeys(name);
//...
这是我正在运行测试的网页:
<!DOCTYPE html>
<html>
<head runat="server">
<meta name="viewport" content="width=device-width" />
<title>TestSelenium</title>
</head>
<body>
<div>
<form action="<%: Url.Action("TestSeleniumFormResponse") %>" method="post">
Insert name: <input name="name" type="text"/>
<button type="submit">Submit</button>
</form>
</div>
</body>
</html>
异常会在driver.FindElement(By.Name("name"))
调用后立即引发。在此之前,执行将按预期工作(在实例化Webdriver时启动IE并正确导航到URL)。
这是我得到的例外:
OpenQA.Selenium.NoSuchElementException : Unable to find element with name == name
en OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
en OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
en OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
en OpenQA.Selenium.Remote.RemoteWebDriver.FindElementByName(String name)
en OpenQA.Selenium.By.<>c__DisplayClassa.<Name>b__8(ISearchContext context)
en OpenQA.Selenium.By.FindElement(ISearchContext context)
en OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)
我已将IE中的所有安全区域设置为具有相同的保护模式设置(尝试将所有启用和全部禁用),禁用了增强的保护模式,并按照官方网站的必需配置部分中的说明设置了注册表项(https://code.google.com/p/selenium/wiki/InternetExplorerDriver)。我试图显式等待60秒,以防在执行到该点时尚未加载网页。没运气。
谢谢你的帮助。
正如@JimEvans对问题的评论所报告的,这是Windows更新,导致IE
WebDriver无法正常工作。卸载更新KB3025390已使WebDriver与InternetExplorer 11一起正常工作。
我知道这并不是最好的解决方案,但是只要它可行(并且已经有一个错误报告),对我来说就可以了。