Запуск огурца и капибары в докерной таре - PullRequest
0 голосов
/ 01 июня 2018

У меня есть репозиторий с тестами e2e, который использует

  • Cucumber (ruby) для написания спецификаций и определений шагов
  • Capybara в качестве драйвера для просмотра и взаимодействия с пользователем
  • Chromedriver

Я хочу докер-контейнер, который:

  • извлекает репозиторий из <integration-test-repo-url>
  • устанавливает все необходимые предпосылки (ruby, bundler, chromedriver, cucumber)
  • входит в integration-test-repo и запускает ./runtests.sh (который устанавливает необходимые гемы с помощью bundle install, а затем запускает bundle exec cucumber)

Это то, что у меня есть (используя этот образ докера):

FROM 2glab/ruby-chrome-driver

RUN \
  apt-get update && \
  apt-get install -qy bundler && \
  apt-get install -qy cucumber

RUN useradd -d /home/<user> -ms /bin/bash -g root -G sudo -p <user> <password>
USER <user>
WORKDIR /home/<user>

RUN cd && git clone <my_repo_url>
WORKDIR <my_repo_folder>
RUN bundle install && bundle exec cucumber

К сожалению, это приводит к ошибке:

unknown error: Chrome failed to start: crashed (Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Linux 4.9.87-linuxkit-aufs x86_64) (Selenium::WebDriver::Error::UnknownError

Как бы это исправить?Хрому чего-то не хватает?Chromedriver что-то упустил?Из того, что я вижу, зависимости для chrome и chromedriver должны быть разрешены в образе докера (см. здесь ).

1 Ответ

0 голосов
/ 04 июня 2018

Решением было настроить пользовательский хром-драйвер вместо использования selenium_chrome_headless, поставляемого с chromedriver + capybara:

require 'selenium-webdriver'

Capybara.register_driver :custom_chrome_headless do |app|
  browser_options = ::Selenium::WebDriver::Chrome::Options.new
  browser_options.args << '--headless'
  browser_options.args << '--no-sandbox'
  browser_options.args << '--disable-gpu'
  browser_options.args << '--window-size=1920,1080'
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    options: browser_options
  )
end

Capybara.configure do |config|
  config.default_driver = :custom_chrome_headless
  # Other irrelevant config stuff...
end

По некоторым причинам это работает, но selenium_chrome_headless - нет.

...