为什么Chrome试图在Selenium下运行Chromedriver时无法启动?

所以我有一个Chromedriver /selenium设置工作之前,但现在试图安装在一台新的机器上(64Bit Linux)的一切,它给我的问题,并没有告诉我什么是绊倒。

我正在使用Selenium独立服务器版本2.37.0和nodejs以及Google上现有的最新版本的Chromedriver(我也尝试过之前版本的Chromedriver 2.0,结果相同)。

如下面的输出所示,当我尝试使用webdriver运行脚本时,出现以下错误: Caused by: org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited abnormally 。 我没有从chromedriver输出日志,只输出Selenium(带有错误)和Node.js(尝试运行testing脚本)。

任何人都可以给我一个我在做什么错误的想法吗?

编辑:我忘了补充说,在失败后有一个与Chromedriver运行的过程,所以这一块是好的,我的Chrome可执行文件确实在像Chromedriver希望它是在/ etc / bin /谷歌铬。

Output:

一旦我开始selenium运行,我试图运行一个简单的testing脚本的内容:

 var webdriverjs = require("webdriverjs"); var client = webdriverjs.remote({desiredCapabilities:{browserName:"chrome"}}); // to run in chrome client .init() .url("https://github.com/") .end(); 

运行testing脚本的Node.js控制台输出如下所示:

 [1;33m=====================================================================================[0m Selenium 2.0/webdriver protocol bindings implementation with helper commands in nodejs by Camilo Tapia. For a complete list of commands, visit [1;32mhttp://code.google.com/p/selenium/wiki/JsonWireProtocol[0m. Not all commands are implemented yet. visit [1;32mhttps://github.com/Camme/webdriverjs[0m for more info on webdriverjs. [1;33m=====================================================================================[0m [1;30m[21:31:09]: [0m [0;35mCOMMAND [0mPOST "/wd/hub/session" [1;30m[21:31:09]: [0m [0;33mDATA [0m{"desiredCapabilities":{"browserName":"chrome","version":"","javascriptEnabled":true,"platform":"ANY"},"sessionId":null} [1;30m[21:31:32]: [0m [1;31mERROR [0mCOULDNT GET A SESSION ID [1;30m[21:31:32]: [0m Exiting process with 1 

最后,Selenium启动时以及尝试运行脚本时的输出如下所示。 出于某种原因,我没有得到一个chromedriver.log文件。

 java -jar /usr/local/automation/framework/selenium/selenium-server-standalone-2.37.0.jar -Dwebdriver.chrome.driver='/usr/local/automation/framework/selenium/chromedriver' & [1] 21293 ubuntu@ip-10-0-0-35:/usr/local/automation/framework/selenium$ Nov 15, 2013 9:30:31 PM org.openqa.grid.selenium.GridLauncher main INFO: Launching a standalone server Setting system property webdriver.chrome.driver to /usr/local/automation/framework/selenium/chromedriver 21:30:32.240 INFO - Java: Oracle Corporation 23.5-b02 21:30:32.241 INFO - OS: Linux 3.2.0-48-virtual amd64 21:30:32.289 INFO - v2.37.0, with Core v2.37.0. Built from revision a7c61cb 21:30:32.586 INFO - Default driver org.openqa.selenium.iphone.IPhoneDriver registration is skipped: registration capabilities Capabilities [{platform=MAC, browserName=iPhone, version=}] does not match with current platform: LINUX 21:30:32.626 INFO - Default driver org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{platform=WINDOWS, ensureCleanSession=true, browserName=internet explorer, version=}] does not match with current platform: LINUX 21:30:32.774 INFO - Default driver org.openqa.selenium.iphone.IPhoneDriver registration is skipped: registration capabilities Capabilities [{platform=MAC, browserName=iPad, version=}] does not match with current platform: LINUX 21:30:32.913 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub 21:30:32.918 INFO - Version Jetty/5.1.x 21:30:32.919 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] 21:30:32.920 INFO - Started HttpContext[/selenium-server,/selenium-server] 21:30:32.920 INFO - Started HttpContext[/,/] 21:30:32.968 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@3b3d8503 21:30:32.968 INFO - Started HttpContext[/wd,/wd] 21:30:32.974 INFO - Started SocketListener on 0.0.0.0:4444 21:30:32.975 INFO - Started org.openqa.jetty.jetty.Server@3e724328 ubuntu@ip-10-0-0-35:/usr/local/automation/framework/selenium$ 21:31:10.116 INFO - Executing: [new session: {platform=ANY, javascriptEnabled=true, browserName=chrome, version=}] at URL: /session) 21:31:10.164 INFO - Creating a new session for Capabilities [{platform=ANY, javascriptEnabled=true, browserName=chrome, version=}] Starting ChromeDriver (v2.6.232917) on port 17624 [0.797][WARNING]: PAC support disabled because there is no system implementation 21:31:32.375 WARN - Exception thrown java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00' System info: host: 'ip-10-0-0-35', ip: '10.0.0.35', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-48-virtual', java.version: '1.7.0_09' Driver info: driver.version: unknown at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) at java.util.concurrent.FutureTask.get(FutureTask.java:111) at org.openqa.selenium.remote.server.DefaultSession.execute(DefaultSession.java:176) at org.openqa.selenium.remote.server.DefaultSession.<init>(DefaultSession.java:112) at org.openqa.selenium.remote.server.DefaultSession.createSession(DefaultSession.java:89) at org.openqa.selenium.remote.server.DefaultDriverSessions.newSession(DefaultDriverSessions.java:104) at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:63) at org.openqa.selenium.remote.server.rest.ResultConfig.handle(ResultConfig.java:205) at org.openqa.selenium.remote.server.JsonHttpRemoteConfig.handleRequest(JsonHttpRemoteConfig.java:192) at org.openqa.selenium.remote.server.DriverServlet.handleRequest(DriverServlet.java:201) at org.openqa.selenium.remote.server.DriverServlet.doPost(DriverServlet.java:167) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.openqa.selenium.remote.server.DriverServlet.service(DriverServlet.java:139) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.openqa.jetty.jetty.servlet.ServletHolder.handle(ServletHolder.java:428) at org.openqa.jetty.jetty.servlet.ServletHandler.dispatch(ServletHandler.java:677) at org.openqa.jetty.jetty.servlet.ServletHandler.handle(ServletHandler.java:568) at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1526) at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1479) at org.openqa.jetty.http.HttpServer.service(HttpServer.java:914) at org.openqa.jetty.http.HttpConnection.service(HttpConnection.java:820) at org.openqa.jetty.http.HttpConnection.handleNext(HttpConnection.java:986) at org.openqa.jetty.http.HttpConnection.handle(HttpConnection.java:837) at org.openqa.jetty.http.SocketListener.handleConnection(SocketListener.java:243) at org.openqa.jetty.util.ThreadedServer.handle(ThreadedServer.java:357) at org.openqa.jetty.util.ThreadPool$PoolThread.run(ThreadPool.java:534) Caused by: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00' System info: host: 'ip-10-0-0-35', ip: '10.0.0.35', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-48-virtual', java.version: '1.7.0_09' Driver info: driver.version: unknown at org.openqa.selenium.remote.server.DefaultDriverFactory.callConstructor(DefaultDriverFactory.java:72) at org.openqa.selenium.remote.server.DefaultDriverFactory.newInstance(DefaultDriverFactory.java:56) at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:215) at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:1) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:169) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at org.openqa.selenium.remote.server.DefaultDriverFactory.callConstructor(DefaultDriverFactory.java:62) ... 9 more Caused by: org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=2.6.232917,platform=Linux 3.2.0-48-virtual x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 20.99 seconds Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00' System info: host: 'ip-10-0-0-35', ip: '10.0.0.35', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-48-virtual', java.version: '1.7.0_09' Driver info: org.openqa.selenium.chrome.ChromeDriver at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:216) at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:111) at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:115) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:150) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:129) ... 14 more 21:31:32.413 WARN - Exception: unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=2.6.232917,platform=Linux 3.2.0-48-virtual x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 20.99 seconds Build info: version: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:14:00' System info: host: 'ip-10-0-0-35', ip: '10.0.0.35', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-48-virtual', java.version: '1.7.0_09' Driver info: org.openqa.selenium.chrome.ChromeDriver 

好吧,发布所有这些后,我只是想出了我做错了什么!

问题是我通过SSH从一个terminal启动了selenium,然后通过VNC从桌面上的terminal运行testing脚本。 显然Selenium,W​​ebdriverJS或者Chromedriver不喜欢这个。

当我启动Selenium并从桌面上的terminal运行testing脚本时,它工作正常。

看来你的selenium服务器不能启动铬。 这通常发生在没有X环境的情况下。 在你的情况,因为你通过ssh会话调用selenium,你应该有

  1. 一个正在运行的X显示器(VNC的显示器不会计数,但我不确定是否可以通过SSH会话访问)
  2. SSH会话中的一个环境variables,名为DISPLAY,其值设置为活动的X窗口/显示

无论您的SSH会话是否可以访问X窗口,都可以轻松testing。 当您通过SSH连接到机器时,在运行java -jar之前,只需运行google-chrome。 如果它引发一个错误,指示找不到显示并中止 ,那么您的SSH会话将无法访问X服务器实例。

如果是这样的话,可以在启动selenium服务器之前尝试以下方法之一:

  1. export DISPLAY=<display-which-is-being-used-by-vnc>如果这不起作用,请尝试2。
  2. 设置Xvfb(X虚拟帧缓冲区),它允许您模拟一个X服务器实例,而实际上没有一个实例。 浏览器使用Xvfb就好了。 一旦Xvfb安装并运行后,假设它在显示0和屏幕1上运行(你将在调用中指定),执行export DISPLAY=:0.1 ,然后在同一个SSH会话中运行selenium。

如果上述其中一种方法适用于您,则需要使DISPLAY环境variables跨SSH会话持久化。 您可以将该行添加到/ etc / environment以实现全局更改,也可以将其放入.${SHELL}rc以便在login时将其添加到环境中。

你有没有尝试设置一个DISPLAY环境variables? 我必须使用'export DISPLAY =:1'来设置我的名字,让chromedriver在一个单独的vnc会话的ssh会话中工作。

在你的vnc会话中,打开一个terminal并使用'echo $ DISPLAY'来查看你的ssh会话/

没有沙箱是运行selenium的windows jenkins难题的关键部分。 我们的解决scheme是一个Maven /代码方法与jenkins插件方法。 我喜欢这些,因为我可以更轻松地进行debugging,并在桌面上提供了一个反映构build机器的用例。

在运行在前景​​的窗口jenkins奴隶chromedriver失败