aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/system_testing/test_helpers/screenshot_helper.rb
diff options
context:
space:
mode:
authoreileencodes <eileencodes@gmail.com>2016-10-02 15:22:27 -0400
committereileencodes <eileencodes@gmail.com>2017-02-20 15:07:33 -0500
commite9127f7aa082986952ffcc8331b675a3a99c3a83 (patch)
tree2d9445eb4693b8b0dccd29155581e2364ba174e1 /actionpack/lib/system_testing/test_helpers/screenshot_helper.rb
parentf482eddbeff9fe3d0dc6cdaa9a4b53df839f667c (diff)
downloadrails-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.rb48
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
+