【问题标题】:NoSuchElementException is occurred during implementation of InternetExplorerDriver in Selenium WebDriver在 Selenium WebDriver 中实现 InternetExplorerDriver 期间发生 NoSuchElementException
【发布时间】:2011-09-02 01:15:23
【问题描述】:

目前,我正在开发 WebDriver 以调用 IE 浏览器来运行测试。但是当我尝试运行下面的简单示例时,我收到了NoSuchElementException

但是,如果我使用 Chrome 驱动程序或 Firefox 驱动程序,代码就可以正常工作。 任何想法或想法将不胜感激。

罐子:selenium-server-standalone-2.5.0.jar

代码:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public static void main(String[] args) throws InterruptedException {
  DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
  ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
  WebDriver driver = new InternetExplorerDriver(ieCapabilities);
  driver.get("www.google.com");
  driver.findElement(By.name("q"));
}

错误信息:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with name == q (WARNING: The server did not provide any stacktrace information)
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.5.0', revision: '13516', time: '2011-08-23 18:29:57'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_25'
Driver info: driver.version: RemoteWebDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:409)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:197)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:246)
    at org.openqa.selenium.By$ByName.findElement(By.java:298)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:189)
    at lib.WebDriver2.main(WebDriver2.java:14)

【问题讨论】:

  • 该堆栈跟踪/错误消息看起来不完整,您确定它完整吗?
  • 您好,更新了错误信息 :) IE 浏览器已打开并定向到 google 页面。但是,它试图找到元素“q”时失败了
  • 这里有同样的问题。我使用的是 64 位系统,但使用的是 32 位 jvm,所以驱动程序也是 32 位的。下面列出的没有任何帮助
  • 您已经明确避免必须设置 IE 的保护模式设置。这就是InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS 功能设置的作用。如果您删除此功能设置并按照project wiki 中的说明设置保护模式设置,会发生什么情况?
  • 您好 JimEvans,非常感谢您的帮助!我删除了“ieCapabilities”。相反,我选择了 Internet 选项并按照 Project Wiki 的步骤进行操作。它现在对我有用。最重要的信息是“您必须将每个区域的保护模式设置设置为相同的值”。再次感谢您的帮助。

标签: java internet-explorer selenium-webdriver


【解决方案1】:

您已明确避免必须设置 IE 的保护模式设置。这就是InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS 功能设置的作用。当您删除此功能设置并按照project wiki 中的说明设置保护模式设置时,问题似乎自行解决了。

【讨论】:

  • 嗨,吉姆。感谢您的解决方案。我没有任何权限来修改安全设置。有解决方法吗?谢谢!
  • 能力的解决方法。 This blog post 描述了保护模式设置为何重要的技术原因,以及您的组织为什么在不允许您更改设置的情况下积极破坏您完成工作的能力。
【解决方案2】:

尝试像下面这样隐式添加等待。正如罗伯特所说,您的网址应该有 http://

WebDriver driver = new InternetExplorerDriver(ieCapabilities);
driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);

【讨论】:

  • 您好 Nilesh,非常感谢您的帮助。但是,该解决方案对我不起作用。
  • 那是因为您应该使用 FluentWait 代替 .ignoring 子句从异常中恢复。
【解决方案3】:

项目网站上有一个简短的FAQ entry(大约在 Selenium 2.9 上复制):

InternetExplorerDriver 要求设置所有安全域 到相同的值(信任或不信任) 如果您不在 位置来修改安全域,然后您可以覆盖 像这样检查:

DesiredCapabilities capabilities =
DesiredCapabilities.internetExplorer();
capabilities.set(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true); 
WebDriver driver = new InternetExplorerDriver(capabilities);

从常量的名称可以看出,这可能会引入片状 在你的测试中。如果所有站点都在同一个保护域中,您 应该没问题。

并行 C# InvalidOperationException 消息:

启动 Internet Explorer 时出现意外错误。保护模式必须是 为所有区域设置为相同的值(启用或禁用)。 (NoSuchDriver)

和 C# 而不是调整 IE 设置(截至 2016 年 2 月的最佳猜测):

var ieOptions = new OpenQA.Selenium.IE.InternetExplorerOptions {
                IntroduceInstabilityByIgnoringProtectedModeSettings = true };
using (var driver = new InternetExplorerDriver(ieOptions))
{

这都是 Selenium 问题跟踪器上 issue 1795 的一部分。

【讨论】:

  • 对于 C# 版本,我无法在 InternetExplorerDriver 构造函数中传递 DesiredCapabilities
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 2017-10-15
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多