org.openqa.selenium.WebDriverException:通过 Selenium v​​3.4.0 和 geckodriver-v0.20.1 启动 Firefox Browser 45.0.1 时连接被拒绝

org.openqa.selenium.WebDriverException: connection refused while launching Firefox Browser 45.0.1 through Selenium v3.4.0 and geckodriver-v0.20.1

我无法为以下脚本启动 Firefox 浏览器。

脚本#1:

System.setProperty("webdriver.gecko.driver", "D:\selenium\Geckodriver\geckodriver.exe");
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capabilities);  
driver.close();

脚本#2:

System.setProperty("webdriver.gecko.driver", "D:\selenium\Geckodriver\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.google.com");

我的 Firefox 版本:45.0.1
Selenium Jar 版本:selenium-server-standalone-3.4.0
Gecko 驱动程序版本:geckodriver-v0.20.1-win32

我收到如下所述的错误消息:

Exception in thread "main" org.openqa.selenium.WebDriverException: connection refused
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'SYNCGDC4098', ip: '172.26.59.52', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_151'
Driver info: driver.version: FirefoxDriver
remote stacktrace: 
    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.W3CHandshakeResponse.lambda$new[=13=](W3CHandshakeResponse.java:57)
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction(W3CHandshakeResponse.java:104)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession(ProtocolHandshake.java:365)
    at java.util.stream.ReferencePipeline.accept(Unknown Source)
    at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
    at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
    at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
    at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
    at java.util.stream.ReferencePipeline.findFirst(Unknown Source)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:368)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:159)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:108)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:104)
    at seleniumtips.BasicScript.openApp(BasicScript.java:10)
    at seleniumtips.BasicScript.main(BasicScript.java:18)

我做错了什么?

geckodriver releases可以看出,目前geckodriver的最新版本是v0.20.1。您应该将这个与当前最新版本的 Firefox 浏览器一起使用。

另外,您使用的是旧版本的selenium(来自here,目前最新的是3.12.0)。

您需要更新您的 firefox 浏览器和 selenium 独立服务器。

如果你想(被迫)使用最旧的(45.0.1),你应该使用相关的geckodriver。

您可以分别升级 Seleniumgeckodriver,正如@Davide Patti 所说。但是,在您的 script1 中,这一行:WebDriver driver = new FirefoxDriver(capabilities); 将不受 Selenium 3.12.0 支持,因为它已被弃用。

您可以试用的代码:

FirefoxOptions foptions =  new FirefoxOptions();  
foptions.setCapability("marionette", true);  
WebDriver driver = new FirefoxDriver(foptions);

这个错误信息...

Exception in thread "main" org.openqa.selenium.WebDriverException: connection refused
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'

...暗示 WebDriverException 是由于驱动程序无法启动其内部服务器以与 Java 客户端.[=22 通信而引发的=]

为简单起见,因为您使用的是 Selenium Java 客户端 v3.4.0Firefox v45.0.1 您需要使用兼容的 GeckoDriver 二进制文件。

Geckodriver 0.16 is strongly recommended

  • 所以你必须将 GeckoDriver 二进制版本降到 0.16.0.

  • 现在您将使用 Selenium Java Client v3.4.0, GeckoDriver v0.16.0 使用 Firefox v45.0.1 你必须使用 System.setProperty() 行来传递 Key webdriver.gecko.driverValue作为GeckoDriver binary绝对路径,最后通过DesiredCapabilities class set the capability marionatte to false and then use merge() method from MutableCapabilities class to merge the capability into an instance of FirefoxOptions实例启动Firefox浏览器如下:

    System.setProperty("webdriver.gecko.driver", "C:/path/to/geckodriver.exe");
    DesiredCapabilities dc = new DesiredCapabilities();
    dc.setCapability("marionatte", false);
    FirefoxOptions opt = new FirefoxOptions();
    opt.merge(dc);
    FirefoxDriver driver =  new FirefoxDriver(opt);
    driver.get("https://whosebug.com");
    System.out.println("Application opened");
    System.out.println("Page Title is : "+driver.getTitle());
    driver.quit();
    

您可以在以下位置找到类似的讨论: