Last active
November 25, 2024 15:47
-
-
Save bbonamin/4b01be9ed5dd1bdaf909462ff4fdca95 to your computer and use it in GitHub Desktop.
Capybara Selenium Webdriver: Headless Chrome (with file downloads!) & Headless Firefox
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
tap "caskroom/cask" | |
cask "google-chrome" | |
cask "firefox" | |
brew "chromedriver" | |
brew "geckodriver" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'capybara/rspec' | |
require 'selenium/webdriver' | |
options = Selenium::WebDriver::Chrome::Options.new | |
options.add_preference(:download, prompt_for_download: false, | |
default_directory: '/tmp/downloads') | |
options.add_preference(:browser, set_download_behavior: { behavior: 'allow' }) | |
Capybara.register_driver :chrome do |app| | |
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) | |
end | |
Capybara.register_driver :headless_chrome do |app| | |
options.add_argument('--headless') | |
options.add_argument('--disable-gpu') | |
options.add_argument('--window-size=1280,800') | |
driver = Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) | |
### Allow file downloads in Google Chrome when headless!!! | |
### https://bugs.chromium.org/p/chromium/issues/detail?id=696481#c89 | |
bridge = driver.browser.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: '/tmp/downloads' | |
}) | |
### | |
driver | |
end | |
Capybara.javascript_driver = ENV['GUI'] ? :chrome : :headless_chrome |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'capybara/rspec' | |
require 'selenium/webdriver' | |
Capybara.register_driver :firefox do |app| | |
Capybara::Selenium::Driver.new(app, browser: :firefox) | |
end | |
Capybara.register_driver :headless_firefox do |app| | |
options = Selenium::WebDriver::Firefox::Options.new | |
options.headless! # added on https://github.com/SeleniumHQ/selenium/pull/4762 | |
Capybara::Selenium::Driver.new app, | |
browser: :firefox, | |
options: options | |
end | |
Capybara.javascript_driver = ENV['GUI'] ? :firefox : :headless_firefox |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source 'https://rubygems.org' | |
gem 'selenium-webdriver' | |
gem 'capybara' | |
gem 'rspec' |
Thank you bbonamin and dancristianb for saving me tons of time as I update an old Rails app's webdrivers
gem from 4.2.0 - with the tap syntax - to 5.3.1 - with this one! π₯³πππ
You might want to use the new headless mode in Chrome:
options.add_argument('--headless=new')
Also don't forget other default driver options.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@ozzyaaron we've hit the same issues here, the
downloadPath
seems to be lost between tests.Clearly not ideal but we've worked around the issue by having the session destroyed and rebuilt for each example in the suite.