module ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper

Screenshot helper for system testing.

Public Instance Methods

take_failed_screenshot() click to toggle source

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

take_failed_screenshot is included in application_system_test_case.rb that is generated with the application. To take screenshots when a test fails add take_failed_screenshot to the teardown block before clearing sessions.

# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 37
def take_failed_screenshot
  take_screenshot if failed? && supports_screenshot?
end
take_screenshot() click to toggle source

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.

The screenshot will be displayed in your console, if supported.

You can set the RAILS_SYSTEM_TESTING_SCREENSHOT environment variable to control the output. Possible values are:

# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 25
def take_screenshot
  save_image
  puts display_image
end

Private Instance Methods

absolute_image_path() click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 50
def absolute_image_path
  Quails.root.join("tmp/screenshots/#{image_name}.png")
end
display_image() click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 71
def display_image
  message = "[Screenshot]: #{image_path}\n".dup

  case output_type
  when "artifact"
    message << "\e]1338;url=artifact://#{absolute_image_path}\a\n"
  when "inline"
    name = inline_base64(File.basename(absolute_image_path))
    image = inline_base64(File.read(absolute_image_path))
    message << "\e]1337;File=name=#{name};height=400px;inline=1:#{image}\a\n"
  end

  message
end
failed?() click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 90
def failed?
  !passed? && !skipped?
end
image_name() click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 42
def image_name
  failed? ? "failures_#{method_name}" : method_name
end
image_path() click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 46
def image_path
  @image_path ||= absolute_image_path.relative_path_from(Pathname.pwd).to_s
end
inline_base64(path) click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 86
def inline_base64(path)
  Base64.encode64(path).gsub("\n", "")
end
output_type() click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 58
def output_type
  # Environment variables have priority
  output_type = ENV["RAILS_SYSTEM_TESTING_SCREENSHOT"] || ENV["CAPYBARA_INLINE_SCREENSHOT"]

  # If running in a CI environment, default to simple
  output_type ||= "simple" if ENV["CI"]

  # Default
  output_type ||= "inline"

  output_type
end
save_image() click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 54
def save_image
  page.save_screenshot(absolute_image_path)
end
supports_screenshot?() click to toggle source
# File actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb, line 94
def supports_screenshot?
  Capybara.current_driver != :rack_test
end