我正在尝试使用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)。
driver.FindElement(By.Name("name"))
这是我得到的例外:
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一起正常工作。
我知道这并不是最好的解决方案,但是只要它可行(并且已经有一个错误报告),对我来说就可以了。