class Capybara::Screenshot::Saver
Attributes
capybara[R]
file_base_name[R]
page[R]
Public Class Methods
new(capybara, page, html_save=true, filename_prefix='screenshot')
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 14 def initialize(capybara, page, html_save=true, filename_prefix='screenshot') @capybara, @page, @html_save = capybara, page, html_save time_now = Time.now timestamp = "#{time_now.strftime('%Y-%m-%d-%H-%M-%S.')}#{'%03d' % (time_now.usec/1000).to_i}" filename = [filename_prefix] filename << timestamp if Capybara::Screenshot.append_timestamp filename << SecureRandom.hex if Capybara::Screenshot.append_random @file_base_name = filename.join('_') Capybara::Screenshot.prune end
Public Instance Methods
clear_save_path() { || ... }
click to toggle source
If Capybara::Screenshot.capybara_tmp_path
is set then the html_path
or screenshot_path
can be appended to this path in some versions of Capybara
instead of using it as an absolute path
# File lib/capybara-screenshot/saver.rb, line 92 def clear_save_path old_path = Capybara::Screenshot.capybara_tmp_path Capybara::Screenshot.capybara_tmp_path = nil yield ensure Capybara::Screenshot.capybara_tmp_path = old_path end
display_image()
click to toggle source
Print image to screen, if imgcat is available
# File lib/capybara-screenshot/saver.rb, line 106 def display_image system("#{imgcat} #{screenshot_path}") unless imgcat.nil? end
html_path()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 73 def html_path File.join(Capybara::Screenshot.capybara_root, "#{file_base_name}.html") end
html_saved?()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 81 def html_saved? @html_saved end
output_screenshot_path()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 100 def output_screenshot_path output "HTML screenshot: #{html_path}" if html_saved? output "Image screenshot: #{screenshot_path}" if screenshot_saved? end
save()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 28 def save current_path do |path| if path.empty? warn 'WARN: Screenshot could not be saved. `page.current_path` is empty.' else begin save_html if @html_save rescue StandardError => e warn "WARN: HTML source could not be saved. An exception is raised: #{e.inspect}." end begin save_screenshot rescue StandardError => e warn "WARN: Screenshot could not be saved. An exception is raised: #{e.inspect}." end end end end
save_html()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 48 def save_html path = html_path clear_save_path do if Capybara::VERSION.match(/^\d+/)[0] == '1' capybara.save_page(page.body, path.to_s) else capybara.save_page(path.to_s) end end @html_saved = true run_callbacks :after_save_html, html_path if html_saved? end
save_screenshot()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 61 def save_screenshot path = screenshot_path clear_save_path do result = Capybara::Screenshot.registered_drivers.fetch(capybara.current_driver) { |driver_name| warn "capybara-screenshot could not detect a screenshot driver for '#{capybara.current_driver}'. Saving with default with unknown results." Capybara::Screenshot.registered_drivers[:default] }.call(page.driver, path) @screenshot_saved = result != :not_supported end run_callbacks :after_save_screenshot, screenshot_path if screenshot_saved? end
screenshot_path()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 77 def screenshot_path File.join(Capybara::Screenshot.capybara_root, "#{file_base_name}.png") end
screenshot_saved?()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 85 def screenshot_saved? @screenshot_saved end
Private Instance Methods
current_path() { |path| ... }
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 112 def current_path # the current_path may raise error in selenium begin path = page.current_path.to_s rescue StandardError => e warn "WARN: Screenshot could not be saved. `page.current_path` raised exception: #{e.inspect}." end yield path if path end
imgcat()
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 126 def imgcat @imgcat ||= which('imgcat') end
output(message)
click to toggle source
# File lib/capybara-screenshot/saver.rb, line 122 def output(message) puts " #{CapybaraScreenshot::Helpers.yellow(message)}" end
which(cmd)
click to toggle source
Cross-platform way of finding an executable in the $PATH.
which('ruby') #=> /usr/bin/ruby
# File lib/capybara-screenshot/saver.rb, line 133 def which(cmd) exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] ENV['PATH'].split(File::PATH_SEPARATOR).each do |path| exts.each { |ext| exe = File.join(path, "#{cmd}#{ext}") return exe if File.executable?(exe) && !File.directory?(exe) } end nil end