From 5c63994289b3a62e80dbfdd33bd9000079bcba0d Mon Sep 17 00:00:00 2001 From: fiveNinePlusR Date: Fri, 11 Oct 2024 18:09:58 -0700 Subject: [PATCH] unify headless chrome and normal chrome tests allows you to specify a specific driver via environment variable lets you switch between headless and non-headless chrome via env variable --- .env.test.local.example | 5 +++++ .gitignore | 1 + spec/spec_helper.rb | 27 ++++++++++++++++++--------- 3 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 .env.test.local.example diff --git a/.env.test.local.example b/.env.test.local.example new file mode 100644 index 00000000..a64e1ba7 --- /dev/null +++ b/.env.test.local.example @@ -0,0 +1,5 @@ +# Set this to true if you want to see the chrome instance during testing +NO_HEADLESS_CHROME=false + +# Use if you need a special chrome path during testing +# CHROME_SERVICE_PATH= diff --git a/.gitignore b/.gitignore index 9074feb3..e4debbfb 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ logfile /config/master.key .vscode/extensions.json +/.env.test.local diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 98ad6b7e..4fcf3a93 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -29,20 +29,29 @@ ex.run_with_retry retry: 3 end - Capybara.register_driver :selenium_chrome do |app| - Capybara::Selenium::Driver.new(app, browser: :chrome) + service = Selenium::WebDriver::Service.chrome + if ENV.fetch('CHROME_SERVICE_PATH', false) # rubocop:disable Style/IfUnlessModifier + service.executable_path = File.expand_path(ENV.fetch('CHROME_SERVICE_PATH')) end - Capybara.register_driver :selenium_headless_chrome do |app| - capabilities = Selenium::WebDriver::Remote::Capabilities.chrome( - chromeOptions: { args: %w[headless disable-gpu window-size=2000,1000] } + Capybara.register_driver :selenium_chrome do |app| + options = Selenium::WebDriver::Chrome::Options.new + unless ENV.fetch('NO_HEADLESS_CHROME', false) + options.add_argument('--headless') + options.add_argument('--window-size=2000,1000') + end + + options.add_argument('--disable-gpu') + + Capybara::Selenium::Driver.new( + app, + browser: :chrome, + options: options, + service: service ) - - Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities) end - Capybara.javascript_driver = :selenium_chrome_headless - # Capybara.javascript_driver = :selenium_chrome + Capybara.javascript_driver = :selenium_chrome # == Mock Framework #