运行 黄瓜和水豚在 docker 容器中

Running cucumber and capybara in a docker container

我有一个使用

的 e2e 测试的 repo

我想要一个 docker 容器:

这是我目前所拥有的(使用 this docker 图片):

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

我该如何解决这个问题? chrome 是不是遗漏了什么? Chromedriver 是否遗漏了什么?据我所知,chrome 和 chrome 驱动程序的依赖项应该在 docker 映像中解决(参见 here)。

解决方案是配置自定义 chrome 驱动程序,而不是使用 chrome 驱动程序+水豚附带的 selenium_chrome_headless

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 无效。

我遇到了同样的问题并通过添加 >options.add_argument('--disable-dev-shm-usage')> 解决了它。尝试将标志添加到选项。