Module: ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper

Included in:
ActionDispatch::SystemTestCase
Defined in:
lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb

Overview

Screenshot helper for system testing.

Instance Method Summary collapse

Instance Method Details

#take_failed_screenshotObject

Takes a screenshot of the current page in the browser if the test failed.

take_failed_screenshot is called during system test teardown.



44
45
46
47
48
49
# File 'lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb', line 44

def take_failed_screenshot
  return unless failed? && supports_screenshot? && Capybara::Session.instance_created?

  take_screenshot
  [:failure_screenshot_path] = relative_image_path if Minitest::Runnable.method_defined?(:metadata)
end

#take_screenshot(html: false, screenshot: nil) ⇒ Object

Takes a screenshot of the current page in the browser.

take_screenshot can be used at any point in your system tests to take a screenshot of the current state. This can be useful for debugging or automating visual testing. You can take multiple screenshots per test to investigate changes at different points during your test. These will be named with a sequential prefix (or ‘failed’ for failing tests)

The default screenshots directory is tmp/screenshots but you can set a different one with Capybara.save_path

You can use the html argument or set the RAILS_SYSTEM_TESTING_SCREENSHOT_HTML environment variable to save the HTML from the page that is being screenshotted so you can investigate the elements on the page at the time of the screenshot

You can use the screenshot argument or set the RAILS_SYSTEM_TESTING_SCREENSHOT environment variable to control the output. Possible values are:



31
32
33
34
35
36
37
38
# File 'lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb', line 31

def take_screenshot(html: false, screenshot: nil)
  showing_html = html || html_from_env?

  increment_unique
  save_html if showing_html
  save_image
  show display_image(html: showing_html, screenshot_output: screenshot)
end