在Selenium WebDriver中实现InternetExplorerDriver期间发生NoSuchElementException

时间:2011-09-02 01:15:23

标签: java internet-explorer selenium-webdriver

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

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

Jar: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)

3 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:5)

尝试隐式添加,如下所示。正如罗伯特所说,你的网址应该是http://

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

答案 2 :(得分:2)

项目网站上有一个简短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的全部内容。