docker中的Capybara无头Chrome返回DevToolsActivePort文件不存在 [英] Capybara headless chrome in docker returns DevToolsActivePort file doesn't exist

查看:75
本文介绍了docker中的Capybara无头Chrome返回DevToolsActivePort文件不存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试配置系统测试以与硒中的无头铬一起使用。我具有以下capybara配置:

Im trying to configure system tests to work with headless chrome in selenium. I have the following capybara configuration:

# 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(无数据库,因为我为此使用主机):

and the following Dockerfile (no database because i'm using the host for this):

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测试的信息,但是它们都恢复了上述配置。尝试运行水豚,它显示以下错误,我似乎无法成功调试它。

I've followed several sources online on how to setup headless_chrome testing, however they all revert to the above configuration. Trying to run capybara it shows the following error and I can't seem to succesfully debug it.

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

The above docker file contains the latest chrome and chromedriver versions, respectively 67 and 2.39. I've tried older versions aswell with the same above error, eg 66 and 2.38, complying to the version support on http://chromedriver.chromium.org/downloads.

有人以前见过此错误吗?

Has anyone seen this error before?

推荐答案

似乎水豚的默认selenium_chrome_headless设置不足以在docker容器中运行。我已经通过将spec / support / capybara.rb设置更改为以下内容来解决了这个问题:

It seems like the default selenium_chrome_headless settings of capybara aren't sufficient for running in a docker container. I have solved it by changing my spec/support/capybara.rb settings to the following:

# 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-usage,因为它解决了docker中有限的资源问题,如 https://github.com/GoogleChrome/puppeteer/issues/1834

Especially "--disable-dev-shm-usage" should not be forgotten, as it solves limited resource problems in docker, as noted in: https://github.com/GoogleChrome/puppeteer/issues/1834

编辑:
我没有对上述Dockerfile进行任何更改

I haven't made any changes to the above Dockerfile

这篇关于docker中的Capybara无头Chrome返回DevToolsActivePort文件不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆