2

我正在使用WebDriver. 我降低了FirefoxWebDriverChromeWebDriver; geckodriver-v0.10.0-win64.zipchromedriver_win32.zip

它们被提取到路径位置并相应地重命名;wires.exechromedriver.exe分别。

当我创建我的测试时,执行如下:

DesiredCapabilities cap = DesiredCapabilities.firefox();
cap.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(cap);

//WebDriver driver = new ChromeDriver(DeesiredCapabilities.chrome());

并且对于Firefox,它无法创建会话(并且测试失败),而 chrome 成功然后通过了测试。

测试的输出如下:

Sep 28, 2016 2:51:32 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
Sep 28, 2016 2:51:38 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Falling back to straight W3C remote end connection
Sep 28, 2016 2:51:44 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Falling back to original OSS JSON Wire Protocol.

org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Build info: version: 'unknown', revision: 'c7b525d', time: '2016-09-01 14:57:44 -0700'
System info: host: 'CHI-CS-55DXX52', ip: '10.60.68.15', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_77'
Driver info: driver.version: FirefoxDriver

	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:618)
	at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:242)
	at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:129)
	at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:231)
	at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:219)
	at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:214)
	at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:131)
	at com.polymerdart.webdriver.MyFirstTest.startWebDriver(MyFirstTest.java:21)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: org.openqa.selenium.SessionNotCreatedException: Unable to create new remote session. desired capabilities = Capabilities [{marionette=true, browserName=firefox, version=, platform=ANY}], required capabilities = Capabilities [{}]
Build info: version: 'unknown', revision: 'c7b525d', time: '2016-09-01 14:57:44 -0700'
System info: host: 'CHI-CS-55DXX52', ip: '10.60.68.15', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_77'
Driver info: driver.version: FirefoxDriver
	at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:80)
	at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:141)
	at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:597)
	... 34 more

我确实看到Firefox了打开,但它只是无法创建会话并关闭。我目前正在这台机器上运行Firefox version 41.0

4

1 回答 1

4

这是Selenium3Mozilla Firefox版本之间的无能问题。

实际上现在Selenium3支持可执行文件像其他驱动程序一样geckodriver启动但可执行文件兼容,这就是你遇到麻烦的原因。Mozilla FirefoxgeckodriverMozilla Firefox >= v47

有两个解决方法可以摆脱这个问题:-

  • 也将您的硒版本降级Selenium2为。

  • 升级您的Mozilla Firefox >= v47,并尝试如下Selenium3启动:-FirefoxDriver

    //Set system property with downloaded executable geckodriver from your system location 
    
    DesiredCapabilities cap = DesiredCapabilities.firefox();
    cap.setCapability("marionette", true);
    WebDriver driver = new FirefoxDriver(cap);
    
于 2016-09-28T19:57:24.070 回答