Add headless firefox driver to System Tests
This commit is contained in:
parent
bbacd60048
commit
82b974813b
|
@ -1,3 +1,7 @@
|
||||||
|
* Add headless firefox support to System Tests.
|
||||||
|
|
||||||
|
*bogdanvlviv*
|
||||||
|
|
||||||
* Changed the default system test screenshot output from `inline` to `simple`.
|
* Changed the default system test screenshot output from `inline` to `simple`.
|
||||||
|
|
||||||
`inline` works well for iTerm2 but not everyone uses iTerm2. Some terminals like
|
`inline` works well for iTerm2 but not everyone uses iTerm2. Some terminals like
|
||||||
|
|
|
@ -121,11 +121,15 @@ module ActionDispatch
|
||||||
#
|
#
|
||||||
# driven_by :poltergeist
|
# driven_by :poltergeist
|
||||||
#
|
#
|
||||||
# driven_by :selenium, using: :firefox
|
# driven_by :selenium, screen_size: [800, 800]
|
||||||
|
#
|
||||||
|
# driven_by :selenium, using: :chrome
|
||||||
#
|
#
|
||||||
# driven_by :selenium, using: :headless_chrome
|
# driven_by :selenium, using: :headless_chrome
|
||||||
#
|
#
|
||||||
# driven_by :selenium, screen_size: [800, 800]
|
# driven_by :selenium, using: :firefox
|
||||||
|
#
|
||||||
|
# driven_by :selenium, using: :headless_firefox
|
||||||
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {})
|
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {})
|
||||||
self.driver = SystemTesting::Driver.new(driver, using: using, screen_size: screen_size, options: options)
|
self.driver = SystemTesting::Driver.new(driver, using: using, screen_size: screen_size, options: options)
|
||||||
end
|
end
|
||||||
|
|
|
@ -37,6 +37,11 @@ module ActionDispatch
|
||||||
browser_options.args << "--headless"
|
browser_options.args << "--headless"
|
||||||
browser_options.args << "--disable-gpu"
|
browser_options.args << "--disable-gpu"
|
||||||
|
|
||||||
|
@options.merge(options: browser_options)
|
||||||
|
elsif @browser == :headless_firefox
|
||||||
|
browser_options = Selenium::WebDriver::Firefox::Options.new
|
||||||
|
browser_options.args << "-headless"
|
||||||
|
|
||||||
@options.merge(options: browser_options)
|
@options.merge(options: browser_options)
|
||||||
else
|
else
|
||||||
@options
|
@options
|
||||||
|
@ -44,7 +49,13 @@ module ActionDispatch
|
||||||
end
|
end
|
||||||
|
|
||||||
def browser
|
def browser
|
||||||
@browser == :headless_chrome ? :chrome : @browser
|
if @browser == :headless_chrome
|
||||||
|
:chrome
|
||||||
|
elsif @browser == :headless_firefox
|
||||||
|
:firefox
|
||||||
|
else
|
||||||
|
@browser
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def register_selenium(app)
|
def register_selenium(app)
|
||||||
|
|
|
@ -453,3 +453,7 @@ end
|
||||||
class DrivenBySeleniumWithHeadlessChrome < ActionDispatch::SystemTestCase
|
class DrivenBySeleniumWithHeadlessChrome < ActionDispatch::SystemTestCase
|
||||||
driven_by :selenium, using: :headless_chrome
|
driven_by :selenium, using: :headless_chrome
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class DrivenBySeleniumWithHeadlessFirefox < ActionDispatch::SystemTestCase
|
||||||
|
driven_by :selenium, using: :headless_firefox
|
||||||
|
end
|
||||||
|
|
|
@ -25,6 +25,14 @@ class DriverTest < ActiveSupport::TestCase
|
||||||
assert_equal ({ url: "http://example.com/wd/hub" }), driver.instance_variable_get(:@options)
|
assert_equal ({ url: "http://example.com/wd/hub" }), driver.instance_variable_get(:@options)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "initializing the driver with a headless firefox" do
|
||||||
|
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, using: :headless_firefox, screen_size: [1400, 1400], options: { url: "http://example.com/wd/hub" })
|
||||||
|
assert_equal :selenium, driver.instance_variable_get(:@name)
|
||||||
|
assert_equal :headless_firefox, driver.instance_variable_get(:@browser)
|
||||||
|
assert_equal [1400, 1400], driver.instance_variable_get(:@screen_size)
|
||||||
|
assert_equal ({ url: "http://example.com/wd/hub" }), driver.instance_variable_get(:@options)
|
||||||
|
end
|
||||||
|
|
||||||
test "initializing the driver with a poltergeist" do
|
test "initializing the driver with a poltergeist" do
|
||||||
driver = ActionDispatch::SystemTesting::Driver.new(:poltergeist, screen_size: [1400, 1400], options: { js_errors: false })
|
driver = ActionDispatch::SystemTesting::Driver.new(:poltergeist, screen_size: [1400, 1400], options: { js_errors: false })
|
||||||
assert_equal :poltergeist, driver.instance_variable_get(:@name)
|
assert_equal :poltergeist, driver.instance_variable_get(:@name)
|
||||||
|
|
|
@ -28,6 +28,12 @@ class SetDriverToSeleniumHeadlessChromeTest < DrivenBySeleniumWithHeadlessChrome
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class SetDriverToSeleniumHeadlessFirefoxTest < DrivenBySeleniumWithHeadlessFirefox
|
||||||
|
test "uses selenium headless firefox" do
|
||||||
|
assert_equal :selenium, Capybara.current_driver
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class SetHostTest < DrivenByRackTest
|
class SetHostTest < DrivenByRackTest
|
||||||
test "sets default host" do
|
test "sets default host" do
|
||||||
assert_equal "http://127.0.0.1", Capybara.app_host
|
assert_equal "http://127.0.0.1", Capybara.app_host
|
||||||
|
|
|
@ -673,7 +673,8 @@ class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to use a headless browser, you could use Headless Chrome by adding `headless_chrome` in the `:using` argument.
|
If you want to use a headless browser, you could use Headless Chrome or Headless Firefox by adding
|
||||||
|
`headless_chrome` or `headless_firefox` in the `:using` argument.
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
require "test_helper"
|
require "test_helper"
|
||||||
|
|
Loading…
Reference in New Issue