Selenium IE WebDriver:NoSuchElementException

Selenium IE WebDriver: NoSuchElementException

我正在尝试使用 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 被实例化并正确导航到 URL 时启动 IE)。

这是我遇到的异常:

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 秒,以防网页在执行到达该点时未加载。运气不好。

感谢您的帮助。

尝试以下操作: 它禁用 IE native event 并在实例化浏览器后添加 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);
//...

根据 on the question's comments, it was a Windows update what was causing the IE WebDriver to not work properly. Uninstalling the update KB3025390 的报告,WebDriver 已与 Internet Explorer 11 一起正常工作。

我知道这远不是最好的解决方案,但只要它有效(并且已经有 bug report),对我来说就没问题。

我在这件事上卡了 2 天,没有任何解决办法。我尝试使用 2 台机器,结果是 1 台机器运行良好,而 1 台运行不正常。比较它们后,我发现我的错误是我的代码中缺少 1 行,所以它无法获取元素 ID。 试试这个:

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

     }

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