capybara-screenshot-diff 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3b1581dfd6dfe2bc40dfcff8a5414839ed9cffd
|
4
|
+
data.tar.gz: f149dcc7655cdc88216d93de719805ba5369cc96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c78deed42053ef6d72df85e3d489b458eac585e363370da2753da56d69cbaded5f04c08e736402aa7bb38bbf5b64e0d7d06c08f7302491c9c77e7a27a2c5cab9
|
7
|
+
data.tar.gz: 15a51febc69814816067a77ba18708e1919e96f286a01794964671a8c55cf38eded0ce35897a0a92b012d7255998d0b34b3ce14e73fb7f0d88f9fe2b1e20ac87
|
data/.rubocop_todo.yml
CHANGED
@@ -126,10 +126,10 @@ module ActionDispatch
|
|
126
126
|
file_name = "#{self.class.screenshot_area_abs}/#{name}.png"
|
127
127
|
|
128
128
|
FileUtils.mkdir_p File.dirname(file_name)
|
129
|
-
|
130
|
-
comparison = Capybara::Screenshot::Diff::ImageCompare.new(committed_file_name, file_name,
|
129
|
+
comparison = Capybara::Screenshot::Diff::ImageCompare.new(file_name,
|
131
130
|
dimensions: Capybara::Screenshot.window_size, color_distance_limit: color_distance_limit,
|
132
131
|
area_size_limit: area_size_limit)
|
132
|
+
checkout_vcs(name, comparison)
|
133
133
|
take_stable_screenshot(comparison)
|
134
134
|
return unless comparison.old_file_exists?
|
135
135
|
(@test_screenshots ||= []) << [caller[0], name, comparison]
|
@@ -142,32 +142,30 @@ module ActionDispatch
|
|
142
142
|
Selenium::WebDriver::Dimension.new(*Capybara::Screenshot.window_size)
|
143
143
|
end
|
144
144
|
|
145
|
-
private def
|
145
|
+
private def checkout_vcs(name, comparison)
|
146
146
|
svn_file_name = "#{self.class.screenshot_area_abs}/.svn/text-base/#{name}.png.svn-base"
|
147
147
|
if File.exist?(svn_file_name)
|
148
148
|
committed_file_name = svn_file_name
|
149
|
+
FileUtils.cp committed_file_name, comparison.old_file_name
|
149
150
|
else
|
150
|
-
svn_info = `svn info #{
|
151
|
+
svn_info = `svn info #{comparison.new_file_name} #{SILENCE_ERRORS}`
|
151
152
|
if svn_info.present?
|
152
153
|
wc_root = svn_info.slice(/(?<=Working Copy Root Path: ).*$/)
|
153
154
|
checksum = svn_info.slice(/(?<=Checksum: ).*$/)
|
154
155
|
if checksum
|
155
156
|
committed_file_name = "#{wc_root}/.svn/pristine/#{checksum[0..1]}/#{checksum}.svn-base"
|
157
|
+
FileUtils.cp committed_file_name, comparison.old_file_name
|
156
158
|
end
|
157
159
|
else
|
158
|
-
|
159
|
-
Capybara::Screenshot::Diff::ImageCompare.annotated_old_file_name(file_name))
|
160
|
+
restore_git_revision(name, comparison.old_file_name)
|
160
161
|
end
|
161
162
|
end
|
162
|
-
committed_file_name
|
163
163
|
end
|
164
164
|
|
165
|
-
private def restore_git_revision(name,
|
166
|
-
|
167
|
-
redirect_target = "#{committed_file_name} #{SILENCE_ERRORS}"
|
165
|
+
private def restore_git_revision(name, target_file_name)
|
166
|
+
redirect_target = "#{target_file_name} #{SILENCE_ERRORS}"
|
168
167
|
`git show HEAD~0:./#{self.class.screenshot_area}/#{name}.png > #{redirect_target}`
|
169
|
-
FileUtils.rm_f(
|
170
|
-
committed_file_name
|
168
|
+
FileUtils.rm_f(target_file_name) unless $CHILD_STATUS == 0
|
171
169
|
end
|
172
170
|
|
173
171
|
IMAGE_WAIT_SCRIPT = <<EOF.freeze
|
@@ -194,35 +192,44 @@ EOF
|
|
194
192
|
end
|
195
193
|
end
|
196
194
|
|
197
|
-
private def take_stable_screenshot(comparison)
|
195
|
+
private def take_stable_screenshot(comparison) # rubocop: disable Metrics/AbcSize, Metrics/MethodLength
|
198
196
|
assert_images_loaded
|
199
197
|
if Capybara::Screenshot.blur_active_element
|
200
|
-
|
198
|
+
active_element =
|
199
|
+
execute_script(<<-JS)
|
200
|
+
ae=document.activeElement
|
201
|
+
if (ae.nodeName == "INPUT" || ae.nodeName == "TEXTAREA"){ae.blur();return ae}
|
202
|
+
return null
|
203
|
+
JS
|
204
|
+
input = page.driver.send :unwrap_script_result, active_element
|
201
205
|
end
|
202
206
|
previous_file_size = comparison.old_file_size
|
203
207
|
screeenshot_started_at = last_image_change_at = Time.now
|
204
208
|
loop do
|
205
209
|
save_screenshot(comparison.new_file_name)
|
206
210
|
|
207
|
-
# TODO(uwe): Remove when chromedriver
|
211
|
+
# TODO(uwe): Remove when chromedriver takes right size screenshots
|
208
212
|
reduce_retina_image_size(comparison.new_file_name)
|
209
213
|
# EMXIF
|
210
214
|
|
211
215
|
break unless Capybara::Screenshot.stability_time_limit
|
212
216
|
break if comparison.quick_equal?
|
213
217
|
|
214
|
-
|
215
|
-
|
216
|
-
|
218
|
+
new_file_size = comparison.new_file_size
|
219
|
+
if previous_file_size
|
220
|
+
if new_file_size == previous_file_size
|
221
|
+
if (Time.now - last_image_change_at) > Capybara::Screenshot.stability_time_limit
|
222
|
+
break
|
223
|
+
end
|
224
|
+
else
|
225
|
+
last_image_change_at = Time.now
|
217
226
|
end
|
218
|
-
else
|
219
|
-
last_image_change_at = Time.now
|
220
|
-
end
|
221
227
|
|
222
|
-
|
223
|
-
|
228
|
+
assert (Time.now - screeenshot_started_at) < Capybara.default_max_wait_time,
|
229
|
+
"Could not get stable screenshot within #{Capybara.default_max_wait_time}s"
|
230
|
+
end
|
224
231
|
|
225
|
-
previous_file_size =
|
232
|
+
previous_file_size = new_file_size
|
226
233
|
comparison.reset
|
227
234
|
end
|
228
235
|
ensure
|
@@ -6,24 +6,17 @@ module Capybara
|
|
6
6
|
class ImageCompare
|
7
7
|
include ChunkyPNG::Color
|
8
8
|
|
9
|
-
attr_reader :annotated_new_file_name, :annotated_old_file_name, :new_file_name
|
9
|
+
attr_reader :annotated_new_file_name, :annotated_old_file_name, :new_file_name,
|
10
|
+
:old_file_name
|
10
11
|
|
11
|
-
def
|
12
|
-
new(*args).different?
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.annotated_old_file_name(new_file_name)
|
16
|
-
"#{new_file_name.chomp('.png')}_0.png~"
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize(old_file_name, new_file_name, dimensions: nil, color_distance_limit: nil,
|
12
|
+
def initialize(new_file_name, dimensions: nil, color_distance_limit: nil,
|
20
13
|
area_size_limit: nil)
|
21
|
-
@old_file_name = old_file_name
|
22
14
|
@new_file_name = new_file_name
|
23
15
|
@color_distance_limit = color_distance_limit
|
24
16
|
@area_size_limit = area_size_limit
|
25
17
|
@dimensions = dimensions
|
26
|
-
@
|
18
|
+
@old_file_name = "#{new_file_name}~"
|
19
|
+
@annotated_old_file_name = "#{new_file_name.chomp('.png')}_0.png~"
|
27
20
|
@annotated_new_file_name = "#{new_file_name.chomp('.png')}_1.png~"
|
28
21
|
reset
|
29
22
|
end
|
@@ -93,7 +86,7 @@ module Capybara
|
|
93
86
|
end
|
94
87
|
|
95
88
|
private def not_different
|
96
|
-
clean_tmp_files
|
89
|
+
clean_tmp_files
|
97
90
|
false
|
98
91
|
end
|
99
92
|
|
@@ -138,9 +131,11 @@ module Capybara
|
|
138
131
|
new_img.save(new_file_name)
|
139
132
|
end
|
140
133
|
|
141
|
-
def clean_tmp_files
|
142
|
-
|
143
|
-
File.delete(
|
134
|
+
def clean_tmp_files
|
135
|
+
FileUtils.cp @old_file_name, @new_file_name
|
136
|
+
File.delete(@old_file_name) if File.exist?(@annotated_old_file_name)
|
137
|
+
File.delete(@annotated_old_file_name) if File.exist?(@annotated_old_file_name)
|
138
|
+
File.delete(@annotated_new_file_name) if File.exist?(@annotated_new_file_name)
|
144
139
|
end
|
145
140
|
|
146
141
|
def load_images(old_file, new_file)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-screenshot-diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uwe Kubosch
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|