无法创建新服务:通过SSH启动GRID时使用ChromeDriverService,但当直接在主机上创建GRID时可以正常使用

时间:2018-09-20 19:12:33

标签: java selenium selenium-webdriver webdriver selenium-chromedriver

为满足我们的测试/执行需求,我们有一个Windows Server 2012 R2 VM,其中包含.bat脚本,用于设置Selenium Enterprise Grid Hub和Chrome节点。

现在,当我通过直接登录VM使用这些脚本设置网格和节点时,测试执行将照常进行。但是,如果通过使用SSH调用远程调用相同的批处理脚本来进行设置,则会得到以下信息:

org.openqa.selenium.SessionNotCreatedException: Unable to create new service: ChromeDriverService
Build info: version: '3.13.0', revision: '2f0d292', time: '2018-06-25T15:32:19.891Z'
System info: host: 'TWV-BWN-A002', ip:, os.name: 'Windows Server 2012 R2', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_181'
Driver info: driver.version: unknown
Command duration or timeout: 212 milliseconds
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
    at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$new$0(JsonWireProtocolResponse.java:53)
    at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$getResponseFunction$2(JsonWireProtocolResponse.java:91)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:123)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:138)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:219)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:142)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:155)
    at com.fanniemae.lai.testauto.selenium.utils.WebConnector.getRemoteChromeDriver(WebConnector.java:74)
    at com.fanniemae.lai.testauto.selenium.alteryx.AlteryxStepDefinition.setup(AlteryxStepDefinition.java:46)

我正在使用selenium-server-standalone-3.13.0以及chromedriver版本2.38和Chrome 69。

到目前为止,我尝试做的事情是将chromedriver.exe二进制文件的位置添加到系统PATH中。还添加了一个webdriver.chrome.driver系统环境变量来保存相同的位置。

通过直接登录到VM或通过SSH远程调用脚本启动GRID时,我无法成功访问ip:port / grid / console。因此,在这一点上,我无法看到问题所在。有人遇到过类似的事情吗?

2 个答案:

答案 0 :(得分:0)

根据您在问题中提到的配置,您正在使用:

  • selenium-server-standalone-3.13.0
  • ChromeDriver 2.38版
  • Chrome v69.x

您的主要问题是所使用的二进制版本之间的不兼容性

  • 您正在使用 chromedriver = 2.38
  • chromedriver=2.38的发行说明中明确提到以下内容:
  

支持 Chrome v65-67

  • 您正在使用 chrome = 69.0
  • ChromeDriver v2.42的发行说明中明确提到以下内容:
  

支持 Chrome v68-70

因此 ChromeDriver v2.38 Chrome浏览器v69.0

之间存在明显的不匹配

解决方案

答案 1 :(得分:0)

尽管路径上具有Chromedriver.exe二进制文件,并且也作为系统环境变量提供,但我继续将其绝对路径作为参数传递给硒独立服务器jar和viola!奏效了!

java -Dwebdriver.chrome.driver = C:/full/path/to/chromedriver.exe -jar C:/full/path/to/selenium-server-standalone-3.13.0.jar -role node -hub http://ip:port/grid/register-浏览器“ browserName = chrome,version = ANY,maxInstances = 10,platform = WINDOWS”