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
我正在尝试使用 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);
//...
根据
我知道这远不是最好的解决方案,但只要它有效(并且已经有 bug report),对我来说就没问题。
我在这件事上卡了 2 天,没有任何解决办法。我尝试使用 2 台机器,结果是 1 台机器运行良好,而 1 台运行不正常。比较它们后,我发现我的错误是我的代码中缺少 1 行,所以它无法获取元素 ID。 试试这个:
[TestInitialize()]
public void MyTestInitialize() {
driver = new InternetExplorerDriver();
driver.Manage().Window.Maximize();
}
请注意行 driver.Manage().Window.Maximize(); 希望这有帮助! :D