一尘不染

Selenium IE WebDriver:NoSuchElementException

selenium

我正在尝试使用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秒,以防在执行到该点时尚未加载网页。没运气。

谢谢你的帮助。


阅读 244

收藏
2020-06-26

共1个答案

一尘不染

正如@JimEvans对问题的评论所报告的,这是Windows更新,导致IE
WebDriver无法正常工作。卸载更新KB3025390已使WebDriver与InternetExplorer 11一起正常工作。

我知道这并不是最好的解决方案,但是只要它可行(并且已经有一个错误报告),对我来说就可以了。

2020-06-26