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

在docker容器中运行黄瓜和水豚,docker,cucumber,capybara,selenium-chromedriver,Docker,Cucumber,Capybara,Selenium Chromedriver,我有一个使用e2e测试的回购协议 Cucumber(ruby)用于编写规范和步骤定义 水豚作为浏览和执行用户交互的驱动程序 镀铬器 我想要一个docker容器: 从 安装所有必要的必备组件(ruby,bundler,chromedriver,cucumber) 进入集成测试repo并运行/runtests.sh(它使用bundle install安装必备的gems,然后运行bundle exec) 这是我到目前为止得到的(使用docker图像): 来自2glab/ruby chrome驱

我有一个使用e2e测试的回购协议

  • Cucumber(ruby)用于编写规范和步骤定义
  • 水豚作为浏览和执行用户交互的驱动程序
  • 镀铬器
我想要一个docker容器:

  • 安装所有必要的必备组件(
    ruby
    bundler
    chromedriver
    cucumber
  • 进入
    集成测试repo
    并运行
    /runtests.sh
    (它使用
    bundle install
    安装必备的gems,然后运行
    bundle exec
这是我到目前为止得到的(使用docker图像):

来自2glab/ruby chrome驱动程序的

跑\
apt获取更新&&\
apt get安装-qy捆绑机和\
apt-get-install-qy cucumber
运行useradd-d/home/-ms/bin/bash-groot-gsudo-p
使用者
WORKDIR/家庭/
运行cd和git克隆(&G)
WORKDIR
运行bundle安装和bundle exec
不幸的是,这会导致一个错误:


未知错误:Chrome无法启动:崩溃
(驱动程序信息:chromedriver=2.37.544315(730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),平台=Linux 4.9.87-linuxkit-aufs x86_64)(Selenium::WebDriver::Error::UnknownError


我该如何解决这个问题?chrome缺少什么吗?Chromedriver缺少什么吗?据我所见,chrome和Chromedriver的依赖关系应该在docker映像中解决(请参阅).

解决方案是配置定制的chrome驱动程序,而不是使用chromedriver+capybara附带的
selenium\u chrome\u 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 webdriver”
Capybara.register_驱动程序:定制_chrome_headless do|app|
浏览器\选项=::Selenium::WebDriver::Chrome::options.new

browser_options.args我也遇到了同样的问题,通过添加
>options.add_参数('--disable dev shm usage')解决了这个问题>
。尝试将标志添加到选项中。

您是否已将Capybara配置为在无头模式下运行Chrome?另请注意,最新的chromedriver为2.39-您可能需要根据具体设置在docker中配置额外的Chrome选项-请参阅@ThomasWalpole:我确实使用了
Seleniu Chrome\u headless
驱动程序运行(这在docker中显然不起作用。我明天会更新这个问题和/或链接为副本。我正在尝试,但仍然会导致chrome崩溃。你把它放在spec/rails\u helper.rb中吗?为什么写
tmp
可以解决这个问题?好吧,这是chrome开始使用太多内存时的修复方法。为什么会这样只需要启动chrome?
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