Module: Capybara::Screenshot::Diff::TestMethods
- Includes:
- Stabilization, Vcs
- Defined in:
- lib/capybara/screenshot/diff/test_methods.rb
Constant Summary
Constants included
from Vcs
Vcs::SILENCE_ERRORS
Stabilization::IMAGE_WAIT_SCRIPT
Constants included
from Os
Os::ON_LINUX, Os::ON_MAC, Os::ON_WINDOWS
Instance Method Summary
collapse
Methods included from Vcs
#checkout_vcs, #restore_git_revision
#take_stable_screenshot
Methods included from Os
#os_name
Instance Method Details
#assert_image_not_changed(caller, name, comparison) ⇒ Object
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 100
def assert_image_not_changed(caller, name, comparison)
return unless comparison.different?
max_color_distance = if RUBY_VERSION >= '2.4'
comparison.max_color_distance.ceil(1)
else
comparison.max_color_distance.ceil
end
max_shift_distance = comparison.max_shift_distance
"Screenshot does not match for '#{name}' (area: #{comparison.size}px #{comparison.dimensions}" \
", max_color_distance: #{max_color_distance}" \
"#{", max_shift_distance: #{max_shift_distance}" if max_shift_distance})\n" \
"#{comparison.new_file_name}\n#{comparison.annotated_old_file_name}\n" \
"#{comparison.annotated_new_file_name}\n" \
"at #{caller}"
end
|
#current_capybara_driver_class ⇒ Object
42
43
44
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 42
def current_capybara_driver_class
Capybara.drivers[Capybara.current_driver].call({}).class
end
|
#full_name(name) ⇒ Object
34
35
36
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 34
def full_name(name)
File.join group_parts.<<(name).map(&:to_s)
end
|
#group_parts ⇒ Object
27
28
29
30
31
32
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 27
def group_parts
parts = []
parts << @screenshot_section if @screenshot_section.present?
parts << @screenshot_group if @screenshot_group.present?
parts
end
|
#initialize ⇒ Object
18
19
20
21
22
23
24
25
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 18
def initialize(*)
super
@screenshot_counter = nil
@screenshot_group = nil
@screenshot_section = nil
@test_screenshot_errors = nil
@test_screenshots = nil
end
|
#poltergeist? ⇒ Boolean
50
51
52
53
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 50
def poltergeist?
return false unless defined?(Capybara::Poltergeist::Driver)
current_capybara_driver_class <= Capybara::Poltergeist::Driver
end
|
#screenshot(name, color_distance_limit: Diff.color_distance_limit, shift_distance_limit: Diff.shift_distance_limit, area_size_limit: Diff.area_size_limit) ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 66
def screenshot(name, color_distance_limit: Diff.color_distance_limit,
shift_distance_limit: Diff.shift_distance_limit, area_size_limit: Diff.area_size_limit)
return unless Screenshot.active?
return if window_size_is_wrong?
if @screenshot_counter
name = "#{format('%02i', @screenshot_counter)}_#{name}"
@screenshot_counter += 1
end
name = full_name(name)
file_name = "#{Screenshot.screenshot_area_abs}/#{name}.png"
FileUtils.mkdir_p File.dirname(file_name)
comparison = ImageCompare.new(file_name,
dimensions: Screenshot.window_size, color_distance_limit: color_distance_limit,
area_size_limit: area_size_limit)
checkout_vcs(name, comparison)
take_stable_screenshot(comparison, color_distance_limit: color_distance_limit,
shift_distance_limit: shift_distance_limit,
area_size_limit: area_size_limit)
return unless comparison.old_file_exists?
(@test_screenshots ||= []) << [caller(1..1).first, name, comparison]
end
|
#screenshot_dir ⇒ Object
38
39
40
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 38
def screenshot_dir
File.join [Screenshot.screenshot_area] + group_parts
end
|
#screenshot_group(name) ⇒ Object
59
60
61
62
63
64
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 59
def screenshot_group(name)
@screenshot_group = name.to_s
@screenshot_counter = 0
return unless Screenshot.active? && name.present?
FileUtils.rm_rf screenshot_dir
end
|
#screenshot_section(name) ⇒ Object
55
56
57
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 55
def screenshot_section(name)
@screenshot_section = name.to_s
end
|
#selenium? ⇒ Boolean
46
47
48
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 46
def selenium?
current_capybara_driver_class <= Capybara::Selenium::Driver
end
|
#window_size_is_wrong? ⇒ Boolean
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 89
def window_size_is_wrong?
selenium? && Screenshot.window_size &&
page.driver.browser.manage.window.size.width &&
page.driver.browser.manage.window.size !=
::Selenium::WebDriver::Dimension.new(*Screenshot.window_size)
end
|