|
@@ -4,9 +4,44 @@ require 'selenium/webdriver'
|
|
|
Capybara.default_max_wait_time = 10
|
|
Capybara.default_max_wait_time = 10
|
|
|
Capybara.server = :puma, {Silent: true}
|
|
Capybara.server = :puma, {Silent: true}
|
|
|
|
|
|
|
|
|
|
+# Check if Capybara should be running against a remote Selenium instance
|
|
|
|
|
+def remote_selenium?
|
|
|
|
|
+ (ENV['SELENIUM_FIREFOX_HOST'] || ENV['SELENIUM_CHROME_HOST']) && ENV['SELENIUM_PORT']
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+# Condtionally swap driver setup, defaults to `:headless_firefox`
|
|
|
|
|
+def selenium_driver
|
|
|
|
|
+ return @selenium_driver if @selenium_driver
|
|
|
|
|
+
|
|
|
|
|
+ selenium_driver = []
|
|
|
|
|
+ if remote_selenium?
|
|
|
|
|
+ selenium_driver.push('remote')
|
|
|
|
|
+ elsif ENV['CAPYBARA_GUI_DRIVER'] != 'true'
|
|
|
|
|
+ selenium_driver.push('headless')
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+ case ENV['CAPYBARA_JS_DRIVER']
|
|
|
|
|
+ when 'chrome'
|
|
|
|
|
+ selenium_driver.push('chrome')
|
|
|
|
|
+ when 'firefox'
|
|
|
|
|
+ selenium_driver.push('firefox')
|
|
|
|
|
+ else
|
|
|
|
|
+ selenium_driver.push('firefox')
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+ @selenium_driver = selenium_driver.join('_').to_sym
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+# Setting app_host and default_host here have no bearing on test runners.
|
|
|
|
|
+# These must be set in a `before` block for each test, i.e. in rails_helper.rb
|
|
|
|
|
+# Capybara.app_host = "http://#{ip}:#{app_host_port}"
|
|
|
|
|
+# Capybara.default_host = "http://#{ip}:#{app_host_port}"
|
|
|
|
|
+
|
|
|
|
|
+Capybara.server_port = ENV['APP_HOST_PORT'] if ENV['APP_HOST_PORT']
|
|
|
|
|
+Capybara.server_host = '0.0.0.0' if remote_selenium?
|
|
|
|
|
+
|
|
|
# Headless firefox and chrome configuration. Useful for CI matrices.
|
|
# Headless firefox and chrome configuration. Useful for CI matrices.
|
|
|
# See https://gist.github.com/bbonamin/4b01be9ed5dd1bdaf909462ff4fdca95
|
|
# See https://gist.github.com/bbonamin/4b01be9ed5dd1bdaf909462ff4fdca95
|
|
|
-
|
|
|
|
|
Capybara.register_driver :firefox do |app|
|
|
Capybara.register_driver :firefox do |app|
|
|
|
Capybara::Selenium::Driver.new(app, browser: :firefox)
|
|
Capybara::Selenium::Driver.new(app, browser: :firefox)
|
|
|
end
|
|
end
|
|
@@ -50,3 +85,24 @@ Capybara.register_driver :headless_chrome do |app|
|
|
|
|
|
|
|
|
driver
|
|
driver
|
|
|
end
|
|
end
|
|
|
|
|
+
|
|
|
|
|
+Capybara.register_driver :remote_firefox do |app|
|
|
|
|
|
+ Capybara::Selenium::Driver.new(
|
|
|
|
|
+ app,
|
|
|
|
|
+ browser: :remote,
|
|
|
|
|
+ url: "http://#{ENV['SELENIUM_FIREFOX_HOST']}:#{ENV['SELENIUM_PORT']}/wd/hub",
|
|
|
|
|
+ desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox,
|
|
|
|
|
+ )
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+Capybara.register_driver :remote_chrome do |app|
|
|
|
|
|
+ args = ['--no-default-browser-check', '--start-maximized']
|
|
|
|
|
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => {'args' => args})
|
|
|
|
|
+
|
|
|
|
|
+ Capybara::Selenium::Driver.new(
|
|
|
|
|
+ app,
|
|
|
|
|
+ browser: :remote,
|
|
|
|
|
+ url: "http://#{ENV['SELENIUM_CHROME_HOST']}:#{ENV['SELENIUM_PORT']}/wd/hub",
|
|
|
|
|
+ desired_capabilities: caps,
|
|
|
|
|
+ )
|
|
|
|
|
+end
|