From e9127f7aa082986952ffcc8331b675a3a99c3a83 Mon Sep 17 00:00:00 2001 From: eileencodes Date: Sun, 2 Oct 2016 15:22:27 -0400 Subject: Add support for screenshots This change adds support, tests, and documentation for the screenshot helper. If taking screenshots is supported by the driver (for example Rack Test doesn't support screenshots) then a screenshot will be taken if the test fails. --- .../test_helpers/screenshot_helper.rb | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 actionpack/lib/system_testing/test_helpers/screenshot_helper.rb (limited to 'actionpack/lib/system_testing/test_helpers') diff --git a/actionpack/lib/system_testing/test_helpers/screenshot_helper.rb b/actionpack/lib/system_testing/test_helpers/screenshot_helper.rb new file mode 100644 index 0000000000..a74ebb8cae --- /dev/null +++ b/actionpack/lib/system_testing/test_helpers/screenshot_helper.rb @@ -0,0 +1,48 @@ +module SystemTesting + module TestHelpers + # Screenshot helper for system testing + module ScreenshotHelper + # Takes a screenshot of the current page in the browser if the system + # test driver supports screenshots and the test failed. + # + # Additionally +take_screenshot+ can be used within your tests at points + # you want to take a screenshot if the driver supports screenshots. The + # Rack Test driver does not support screenshots. + # + # You can check of the driver supports screenshots by running + # + # Rails::SystemTestCase.driver.supports_screenshots? + # => true + def take_screenshot + puts "[Screenshot]: #{image_path}" + puts find_image + end + + private + def supported? + Rails::SystemTestCase.driver.supports_screenshots? && !passed? + end + + def image_path + path = "tmp/screenshots/failures_#{method_name}.png" + page.save_screenshot(Rails.root.join(path)) + path + end + + def find_image + if ENV['CAPYBARA_INLINE_SCREENSHOT'] == 'artifact' + "\e]1338;url=artifact://#{image_path}\a" + else + name = inline_base64(File.basename(image_path)) + image = inline_base64(File.read(image_path)) + "\e]1337;File=name=#{name};height=400px;inline=1:#{image}\a" + end + end + + def inline_base64(path) + Base64.encode64(path).gsub("\n",'') + end + end + end +end + -- cgit v1.2.3