diff options
Diffstat (limited to 'actionpack/lib/system_testing/test_helpers/screenshot_helper.rb')
-rw-r--r-- | actionpack/lib/system_testing/test_helpers/screenshot_helper.rb | 48 |
1 files changed, 48 insertions, 0 deletions
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 + |