Selenium IE WebDriver:NoSuchElementException

时间:2015-01-08 11:50:43

标签: c# internet-explorer selenium selenium-webdriver webdriver

我试图开始使用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秒,以防在执行到达该点时网页没有被加载。没有运气。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

正如@JimEvans关于问题评论所报道的那样,Windows更新导致IE WebDriver无法正常工作。卸载update KB3025390使WebDriver可以正常使用Internet Explorer 11。

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

答案 1 :(得分:0)

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

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

     }

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

答案 2 :(得分:-1)

尝试以下方法: 它会在实例化浏览器后禁用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);
//...