使用水豚和硒的Chrome浏览器无头下载pdf

时间:2018-10-04 06:51:39

标签: ruby-on-rails selenium capybara google-chrome-headless

我在Ruby on Rails(5.2.1)项目中使用了Selenium(3.14.0)和Capybara(3.8.0)的无头铬,并且我有一个测试可以在无头chrome中工作,但不能在无头chrome中工作铬。我在Google Chrome稳定版69上使用“ --headless”标志。

我使用以下方法设置了无头chrome,它适用于所有不下载文件的测试。

download_path="#{Rails.root}/tmp/downloads"

Capybara.register_driver(:headless_chrome) do |app|
  caps = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: {
      prefs: {
        'download.default_directory' => download_path,
        "download.extensions_to_open" => "applications/pdf",
        'download.directory_upgrade' => true,
        'download.prompt_for_download' => false,
        'plugins.plugins_disabled' => ["Chrome PDF Viewer"]
      },
      binary: "/opt/google/chrome/google-chrome",
      args: %w[headless disable-gpu window-size=1920,1080]
    }
  )
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: caps
  )
end

我已经阅读到我应该向selenium chrome驱动程序发送命令以允许下载,但是我不知道如何使用我的设置进行操作。这是我要开始工作的内容,但是要进行设置。 (不是来自我的代码库);

@driver = Selenium::WebDriver.for :chrome, options: options

bridge = @driver.send(:bridge)
path = '/session/:session_id/chromium/send_command'
path[':session_id'] = bridge.session_id
bridge.http.call(:post, path, cmd: 'Page.setDownloadBehavior',
                 params: {
                   behavior: 'allow',
                   downloadPath: download_path
                 })

如何在设置中访问硒桥,以便发送此http呼叫?

1 个答案:

答案 0 :(得分:6)

您不再需要手动发送它,它已作为Selenium::WebDriver::Chrome::Server#download_path=添加到硒中。您可以通过Capybara::Selenium::Driver实例在驱动程序注册中进行设置

...
Capybara::Selenium::Driver.new(
  app,
  browser: :chrome,
  desired_capabilities: caps
).tap { |d| d.browser.download_path = <your download path> }