在码头工人容器中运行黄瓜和水豚

时间:2018-06-01 10:21:13

标签: docker cucumber capybara selenium-chromedriver

我有一个使用

的e2e测试的回购
  • 用于编写规格和步骤定义的黄瓜(红宝石)
  • Capybara作为浏览和执行用户互动的驱动程序
  • Chromedriver

我想要一个docker容器:

  • <integration-test-repo-url>
  • 中提取回购
  • 安装所有必要的先决条件(rubybundlerchromedrivercucumber
  • 进入integration-test-repo并运行./runtests.sh(使用bundle install安装必备宝石,然后运行bundle exec cucumber

这是我到目前为止(使用this泊坞窗图片):

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的依赖关系应该在docker镜像中得到解决(参见here)。

2 个答案:

答案 0 :(得分:0)

解决方案是配置自定义Chrome驱动程序,而不是使用chromedriver + capybara附带的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没有。

答案 1 :(得分:0)

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