# frozen_string_literal: truegem"capybara",">= 2.15"require"capybara/dsl"require"capybara/minitest"require"action_controller"require"action_dispatch/system_testing/driver"require"action_dispatch/system_testing/browser"require"action_dispatch/system_testing/server"require"action_dispatch/system_testing/test_helpers/screenshot_helper"require"action_dispatch/system_testing/test_helpers/setup_and_teardown"require"action_dispatch/system_testing/test_helpers/undef_methods"moduleActionDispatch# = System Testing## System tests let you test applications in the browser. Because system# tests use a real browser experience, you can test all of your JavaScript# easily from your test suite.## To create a system test in your application, extend your test class# from <tt>ApplicationSystemTestCase</tt>. System tests use Capybara as a# base and allow you to configure the settings through your# <tt>application_system_test_case.rb</tt> file that is generated with a new# application or scaffold.## Here is an example system test:## require 'application_system_test_case'## class Users::CreateTest < ApplicationSystemTestCase# test "adding a new user" do# visit users_path# click_on 'New User'## fill_in 'Name', with: 'Arya'# click_on 'Create User'## assert_text 'Arya'# end# end## When generating an application or scaffold, an +application_system_test_case.rb+# file will also be generated containing the base class for system testing.# This is where you can change the driver, add Capybara settings, and other# configuration for your system tests.## require "test_helper"## class ApplicationSystemTestCase < ActionDispatch::SystemTestCase# driven_by :selenium, using: :chrome, screen_size: [1400, 1400]# end## By default, <tt>ActionDispatch::SystemTestCase</tt> is driven by the# Selenium driver, with the Chrome browser, and a browser size of 1400x1400.## Changing the driver configuration options is easy. Let's say you want to use# the Firefox browser instead of Chrome. In your +application_system_test_case.rb+# file add the following:## require "test_helper"## class ApplicationSystemTestCase < ActionDispatch::SystemTestCase# driven_by :selenium, using: :firefox# end## +driven_by+ has a required argument for the driver name. The keyword# arguments are +:using+ for the browser and +:screen_size+ to change the# size of the browser screen. These two options are not applicable for# headless drivers and will be silently ignored if passed.## Headless browsers such as headless Chrome and headless Firefox are also supported.# You can use these browsers by setting the +:using+ argument to +:headless_chrome+ or +:headless_firefox+.## To use a headless driver, like Poltergeist, update your Gemfile to use# Poltergeist instead of Selenium and then declare the driver name in the# +application_system_test_case.rb+ file. In this case, you would leave out# the +:using+ option because the driver is headless, but you can still use# +:screen_size+ to change the size of the browser screen, also you can use# +:options+ to pass options supported by the driver. Please refer to your# driver documentation to learn about supported options.## require "test_helper"# require "capybara/poltergeist"## class ApplicationSystemTestCase < ActionDispatch::SystemTestCase# driven_by :poltergeist, screen_size: [1400, 1400], options:# { js_errors: true }# end## Because <tt>ActionDispatch::SystemTestCase</tt> is a shim between Capybara# and Rails, any driver that is supported by Capybara is supported by system# tests as long as you include the required gems and files.classSystemTestCase<IntegrationTestincludeCapybara::DSLincludeCapybara::Minitest::AssertionsincludeSystemTesting::TestHelpers::SetupAndTeardownincludeSystemTesting::TestHelpers::ScreenshotHelperincludeSystemTesting::TestHelpers::UndefMethodsdefinitialize(*)# :nodoc:superself.class.driver.useenddefself.start_application# :nodoc:Capybara.app=Rack::Builder.newdomap"/"dorunRails.applicationendendSystemTesting::Server.new.runendclass_attribute:driver,instance_accessor: false# System Test configuration options## The default settings are Selenium, using Chrome, with a screen size# of 1400x1400.## Examples:## driven_by :poltergeist## driven_by :selenium, screen_size: [800, 800]## driven_by :selenium, using: :chrome## driven_by :selenium, using: :headless_chrome## driven_by :selenium, using: :firefox## driven_by :selenium, using: :headless_firefoxdefself.driven_by(driver,using: :chrome,screen_size: [1400,1400],options: {})self.driver=SystemTesting::Driver.new(driver,using: using,screen_size: screen_size,options: options)enddriven_by:seleniumActiveSupport.run_load_hooks(:action_dispatch_system_test_case,self)endSystemTestCase.start_applicationend