当前位置: 首页 > 知识库问答 >
问题:

docker中的水豚无头chrome返回DevToolsActivePort文件不存在

公羊凌
2023-03-14
# 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
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
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)

以前有人见过这个错误吗?

共有1个答案

厉文栋
2023-03-14

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

# 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所述

编辑:我没有对上面的Dockerfile做任何更改

 类似资料:
  • 问题内容: 我试图配置系统测试以与selenium中的无头铬一起使用。我有以下水豚配置: 和以下Dockerfile(无数据库,因为我为此使用主机): 我已经在线跟踪了一些有关如何设置headless_chrome测试的资源,但是它们都恢复了上述配置。尝试运行水豚,它显示以下错误,我似乎无法成功调试它。 上面的docker文件包含最新的chrome和chromedriver版本,分别为67和2.3

  • 我是cucumber和水豚的新手,我对以下错误感到困惑: 在我的功能中,我有: 我的步骤如下所示: 我尝试了“click(button\u text)和click\u link”方法。我想这可能是我没有看到的明显的东西。我试图找到按钮元素的css定位器,然后单击该元素。我认为regex不需要更改,因为我正在更改“button\u text”局部变量的内容。还是我?

  • 我在我的Ruby on Rails(5.2.1)项目中使用chrome headless with Selenium(3.14.0)和Capybara(3.8.0),我有一个测试,它可以在无头chrome中工作,但不能在无头chrome中工作。我在谷歌chrome稳定版69上使用的是“--无头”标志。 我已经用下面的设置了我的无头chrome,这适用于所有不下载文件的测试。

  • 我有以下代码 它返回错误: 如果我使用运行,我不会收到任何错误。不幸的是,我真的不能在无头状态下运行我想运行的东西。有人有什么想法吗?

  • 问题:无法点击名为BT_SEARCH的元素 > click_button'Hae'返回:无法找到按钮"Hae"... click_link'Hae'返回:无法找到链接"Hae"... 查找(:xpath,“//输入[@name='BT\u SEARCH']”)。单击似乎找不到元素。 我无法修改源,也没有可用的id或类标签。此外,该页面使用ASP,我认为这是导致问题的原因。

  • iam运行一个硒脚本,并继续得到上述错误。这是代码: 所以代码中的注释行对我不起作用。当我添加这一行时,我总是得到这个错误: 并且代码在没有添加上述代码行的情况下也能正常工作。 以下是关于该错误的更多信息: 系统信息: 视窗 7 SP-1 64 位 Chrome信息:版本71.0.3578.98(官方版本)(64位) Java 版本: 10.0.1 请帮我做这件事。