Ну, во-первых драйвер он нашел, об этом говорит лог. Он не может к нему подключиться. Причины могут быть связаны с доступностью папки и правами на папку или сам испонляемый файл.
Здесь описан подход:
Ставлю на то, что
chmod a+x на файл chromedriver должен решить проблему
не сталкивался с Selene, но по-моему, на сервере должна быть команда, вроде:
DISPLAY=:99 xvfb-run -a -s "-screen 0, 1366x768x24" *здесь хромдрайвер или seleniumserver*
У меня, по крайней мере, так работает. Т.е. либо хромдрайвер напрямую слушает запросы к нему, либо через сервер, но запускается это внутри xvfb
*Буду рад услышать более простые способы запуска, если такие есть. Просто у меня так работает с прошлого года и лишний раз пересматривать я не стал.
При запуске получил:
root@autotest:/home/autotesting2# DISPLAY=:99 xvfb-run -a -s “-screen 0, 1366x768x24” & python -m pytest simple.py
[2] 23014 xvfb-run: usage error: need a command to run
Usage: xvfb-run [OPTION …] COMMAND
Run COMMAND (usually an X client) in a virtual X server environment.
Options:
-a --auto-servernum try to get a free server number, starting at
–server-num
-e FILE --error-file=FILE file used to store xauth errors and Xvfb
output (default: /dev/null)
-f FILE --auth-file=FILE file used to store auth cookie
(default: ./.Xauthority)
-h --help display this usage message and exit
-n NUM --server-num=NUM server number to use (default: 100)
-l --listen-tcp enable TCP port listening in the X server
-p PROTO --xauth-protocol=PROTO X authority protocol name to use
(default: xauth command’s default)
-s ARGS --server-args=ARGS arguments (other than server number and
“-nolisten tcp”) to pass to the Xvfb server
(default: “-screen 0, 1366x768x24”)
============================= test session starts ==============================
platform linux2 – Python 2.7.12, pytest-3.2.1, py-1.4.34, pluggy-0.4.0
metadata: {‘Python’: ‘2.7.12’, ‘Platform’: ‘Linux-2.6.32-042stab120.11-x86_64-with-Ubuntu-16.04-xenial’, ‘Packages’: {‘py’: ‘1.4.34’, ‘pytest’: ‘3.2.1’, ‘pluggy’: ‘0.4.0’}, ‘Plugins’: {‘html’: ‘1.15.1’, ‘allure-pytest’: ‘2.2.2b2’, ‘metadata’: ‘1.5.0’}}
rootdir: /home/autotesting2, inifile:
plugins: metadata-1.5.0, html-1.15.1, allure-pytest-2.2.2b2
collected 0 items / 1 errors
===================================== ERRORS =====================================
___________________________ ERROR collecting simple.py ___________________________
simple.py:13: in
class Test_simple:
simple.py:15: in Test_simple
driver = webdriver.Chrome()
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/chrome/webdriver.py:67: in init
desired_capabilities=desired_capabilities)
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py:91: in init
self.start_session(desired_capabilities, browser_profile)
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py:173: in start_session
‘desiredCapabilities’: desired_capabilities,
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py:233: in execute
self.error_handler.check_response(response)
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py:194: in check_response
raise exception_class(message, screen, stacktrace)
E WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
E (Driver info: chromedriver=2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4),platform=Linux 2.6.32-042stab120.11 x86_64)
!!! Interrupted: 1 errors during collection !!!
============================ 1 error in 61.19 seconds ============================
[2]+ Exit 2 DISPLAY=:99 xvfb-run -a -s “-screen 0, 1366x768x24”
root@autotest:/home/autotesting2#
Стартовать одной командой docker-compose up или при необходимости sudo docker-compose up(должен предупредить что могут возникнуть некоторые подводные камни)
Сами тесты будете крутить в нужном вам браузере
Возможно, пути надо будет прописать полностью.
После этого запускается xvfb и внутри него запускается selenium-server-standalone, который прослушивает порт 4444 (по дефолту). Тест должен обращаться к этому удаленному серверу. Т.е. в коде в качестве драйвера что-то вроде:
driver = webdriver.Remote("http://'IP того компьютера, на котором запущен xvfb':4444/wd/hub", webdriver.ChromeOptions().to_capabilities())
Чтоб это все работало, на сервере с xvfb должна быть java. Если планируется использовать только один chromedriver, то с некоторых пор запускать “java -jar selenium-server-standalone-3.8.0.jar” уже необязательно, вместо этого можно запустить chromedriver непосредственно и посмотреть на каком порту он будет прослушивать. Соответственно 4444 за менить на этот порт (9515 вроде). Как-то так:
xvfb-run -a -s "-screen 0, 1366x768x24" chromedriver 1>/dev/null 2>/dev/null &
У меня настроен первый вариант и я не проверял вариант 2, но все вроде так и должно работать.
Вот это вот:
1>/dev/null 2>/dev/null &
можно не писать, это для подавления вывода на экран.
Простите, может глупые вопросы, запустил команду :
vadim:~ user$ xvfb-run -a -s “-screen 0, 1366x768x24” java -jar selenium-server-standalone-3.8.0.jar 1>/dev/null 2>/dev/null &
[1] 5657
Это есть запуск xvfb ? Теперь надо давать команду запуска скрипта ?
Нормальные вопросы, все Ok. Да, xvfb работает, номер процесса в данном случае 5657.
Убедиться, что xvfb работает можно задав команду:
ps -f
В результате отобразится список процессов, среди которых будут присутствовать Xvfb и java
Если не задан номер порта (используется порт по умолчанию), то можно ввести команду
lsof -i:4444
и убедиться, что запущенный selenium server standalone этот порт прослушивает. (4444 заменить на соответствующие цифры, если используется другой порт).
Кстати, если набрать команду без 1>/dev/null 2>/dev/null &, то можно увидеть, что сервер запустился и готов работать, будет отображаться примерно следующее:
00:12:12.226 INFO - Selenium build info: version: ‘3.8.0’, revision: ‘unknown’
00:12:12.227 INFO - Launching a standalone Selenium Server
2017-12-16 00:12:12.240:INFO::main: Logging initialized @170ms to org.seleniumhq.jetty9.util.log.StdErrLog
00:12:12.277 INFO - Driver provider org.openqa.selenium.ie.InternetExplorerDriver registration is skipped:
registration capabilities Capabilities [{ensureCleanSession=true, browserName=internet explorer, version=, platform=WINDOWS}] does not match the current platform LINUX
00:12:12.278 INFO - Driver provider org.openqa.selenium.edge.EdgeDriver registration is skipped:
registration capabilities Capabilities [{browserName=MicrosoftEdge, version=, platform=WINDOWS}] does not match the current platform LINUX
00:12:12.278 INFO - Driver class not found: com.opera.core.systems.OperaDriver
00:12:12.278 INFO - Driver provider com.opera.core.systems.OperaDriver registration is skipped:
Unable to create new instances on this machine.
00:12:12.278 INFO - Driver class not found: com.opera.core.systems.OperaDriver
00:12:12.278 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered
00:12:12.279 INFO - Driver provider org.openqa.selenium.safari.SafariDriver registration is skipped:
registration capabilities Capabilities [{browserName=safari, version=, platform=MAC}] does not match the current platform LINUX
2017-12-16 00:12:12.310:INFO:osjs.Server:main: jetty-9.4.3.v20170317
2017-12-16 00:12:12.336:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@c038203{/,null,AVAILABLE}
2017-12-16 00:12:12.347:INFO:osjs.AbstractConnector:main: Started ServerConnector@7d9d1a19{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}
2017-12-16 00:12:12.347:INFO:osjs.Server:main: Started @277ms
00:12:12.347 INFO - Selenium Server is up and running
При этом, запустив тест в другом окне терминала, можно наблюдать как selenium server выполняет команды.
00:12:33.353 INFO - Executing: [new session: Capabilities [{goog:chromeOptions={args=[start-maximized, disable-infobars], extensions=[], prefs={profile.managed_default_content_settings.notifications=1, credentials_enable_service=false, hardware.audio_capture_allowed_urls=[https:// адрес тестируемого сайта], profile.password_manager_enabled=false, hardware.video_capture_allowed_urls=[https:// адрес тестируемого сайта]}}, browserName=chrome, version=, platform=ANY}]])
00:12:33.367 INFO - Creating a new session for Capabilities [{goog:chromeOptions={args=[start-maximized, disable-infobars], extensions=[], prefs={profile.managed_default_content_settings.notifications=1, credentials_enable_service=false, hardware.audio_capture_allowed_urls=[https:// адрес тестируемого сайта], profile.password_manager_enabled=false, hardware.video_capture_allowed_urls=[https:// адрес тестируемого сайта]}}, browserName=chrome, version=, platform=ANY}] Starting ChromeDriver 2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5) on port 24961
Only local connections are allowed.
00:12:33.869 INFO - Detected dialect: OSS
00:12:33.883 INFO - Done: [new session: Capabilities [{goog:chromeOptions={args=[start-maximized, disable-infobars], extensions=[], prefs={profile.managed_default_content_settings.notifications=1, credentials_enable_service=false, hardware.audio_capture_allowed_urls=[https:// адрес тестируемого сайта], profile.password_manager_enabled=false, hardware.video_capture_allowed_urls=[https:// адрес тестируемого сайта]}}, browserName=chrome, version=, platform=ANY}]]
00:12:34.041 INFO - Executing: [set window size])
00:12:34.171 INFO - Done: [set window size]
и так далее
В данном тесте первая команда устанавливает размер окна - [set window size]
Не очень понятно как при этом xvfb найдет сервер. Изначально вопрос о запуске на сервере: [quote=“Mastaforka, post:6, topic:17862”]
На локальной машине этот код работает, а вот на сервере нет
[/quote]
Selenium server не нужен. Chromedriver сразу запускается менеджером, встроенном в Selene,
и в свою очередь запускает Chrome.
Указывать размер экрана для xvfb тоже не обязательно, главное размер окна установить.
В качестве лучшего варианта рекомендую Selenoid
где все уже настроено, и xvfb и vnc. И даже запись видео.
В свою очередь запускает Chrome на локальной машине? Не на удаленном сервере? Когда речь идет о запуске на сервере - не стоит путать это с запуском посредством Selenium server.
Или Selene умеет работать с удаленным сервером? Просто я не пользуюсь Selene, потому не знаю.
Selene безусловно умеет работать с Remote webdriver, по ссылке что я приводил как раз в примере он.
ТС имеет ввиду запуск теста на удалённой машине без дисплея. CI сервер или что-то подобное.
Цели использовать remote driver и Selenim Server нет.