Selenium IE WebDriver:NoSuchElementException

我正在尝试使用Selenium Internet Explorer WebDriver,但是一旦我尝试在加载的页面中找到一个元素,它就会一直抛出exception。

我正在使用在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); //... 

这是我正在运行测试的网页:

     TestSelenium   
<form action="" method="post"> Insert name:

一旦到达driver.FindElement(By.Name("name"))调用,就会引发exception。 在此之前,执行按预期工作(在实例化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.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与Internet Explorer 11一起正常运行。

我知道这远不是最好的解决方案,但只要它有效(并且已经有关于此的错误报告 ),对我来说没问题。

我没有任何解决方案,坚持了2天。 我试用2台机器,结果是1台机器正常,1台机器没有。 比较它们之后我发现我的错误是我的代码中缺少1行,所以它无法获取元素ID。 试试这个:

 [TestInitialize()] public void MyTestInitialize() { driver = new InternetExplorerDriver(); driver.Manage().Window.Maximize(); } 

请注意行driver.Manage()。Window.Maximize(); 希望这有帮助!! :d

请尝试以下操作:禁用IE 本机事件,并在实例化浏览器后添加10s implicit等待。 而且,只是为了澄清浏览器缩放级别也应该是100%。

 var options = new InternetExplorerOptions{EnableNativeEvents = false}; IWebDriver driver = new InternetExplorerDriver(options); driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); driver.Navigate().GoToUrl("http://mytesturl.com"); const string name = "Test"; IWebElement nameElement = driver.FindElement(By.XPath("//input[@name='name']")); nameElement.SendKeys(name); //...