【问题标题】:Running cucumber and capybara in a docker container在 docker 容器中运行黄瓜和水豚
【发布时间】:2018-06-01 10:21:13
【问题描述】:

我有一个使用

的 e2e 测试存储库
  • 用于编写规范和步骤定义的 Cucumber (ruby)
  • Capybara 作为驱动程序来浏览和执行用户交互
  • Chrome 驱动程序

我想要一个 docker 容器:

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

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

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)。

【问题讨论】:

  • 您是否已将 Capybara 配置为在无头模式下运行 Chrome?另请注意,最新的 chromedriver 是 2.39 - 根据您的具体设置,您可能需要在 docker 中配置额外的 Chrome 选项 - 请参阅 stackoverflow.com/questions/50610316/…
  • @ThomasWalpole:我确实在使用selenium_chrome_headless 驱动程序运行(这在 docker 中显然不能正常工作。我将在明天更新问题和/或链接为重复。

标签: docker cucumber capybara selenium-chromedriver


【解决方案1】:

解决方案是配置自定义 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 不可行。

【讨论】:

  • 我正在尝试这个,但仍然让 Chromium 崩溃。你把它放进去是 spec/rails_helper.rb 吗?
【解决方案2】:

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

【讨论】:

  • 为什么写信给tmp 可以解决这个问题?当 chrome 开始使用太多内存时,Afaik 是一个修复。为什么这只是启动 chrome 所必需的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2012-07-06
  • 2012-01-18
相关资源
最近更新 更多