Безголовый хром Capybara в Docker возвращает файл DevToolsActivePort не существует - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь настроить системные тесты для работы с безголовым хромом в селене.У меня есть следующая конфигурация капибары:

# spec/support/capybara.rb

Capybara.server = :puma, { Silent: true }

RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :rack_test
  end

  config.before(:each, type: :system, js: true) do
    driven_by :selenium_chrome_headless, screen_size: [1400, 1400]
  end
end

и следующий Dockerfile (нет базы данных, потому что я использую хост для этого):

FROM ruby:2.5.1

RUN apt-get update
RUN apt-get install -y wget git

# Node
RUN curl -sL https://deb.nodesource.com/setup_9.x | bash -
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update

# Essentials
RUN apt-get install -y git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev nodejs yarn unzip

# Chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
RUN apt-get update && apt-get -y install google-chrome-stable

# Chromedriver
RUN wget -q https://chromedriver.storage.googleapis.com/2.39/chromedriver_linux64.zip
RUN unzip chromedriver_linux64.zip -d /usr/local/bin
RUN rm -f chromedriver_linux64.zip

RUN apt-get clean

Я следил за несколькими источниками в Интернетео том, как настроить тестирование headless_chrome, однако все они возвращаются к вышеуказанной конфигурации.При попытке запустить capybara выдается следующая ошибка, и я не могу ее успешно отладить.

Selenium::WebDriver::Error::UnknownError:
    unknown error: DevToolsActivePort file doesn't exist
        (Driver info: chromedriver=2.39.562737 (dba483cee6a5f15e2e2d73df16968ab10b38a2bf),platform=Linux 4.16.11-1-ARCH x86_64)

В приведенном выше файле Docker содержатся последние версии Chrome и chromedriver, соответственно 67 и 2,39.Я также пробовал более старые версии с той же самой ошибкой выше, например, 66 и 2.38, что соответствует поддержке версий на http://chromedriver.chromium.org/downloads.

Кто-нибудь видел эту ошибку раньше?

1 Ответ

0 голосов
/ 30 мая 2018

Кажется, что стандартные настройки capybara для selenium_chrome_headless недостаточны для запуска в док-контейнере.Я решил это, изменив мои настройки spec / support / capybara.rb на следующие:

# spec/support/capybara.rb

# Setup chrome headless driver
Capybara.server = :puma, { Silent: true }

Capybara.register_driver :chrome_headless do |app|
  options = ::Selenium::WebDriver::Chrome::Options.new

  options.add_argument('--headless')
  options.add_argument('--no-sandbox')
  options.add_argument('--disable-dev-shm-usage')
  options.add_argument('--window-size=1400,1400')

  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

Capybara.javascript_driver = :chrome_headless

# Setup rspec
RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :rack_test
  end

  config.before(:each, type: :system, js: true) do
    driven_by :chrome_headless
  end
end

Особенно не следует забывать о "--disable-dev-shm-использовании", так как это решает ограниченные ресурсыпроблемы в докере, как отмечено в: https://github.com/GoogleChrome/puppeteer/issues/1834

Редактировать: Я не внес никаких изменений в вышеупомянутый Dockerfile

...