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

使用acceptInsecureCerts与无头铬和硒Webdriver、macOS、Rails、Capybara

周伟泽
2023-03-14

headless Chrome可以通过MacOS上的Selenium Webdriver使用自签名证书吗?

我试图让Rails系统测试由SSL上的headless Chrome驱动。

测试设置

# rails_helper.rb
# ... standard rspec rails helper setup omitted ...

Capybara.register_driver(:headless_chrome) do |app|
  options = Selenium::WebDriver::Chrome::Options.new(
    args: %w[--headless --disable-gpu --no-sandbox --disable-web-security]
  )
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    acceptInsecureCerts: true,
  )
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    options: options,
    desired_capabilities: capabilities
  )
end

RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :headless_firefox
  end
end

module SystemTestHelpers
  def key_file_path
    Rails.root.join("config", "ssl", "ssl-lvh.me.key")
  end

  def cert_file_path
    Rails.root.join("config", "ssl", "ssl-lvh.me.crt")
  end

  def using_app_host(host)
    original_host = Capybara.app_host
    Capybara.app_host = host

    Capybara.server = :puma, {
      Host: "ssl://#{Capybara.server_host}?key=#{key_file_path}&cert=#{cert_file_path}"
    }
    yield
  ensure
    Capybara.app_host = original_host
  end
end

RSpec.configure do |config|
  config.include SystemTestHelpers, type: :system
end

样品测试

# spec/system/welcome_spec.rb

require 'rails_helper'

RSpec.feature "Welcome", :js, type: :system do
  scenario "Visit homepage" do
    using_app_host('https://subdomain.lvh.me') do
      visit "/"

      expect(page).to have_content('Welcome')

      expect(page).to have_content('Your domain: subdomain.lvh.me')
      expect(page).to have_content('Your protocol: https://')
    end
  end
end

页面内容:

<div>
  <h2>Welcome!</h2>

  <p>Your protocol: <%= request.protocol %></p>
  <p>Your domain: <%= request.host %></p>
</div>
Capybara.register_driver(:headless_firefox) do |app|
  options = Selenium::WebDriver::Firefox::Options.new(args: %w[--headless])

  capabilities = Selenium::WebDriver::Remote::Capabilities.firefox(
    acceptInsecureCerts: true,
  )
  Capybara::Selenium::Driver.new(
    app,
    browser: :firefox,
    options: options,
    desired_capabilities: capabilities
  )
end
  • MacOS 10.13.6
  • Rails 5.2.1
  • Ruby 2.4.1
  • 水豚(gem)3.5.1
  • Selenium-WebDriver(gem)3.14.0
  • chromdriver-helper(gem)2.34
  • 铬68.0.3440.106。也尝试过
    • 谷歌Chrome 70.0.3524.0金丝雀
    • 铬70.0.3525.0

共有1个答案

贲功
2023-03-14

从您的日志中可以看到,它正在启动chromedriver V2.34。AcceptinSecureCerts直到2.35才添加支持,您应该真正运行最新的(当前为2.41)。更新你的chromedriver版本,事情应该会正常。

 类似资料:
  • 如何让下载以无头模式启动?

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

  • 我使用Selenium和PhantomJS开发了几个Python脚本。当我转向自动下载时,我切换到了(headed)Firefox(有效),然后是Chrome,有了headless选项,这样浏览器就不会在我面前打开了。 我的第一个脚本访问一个页面和几个HTML元素,与无头Chrome完美地工作。 第二个,然而,工作与头铬。如果我加上“无头”选项,它就不再起作用了。当我试图以headless模式打印

  • 问题内容: 我正在使用python-selenium和Chrome 59,并尝试自动执行简单的下载序列。当我正常启动浏览器时,下载有效,但是当我以无头模式运行时,下载不起作用。 我什至尝试添加默认路径: 在常规实现中,添加默认路径是可行的,但是无头版本仍然存在相同的问题。 如何使下载以无头模式开始? 问题答案: 是的,这是安全的“功能”。如前所述,这里是Bug讨论:https : //bugs.c

  • 工具:Java、Selenium WebDriver、Maven、Git、Bamboo 我不知道如何在Bamboo下运行我的测试用例,这些测试用例由java编写,由maven构建,并存储在Git存储库中。Bamboo无法打开真正的浏览器(即Firefox、chrome…)当我尝试使用HTMLUnitdriver(无头浏览器)而不是真正的浏览器时,它是有效的,但HTMLUnitdriver的问题是它