diff options
author | John Hawthorn <john@hawthorn.email> | 2019-07-03 11:23:55 -0700 |
---|---|---|
committer | John Hawthorn <john@hawthorn.email> | 2019-07-03 13:56:50 -0700 |
commit | b21ef266619074c27f0ea147f5ebaccfe1709ecf (patch) | |
tree | 54062c1265bea879614b20dd0169cd60718b12eb /actionpack/lib | |
parent | 182d4751974cc95fb0145ea24299fd0ab98fd049 (diff) | |
download | rails-b21ef266619074c27f0ea147f5ebaccfe1709ecf.tar.gz rails-b21ef266619074c27f0ea147f5ebaccfe1709ecf.tar.bz2 rails-b21ef266619074c27f0ea147f5ebaccfe1709ecf.zip |
Preload browser driver_path for system testing
The webdrivers gem configures Selenium::WebDriver::Service.driver_path
as a proc which updates the web drivers and returns their path.
This commit introduces SystemTesting::Browser#preload, which runs this
proc early. This ensures that webdrivers update is run before forking
for parallel testing, but doesn't explicitly tie us to that gem (and I
think anything configured as driver_path probably makes sense to
eager-load).
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_dispatch/system_test_case.rb | 1 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/system_testing/browser.rb | 13 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/system_testing/driver.rb | 2 |
3 files changed, 16 insertions, 0 deletions
diff --git a/actionpack/lib/action_dispatch/system_test_case.rb b/actionpack/lib/action_dispatch/system_test_case.rb index a7fb5fa330..29864c0f8e 100644 --- a/actionpack/lib/action_dispatch/system_test_case.rb +++ b/actionpack/lib/action_dispatch/system_test_case.rb @@ -4,6 +4,7 @@ gem "capybara", ">= 2.15" require "capybara/dsl" require "capybara/minitest" +require "selenium/webdriver" require "action_controller" require "action_dispatch/system_testing/driver" require "action_dispatch/system_testing/browser" diff --git a/actionpack/lib/action_dispatch/system_testing/browser.rb b/actionpack/lib/action_dispatch/system_testing/browser.rb index c34907b6cb..f5f195d876 100644 --- a/actionpack/lib/action_dispatch/system_testing/browser.rb +++ b/actionpack/lib/action_dispatch/system_testing/browser.rb @@ -39,6 +39,19 @@ module ActionDispatch end end + # driver_path can be configured as a proc. The webdrivers gem uses this + # proc to update web drivers. Running this proc early allows us to only + # update the webdriver once and avoid race conditions when using + # parallel tests. + def preload + case type + when :chrome + ::Selenium::WebDriver::Chrome::Service.driver_path.try(:call) + when :firefox + ::Selenium::WebDriver::Firefox::Service.driver_path.try(:call) + end + end + private def headless_chrome_browser_options capabilities.args << "--headless" diff --git a/actionpack/lib/action_dispatch/system_testing/driver.rb b/actionpack/lib/action_dispatch/system_testing/driver.rb index 25a09dd918..15943a55ea 100644 --- a/actionpack/lib/action_dispatch/system_testing/driver.rb +++ b/actionpack/lib/action_dispatch/system_testing/driver.rb @@ -9,6 +9,8 @@ module ActionDispatch @screen_size = options[:screen_size] @options = options[:options] @capabilities = capabilities + + @browser.preload end def use |