4

Итак, у меня была настройка Chromedriver/Selenium, но теперь, пытаясь установить все на новую машину (64Bit Linux), она дает мне проблемы и не говорит мне, что происходит.Почему Chrome не запускается при попытке запустить Chromedriver под Selenium?

Я использую автономный сервер Selenium версии 2.37.0 с nodejs и последней версией Chromedriver, доступной в Google прямо сейчас (я также попробовал Chromedriver 2.0, более раннюю версию, с которой я работал ранее, с теми же результатами) ,

Как показано на следующем рисунке, когда я пытаюсь запустить скрипт с использованием webdriver, я получаю сообщение об ошибке, которое включает в себя: Caused by: org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited abnormally. Я не получаю вывод журнала из chromedriver, только вывод из Selenium (с ошибкой) и из Node.js (в попытке запустить тестовый скрипт).

Может ли кто-нибудь дать мне представление о том, что я делаю неправильно здесь?

EDIT: Я забыл добавить, что после сбоя есть процесс с запущенным Chromedriver, так что часть в порядке, и мой исполняемый файл Chrome действительно находится в/etc/bin/google-chrome, как это хочет Chromedriver.

Output:

После того, как я был селен и работаю, я пытался запустить простой тестовый сценарий с содержимым:

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

Консоли вывод 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 

Наконец, выход из селена при запуске и при попытке запустить скрипт следующим образом. По какой-то причине я не получаю файл 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 
[email protected]:/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 [email protected] 
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 [email protected] 

[email protected]:/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 
+0

Может http://stackoverflow.com/questions/17090193/selenium-chromedriver-do-no-start-on-linux?rq=1 может помочь? – uSeRnAmEhAhAhAhAhA

+1

Не так много. Как я уже писал, у меня есть Chromedriver, и я поставляю свойство в командной строке; это совершенно другая ошибка. Теперь я понял, что проблема заключается в том, чтобы запустить Selenium через терминал SSH, а не на рабочий стол, но я не знаю, почему это могло бы изменить ситуацию. –

+0

Вижу, мое недоразумение. Вам нужно запускать под root через SSH Terminal или, возможно, запуск через терминал требует дополнительных параметров, которые должны быть переданы при запуске? – uSeRnAmEhAhAhAhAhA

ответ

8

Хорошо, после публикации всего этого я просто понял, что я делаю неправильно!

Проблема заключалась в том, что я запускал селен с одного терминала через SSH, а затем запускал тестовый сценарий с терминала на рабочем столе через VNC. Очевидно, Selenium, WebdriverJS или Chromedriver это не нравится.

Он отлично работает при запуске Selenium и запускает тестовый сценарий как с терминала на рабочем столе.

+1

У меня есть идея, почему запуск Selenium через SSH против рабочего стола VNC изменит ситуацию; если у кого есть какие-то идеи, пожалуйста, дайте мне знать! –

+0

Похоже, это может быть связано. Ваша виртуальная машина работает на рабочем столе? Он должен иметь место для Chrome, чтобы фактически открыть окно. Если он запускает рабочий стол, попробуйте запустить Selenium через консоль, а не через SSH. Кроме того, вы можете опубликовать это как свой собственный вопрос, а не как комментарий в этом ... –

+1

Причина в том, что Chrome нужен «рабочий стол» для запуска. – Luke

2

Вы пытались установить переменную окружения DISPLAY? Я должен был установить мой с 'export DISPLAY =: 1', чтобы получить chromedriver, работающий в сеансе ssh с отдельным сеансом vnc.

В Вашей VNC сессии, откройте терминал и использовать «эхо $ DISPLAY», чтобы увидеть то, что установка должна быть в вашем SSH сессии/

5

Похоже, ваш селеном сервер не может запустить хром. Обычно это происходит в отсутствие среды X.В вашем случае, так как вы вызываете селен через SSH сессию, вы должны иметь

  1. Работающей X дисплей (дисплей VNC в это рассчитывать, но я не уверен, что она может быть доступна через SSH сессию)
  2. переменная среды в SSH сессии, называется DISPLAY, значение которого устанавливается в качестве активного X Window/дисплей

ли ваш SSH сессия имеет доступ к окну X или не может быть очень легко проверить. Когда вы подключаетесь через SSH к машине, перед запуском java -jar просто запустите google-chrome. Если он выдает ошибку, которая указывает, что не удалось найти отображение и прервать, ваш сеанс SSH не имеет доступ к экземпляру X-сервера.

Если это будет так, то вы можете попробовать одно из следующих действий перед запуском селена сервера:

  1. export DISPLAY=<display-which-is-being-used-by-vnc>, если это не сработает, попробуйте 2.
  2. установки Xvfb (X Buffer Virtual Frame) который позволяет вам имитировать экземпляр X-сервера без фактического его использования. Браузеры отлично работают с Xvfb. Как только Xvfb настроен и запущен, скажем, что он работает на дисплее 0 и экране 1 (который вы укажете в его вызове), выполните export DISPLAY=:0.1 , а затем запустите селен в том же сеансе SSH.

Если одно из вышеперечисленных работ для вас, вам необходимо сделать переменную окружения DISPLAY стойкой в ​​сеансах SSH. Вы можете либо добавить строку в/etc/environment, чтобы произвести глобальное изменение, либо поместить его в свой .${SHELL}rc, чтобы он был добавлен в среду при входе в систему.

0

no-sandbox был критическим кусочком головоломки для windows jenkins running selenium. Наше решение - это подход maven/code, а также подход плагина jenkins. Я одобряю это, поскольку я могу легче отлаживать и предоставлять на рабочем столе случай использования, который отражает машину сборки.

chromedriver fails on windows jenkins slave running in foreground

Смежные вопросы