Я использую Chrome Headless с Selenium (3.14.0) и Capybara (3.8.0) в моем проекте Ruby on Rails (5.2.1), и у меня есть тест, который работает в Chrome без заголовка, но не в headlessхром.Я использую флаг «--headless» в стабильной версии Google Chrome 69.
Я настроил свой хром без головы следующим образом, и это работает для всех тестов, которые не загружают файлы.
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
Я прочитал, что должен посылать команду для селена chrome driver, чтобы разрешить загрузку, но я не могу понять, как это сделать с моей установкой.Вот то, что я пытаюсь заставить работать, но с моей настройкой;(не из моей базы кода);
@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-вызов?