Permalink
Browse files

Merge pull request #28185 from renchap/system-testing-screenshot-output

Dont always display inline screenshots in system testing (#28133)
  • Loading branch information...
eileencodes committed Mar 13, 2017
2 parents bc619fb + 79435c0 commit 5a053052ad882ffe73394727e911a5fa7d18884c
Showing with 34 additions and 5 deletions.
  1. +34 −5 actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb
@@ -8,9 +8,20 @@ module ScreenshotHelper
# +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:
# * [+inline+ (default)] display the screenshot in the terminal using the
# iTerm image protocol (http://iterm2.com/documentation-images.html).
# * [+simple+] only display the screenshot path.
# This is the default value if the +CI+ environment variables
# is defined.
# * [+artifact+] display the screenshot in the terminal, using the terminal
# artifact format (http://buildkite.github.io/terminal/inline-images/).
def take_screenshot
save_image
puts "[Screenshot]: #{image_path}"
puts display_image
end
@@ -38,14 +49,32 @@ def save_image
page.save_screenshot(Rails.root.join(image_path))
end
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
def display_image
if ENV["CAPYBARA_INLINE_SCREENSHOT"] == "artifact"
"\e]1338;url=artifact://#{image_path}\a"
else
message = "[Screenshot]: #{image_path}\n"
case output_type
when "artifact"
message << "\e]1338;url=artifact://#{image_path}\a\n"
when "inline"
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"
message << "\e]1337;File=name=#{name};height=400px;inline=1:#{image}\a\n"
end
message
end
def inline_base64(path)

0 comments on commit 5a05305

Please sign in to comment.