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::HIDE_CARET_SCRIPT, 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
#notice_how_to_avoid_this, #take_stable_screenshot
Methods included from Os
#os_name
Instance Method Details
#assert_image_not_changed(caller, name, comparison) ⇒ Object
122
123
124
125
126
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 122
def assert_image_not_changed(caller, name, comparison)
return unless comparison.different?
"Screenshot does not match for '#{name}' #{comparison.error_message}\nat #{caller}"
end
|
#current_capybara_driver_class ⇒ Object
44
45
46
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 44
def current_capybara_driver_class
Capybara.current_session.driver.class
end
|
#full_name(name) ⇒ Object
36
37
38
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 36
def full_name(name)
File.join group_parts.<<(name).map(&:to_s)
end
|
#group_parts ⇒ Object
29
30
31
32
33
34
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 29
def group_parts
parts = []
parts << @screenshot_section if @screenshot_section.present?
parts << @screenshot_group if @screenshot_group.present?
parts
end
|
#initialize ⇒ Object
20
21
22
23
24
25
26
27
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 20
def initialize(*)
super
@screenshot_counter = nil
@screenshot_group = nil
@screenshot_section = nil
@test_screenshot_errors = nil
@test_screenshots = nil
end
|
#screenshot(name, stability_time_limit: Screenshot.stability_time_limit, wait: Capybara.default_max_wait_time, **driver_options) ⇒ Boolean
Returns wether a screenshot was taken.
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 65
def screenshot(
name,
stability_time_limit: Screenshot.stability_time_limit,
wait: Capybara.default_max_wait_time,
**driver_options
)
return false unless Screenshot.active?
return false if window_size_is_wrong?
driver_options = {
area_size_limit: Diff.area_size_limit,
color_distance_limit: Diff.color_distance_limit,
driver: Diff.driver,
shift_distance_limit: Diff.shift_distance_limit,
skip_area: Diff.skip_area,
tolerance: Diff.tolerance
}.merge(driver_options)
if driver_options[:skip_area]
driver_options[:skip_area] = driver_options[:skip_area].compact.flatten&.each_cons(4)&.to_a
end
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, **driver_options)
checkout_vcs(name, comparison)
begin
blurred_input = prepare_page_for_screenshot(timeout: wait)
if stability_time_limit
take_stable_screenshot(comparison, stability_time_limit: stability_time_limit, wait: wait)
else
take_right_size_screenshot(comparison)
end
ensure
blurred_input&.click
end
return false unless comparison.old_file_exists?
(@test_screenshots ||= []) << [caller(1..1).first, name, comparison]
true
end
|
#screenshot_dir ⇒ Object
40
41
42
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 40
def screenshot_dir
File.join [Screenshot.screenshot_area] + group_parts
end
|
#screenshot_group(name) ⇒ Object
56
57
58
59
60
61
62
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 56
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
52
53
54
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 52
def screenshot_section(name)
@screenshot_section = name.to_s
end
|
#selenium? ⇒ Boolean
48
49
50
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 48
def selenium?
current_capybara_driver_class <= Capybara::Selenium::Driver
end
|
#window_size_is_wrong? ⇒ Boolean
116
117
118
119
120
|
# File 'lib/capybara/screenshot/diff/test_methods.rb', line 116
def window_size_is_wrong?
selenium? && Screenshot.window_size &&
page.driver.browser.manage.window.size !=
::Selenium::WebDriver::Dimension.new(*Screenshot.window_size)
end
|