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

目前,我正在研究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) 

您已明确避免必须设置IE的保护模式设置。 这就是InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINSfunction设置的function。 当您删除此function设置并按项目Wiki中记录的设置保护模式设置时,问题似乎自行解决。

尝试添加隐式等待如下。 罗伯特说,你的url应该有http://

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

项目网站上有一个简短的FAQ条目 (大约复制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问题跟踪器上1795问题的一部分。