diff --git a/Rakefile b/Rakefile index d2b9deeb0..0043508cc 100644 --- a/Rakefile +++ b/Rakefile @@ -17,7 +17,7 @@ RSpec::Core::RakeTask.new(:spec_firefox) do |t| t.pattern = './spec{,/*/**}/*{_spec.rb,_spec_firefox.rb}' end -%w[chrome ie edge chrome_remote firefox_remote safari].each do |driver| +%w[chrome ie edge chrome_remote firefox_remote safari multi_chrome].each do |driver| desc "Run tests using #{driver} driver" RSpec::Core::RakeTask.new(:"spec_#{driver}") do |t| t.rspec_opts = rspec_opts diff --git a/lib/capybara/spec/views/with_unload_alert.erb b/lib/capybara/spec/views/with_unload_alert.erb index a15342c12..dc6bcda8f 100644 --- a/lib/capybara/spec/views/with_unload_alert.erb +++ b/lib/capybara/spec/views/with_unload_alert.erb @@ -3,11 +3,16 @@ +
+ + +
This triggers an alert on unload
Go away diff --git a/spec/selenium_spec_multi_chrome.rb b/spec/selenium_spec_multi_chrome.rb new file mode 100644 index 000000000..1ca65e2b0 --- /dev/null +++ b/spec/selenium_spec_multi_chrome.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'spec_helper' +require 'selenium-webdriver' + +CHROME_VERSIONS = %w[135 136 138 139].freeze + +Selenium::WebDriver::Chrome.path = '/usr/bin/google-chrome-beta' if ENV.fetch('CI', nil) && ENV.fetch('CHROME_BETA', nil) + +Selenium::WebDriver.logger.ignore(:selenium_manager) + +def build_driver(chrome_version) + Capybara.register_driver :"chrome_#{chrome_version}" do |app| + browser_options = Selenium::WebDriver::Chrome::Options.new + browser_options.unhandled_prompt_behavior = :ignore + browser_options.browser_version = chrome_version + browser_options.web_socket_url = true + + version = Capybara::Selenium::Driver.load_selenium + options_key = Capybara::Selenium::Driver::CAPS_VERSION.satisfied_by?(version) ? :capabilities : :options + driver_options = { browser: :chrome, timeout: 5 } + driver_options[options_key] = browser_options + + Capybara::Selenium::Driver.new(app, **driver_options) + end +end + +CHROME_VERSIONS.each do |version| + build_driver(version) +end + +Capybara::SpecHelper.log_selenium_driver_version(Selenium::WebDriver::Chrome) if ENV['CI'] + +RSpec.shared_examples 'beforeunload checks' do |session| + it "#{session.mode} should accept browser modal", requires: [:modals] do + session.visit('/with_unload_alert') + session.fill_in 'data', with: 'this is data' + session.accept_confirm do + session.click_link('Go away') + end + expect(session).to have_text('Hello world') + end +end + +RSpec.describe 'testing with' do + include Capybara::SpecHelper + + CHROME_VERSIONS.each do |version| + include_examples 'beforeunload checks', Capybara::Session.new(:"chrome_#{version}", TestApp) + end +end