diff options
author | eileencodes <eileencodes@gmail.com> | 2016-10-02 15:22:27 -0400 |
---|---|---|
committer | eileencodes <eileencodes@gmail.com> | 2017-02-20 15:07:33 -0500 |
commit | e9127f7aa082986952ffcc8331b675a3a99c3a83 (patch) | |
tree | 2d9445eb4693b8b0dccd29155581e2364ba174e1 /actionpack/lib/system_testing/test_helpers/screenshot_helper.rb | |
parent | f482eddbeff9fe3d0dc6cdaa9a4b53df839f667c (diff) | |
download | rails-e9127f7aa082986952ffcc8331b675a3a99c3a83.tar.gz rails-e9127f7aa082986952ffcc8331b675a3a99c3a83.tar.bz2 rails-e9127f7aa082986952ffcc8331b675a3a99c3a83.zip |
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.
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 + |