org.openqa.selenium.WebDriverException:通过 Selenium v3.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。
您可以分别升级 Selenium 和 geckodriver,正如@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.0 和 Firefox v45.0.1 您需要使用兼容的 GeckoDriver 二进制文件。
- Selenium Java Client v3.4.0 的发行说明提及:
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.driver
和 Value作为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();
您可以在以下位置找到类似的讨论:
我无法为以下脚本启动 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。
您可以分别升级 Selenium 和 geckodriver,正如@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.0 和 Firefox v45.0.1 您需要使用兼容的 GeckoDriver 二进制文件。
- Selenium Java Client v3.4.0 的发行说明提及:
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()
行来传递 Keywebdriver.gecko.driver
和 Value作为GeckoDriver binary绝对路径,最后通过DesiredCapabilities class set the capability marionatte to false and then usemerge()
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();
您可以在以下位置找到类似的讨论: