class ActionDispatch::SystemTestCase
tests as long as you include the required gems and files.
and Rails, any driver that is supported by Capybara is supported by system
Because ActionDispatch::SystemTestCase
is a shim between Capybara
end
end
driver_option.add_extension(‘path/to/chrome_extension.crx’)
driver_option.add_emulation(device_name: ‘iPhone 6’)
driven_by :selenium, using: :chrome, screen_size: [1024, 768] do |driver_option|
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
to learn about supported options.
define the capabilities you want. Please refer to your driver documentation
The block will be passed an instance of <Driver>::Options
where you can
capabilities with a block.
create an instance of selenium’s Chrome::Options
object and add
As an example, if you want to add mobile emulation on chrome, you’ll have to
of through the options
hash.
Some drivers require browser capabilities to be passed as a block instead
end
{ js_errors: true }
driven_by :cuprite, screen_size: [1400, 1400], options:
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
require “capybara/cuprite”
require “test_helper”
driver documentation to learn about supported options.:options
to pass options supported by the driver. Please refer to your:screen_size
to change the size of the browser screen, also you can use
the :using
option because the driver is headless, but you can still useapplication_system_test_case.rb
file. In this case, you would leave out
Cuprite instead of Selenium and then declare the driver name in the
To use a headless driver, like Cuprite, update your Gemfile to use
You can use these browsers by setting the :using
argument to :headless_chrome
or :headless_firefox
.
Headless browsers such as headless Chrome and headless Firefox are also supported.
headless drivers and will be silently ignored if passed.
size of the browser screen. These two options are not applicable for
arguments are :using
for the browser and :screen_size
to change thedriven_by
has a required argument for the driver name. The keyword
end
driven_by :selenium, using: :firefox
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
require “test_helper”
file add the following:
the Firefox browser instead of Chrome. In your application_system_test_case.rb
Changing the driver configuration options is easy. Let’s say you want to use
Selenium driver, with the Chrome browser, and a browser size of 1400x1400.
By default, ActionDispatch::SystemTestCase
is driven by the
end
driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
require “test_helper”
configuration for your system tests.
This is where you can change the driver, add Capybara settings, and other
file will also be generated containing the base class for system testing.
When generating an application or scaffold, an application_system_test_case.rb
end
end
assert_text ‘Arya’
click_on ‘Create User’
fill_in ‘Name’, with: ‘Arya’
click_on ‘New User’
visit users_path
test “adding a new user” do
class Users::CreateTest < ApplicationSystemTestCase
require “application_system_test_case”
Here is an example system test:
application or scaffold.application_system_test_case.rb
file that is generated with a new
base and allow you to configure the settings through your
from ApplicationSystemTestCase
. System tests use Capybara as a
To create a system test in your application, extend your test class
easily from your test suite.
tests use a real browser experience, you can test all of your JavaScript
System tests let you test applications in the browser. Because system
= System Testing
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {}, &capabilities)
driven_by :selenium, using: :firefox
driven_by :selenium, using: :headless_chrome
driven_by :selenium, using: :chrome
driven_by :selenium, screen_size: [800, 800]
driven_by :cuprite
Examples:
of 1400x1400.
The default settings are Selenium, using Chrome, with a screen size
System Test configuration options
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {}, &capabilities) driver_options = { using: using, screen_size: screen_size, options: options } self.driver = SystemTesting::Driver.new(driver, **driver_options, &capabilities) end
def self.start_application # :nodoc:
def self.start_application # :nodoc: Capybara.app = Rack::Builder.new do map "/" do run Rails.application end end SystemTesting::Server.new.run end
def app_host
def app_host Capybara.app_host || Capybara.current_session.server_url || DEFAULT_HOST end
def initialize(*) # :nodoc:
def initialize(*) # :nodoc: super self.class.driven_by(:selenium) unless self.class.driver? self.class.driver.use end
def method_missing(name, *args, &block)
def method_missing(name, *args, &block) if url_helpers.respond_to?(name) url_helpers.public_send(name, *args, &block) else super end end
def respond_to_missing?(name, include_private = false)
def respond_to_missing?(name, include_private = false) url_helpers.respond_to?(name) end
def url_helpers
def url_helpers @url_helpers ||= if ActionDispatch.test_app Class.new do include ActionDispatch.test_app.routes.url_helpers include ActionDispatch.test_app.routes.mounted_helpers def url_options default_url_options.reverse_merge(host: app_host) end def app_host Capybara.app_host || Capybara.current_session.server_url || DEFAULT_HOST end end.new end end
def url_options
def url_options default_url_options.reverse_merge(host: app_host) end