Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Не могу запустить тесты в докере (Capybara + headless chrome)

docker
capybara
chromedriver
webdriver
ruby
selenium
Теги: #<Tag:0x00007fedb90e17b8> #<Tag:0x00007fedb90e15d8> #<Tag:0x00007fedb90e13d0> #<Tag:0x00007fedb90e11f0> #<Tag:0x00007fedb90e0f20> #<Tag:0x00007fedb90e0d18>

(Dinar) #1

Имеется следующий стек:
Ruby 2.3.3
selenium-webdriver
capybara
chromedriver-helper

Решил запустить тесты в докере (linux) с использованием headless chrome (раньше использовал poltergeist):

  1. Dockerfile:

FROM ruby:2.3.3

RUN apt-get update
RUN apt-get install -y libappindicator1 fonts-liberation curl \
  libasound2 libgconf2-4 libnspr4 libxss1 libnss3 xdg-utils wget unzip

RUN apt-get install -y vim-gtk

RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN dpkg -i --force-depends google-chrome-stable_current_amd64.deb
RUN apt-get install -f -y
RUN curl -O https://chromedriver.storage.googleapis.com/2.31/chromedriver_linux64.zip && \
  unzip chromedriver_linux64.zip && \
  chmod +x chromedriver && \
  mv -f chromedriver /usr/local/share/chromedriver && \
  ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver && \
  ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

RUN curl -LO https://releases.hashicorp.com/envconsul/0.6.1/envconsul_0.6.1_linux_amd64.zip && \
    unzip envconsul_0.6.1_linux_amd64.zip && \
    rm envconsul_0.6.1_linux_amd64.zip && \
    mv envconsul /bin/envconsul && \
    chmod +x /bin/envconsul

RUN mkdir -p /autotests
WORKDIR /autotests

ADD Gemfile* ./
RUN bundle install

2.Прописал настройки драйвера в env.rb:

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome, 
     args: ['--headless', '--disable-gpu'])
end

3.Контейнер запустился, но при запуске тестов возникает ошибка:
unknown error: Chrome failed to start: crashed

Я так понимаю что в env.rb нужно аргументом указать путь к бинарнику хрома, что я и делал, но такой конфиг его тоже не устраивает:

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome,  binary: "/opt/google/chrome", args: ['--headless', '--disable-gpu','--window-size=1920,1080', '--disable-web-security'])
end

Так как он в методах класса Capybara::Selenium::Driver отсутствует аргумент binary


(Dinar) #2

Попробовал уже и с такими настройками:

Capybara.register_driver :selenium_chrome_linux do |app|
  caps = Selenium::WebDriver::Remote::Capabilities.chrome(
    "chromeOptions" => {
      'binary' => "/opt/google/chrome",
      'args' => %w{headless no-sandbox disable-gpu}
    }
  )
  driver = Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: caps
  )
end

В итоге все равно ошибка:

unknown error: Chrome failed to start: exited abnormally

(Oleksandr Khotemskyi) #3

Я бы рекомендовал разложить отдельно код и отдельно браузер по контейнерам, а запускать через docker-compose. Тогда можно заюзать готовые образа с браузерами, и ваш контейнер с тестами намного проще.

Вот мой docker-compose.yml:

version: '2'
services:
  selenium-chrome-standalone:
    ports:
     - "44444:4444"
    image: "selenium/standalone-chrome"

  e2e-tests:
    build: .
    links:
     - selenium-chrome-standalone
    depends_on:
     - selenium-chrome-standalone

(Dinar) #4

Спасибо за совет!
А сами зависимости (java, python etc) вы устанавливайте в контейнере с кодом?
Я так понимаю, что в образе selenium/standalone-chrome только сам селениум с хромом и все.


(Dinar) #5

И еще: это как-то решит проблему с тем, что сам хром в контейнере не запускается?)


(Dinar) #6

Вопрос снят


(Oleksandr Khotemskyi) #7

Оба вопроса? )


(Dinar) #8

Нет, только последний: это как-то решит проблему с тем, что сам хром в контейнере не запускается?)


(Dinar) #9

Скажите, пожалуйста, у вас получается запустить тесты с использованием headless chrome в докере?


(Oleksandr Khotemskyi) #10

Именно в докере еще не пробовал. Но в случае с готовыми контейнерами это вроде как не особо критично.


(Dinar) #11

В общем, у меня все запустилось, но не с готовым контейнером. С ними что-то не сложилось. Всем спасибо


(Павел Сенин) #12

попробуйте Selenoid - тесты в контейнерах из коробки без лишнего головняка :slightly_smiling_face:
http://aerokube.com/selenoid/latest/


(Dinar) #13

Интересно, спасибо!