无法使用chromedriver创建新的远程会话

时间:2016-11-08 08:44:37

标签: selenium selenium-chromedriver

我之前使用的是selenium-server-standalone-2.53.1和chromedriver 2.22,我的验收运行得非常好。当我今天使用同一版本运行它时,它开始失败,导致Unable to create a new remote session错误。现在升级到selenium-server-standalone-3.0.1和chromedriver-2.25之后,它几乎抛出了同样的错误。我无法弄清楚为什么会这样。我对Selenium很新,非常感谢任何帮助。

升级后出错

Nov 08, 2016 4:27:54 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
Nov 08, 2016 4:27:54 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Falling back to original OSS JSON Wire Protocol.
Nov 08, 2016 4:27:54 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Falling back to straight W3C remote end connection

org.openqa.selenium.SessionNotCreatedException: Unable to create new remote session. desired capabilities = Capabilities [{browserName=chrome, version=, platform=ANY}], required capabilities = Capabilities [{}]
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700'
System info: host: 'xxx.yyy.com', ip: '172.19.10.212', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.10.5', java.version: '1.8.0_60'
Driver info: driver.version: RemoteWebDriver

at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:91)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:141)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:241)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:128)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:155)
at pet.furiend.website.selenium.test.acceptance.HomePageTest.setUp(HomePageTest.java:25)
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:497)
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.RunBefores.evaluate(RunBefores.java:24)
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:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

- - - - 的更新 -----

在对webdriver url进行更改后,它似乎已经开始了,但我现在又抛出了另一个错误。

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map

at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:251)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:158)
at pet.furiend.website.selenium.test.acceptance.HomePageTest.setUp(HomePageTest.java:25)
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:497)
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.RunBefores.evaluate(RunBefores.java:24)
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:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

3 个答案:

答案 0 :(得分:2)

如果您能让我们知道您的Chrome浏览器版本会有什么帮助,因为它会显着影响ChromeDriver的兼容性。例如,如果您不小心更新到Chrome浏览器版本54,那么您可能需要ChromeDriver 2.25才能正常使用。

只要您说它与之前的设置一起使用; 我会将您的资金投入到您的实际Chrome浏览器 (小心不是chromeDriver)更新;因此导致错误。整个组合:

  • Selenium Standalone

  • ChromeDriver

  • Chrome浏览器

更改时非常脆弱(我个人强迫我的浏览器不会因此而自动更新)。如果您想强制Chrome浏览器更新,只需转到Chrome路径并将更新文件夹重命名为 update_old (规范获胜路径) :C:\ Program Files(x86)\ Google \ update)。这将禁止Chrome进一步自动更新。

首先,如果我是你,我会尝试最新的ChromeDriver,这是v2.25,看看这是否能解决您的问题。您可以从这里下载latest ChromeDriver225

如果这没有解决您的问题,请尝试使用不同版本的Chrome + ChromeDriver,直到您做对了。 Selenium不易变化,3.0.1版本可以根据您的需要使用任何组合。请查看此处了解哪些版本的ChromeDriver与哪些版本的Chrome浏览器兼容。ChromeDriver Downloads/Compatibility

我可以确认最新的Chrome浏览器,ChromeDriver和Selenium可以很好地协同工作。 所以试试这个组合:

  • Chrome浏览器54.0.2840.87(撰写本文时的最新内容)
  • Chrome驱动程序2.25
  • Selenium 3.0.1

祝你好运!

在更新到ChromeDriver的最新版本后更新

正如我在下面的评论中提到的那样,我的选项100%使用最新版本的Chrome(54.0),ChromeDriver(2.25)和Selenium(3.0.1)。您可以先尝试评论所有功能并使用这些选项运行chrome:

    System.setProperty("webdriver.chrome.driver", "C:\\projects\\test\\chromedriver.exe");
            ChromeOptions options = new ChromeOptions();  
            options.addArguments("test-type");
            options.addArguments("--disable-extensions");

所以你可以用以下方式激活上面的内容:

driver = new ChromeDriver(options);

现在关于功能,我认为你正在使用的版本,没有获得或传达价值。如果你坚持使用它(我发现它没有个人意义)你可以指定一个像下面这样的值,看看这是否适合你。

caps.setCapability("browser_version", "54.0.2840.87");

现在,你应该已经解决了这个问题,但是如果出现了什么问题,这实际上阻碍了你的工作,那么试试这个非常稳定的组合:

  • Chrome(48.0.2564.97)来自here
  • 来自here
  • Chrome驱动程序(2.9)
  • Selenium 3.0.1

希望你这次可以解决,让我们知道你是怎么来的!

答案 1 :(得分:0)

您似乎正在使用OSX,是否有可能使用终端应用程序启动测试?

我被困这个错误了一段时间,我设法通过在高级终端应用设置中取消选中“启动时设置语言环境变量”复选框来解决问题。 或尝试使用此前缀启动测试:

LC_NUMERIC=”en_US.UTF-8″ *the command to launch your tests*

答案 2 :(得分:0)

我在Chrome浏览器55.0.2883.87,Chrome驱动程序2.27上遇到了同样的问题 Selenium 3.0.1,作者:

  

“org.openqa.selenium.SessionNotCreatedException:无法创建新的远程会话。”

以前Grid正在开发Firefox 46.0.1,Selenium 2.52.0。 但是我已将Node和Hub Url的位置切换为:

driver = new RemoteWebDriver(hubAddress.toURL(), capabilities);

它对我有用。 我希望这会对某人有所帮助。