doubletake 0.1.0 → 0.2.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 +8 -8
- data/README.md +35 -1
- data/doubletake.gemspec +3 -3
- data/lib/config.rb +2 -1
- data/lib/doubletake/version.rb +1 -1
- data/lib/site_context.rb +30 -26
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjRjNzc1YTI3MWJlNjIwNmM2MzU3OWIzMWU0NWViNDczZTE5YmZkMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGY3NmZlZGRjZTQ1NzBhOWYxZTg5MDc1YTJjNGRjMTljMGViN2ExYQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTg0NzNlMDAxMmMzNTRkNTNjYmM2Zjk5NzJlMjQyMjA1Zjc5YjAxODUyMTNk
|
10
|
+
YmNlNzA1NWVlMTcyYTRlNWIwODlmNGY5YTU5YjBkYWQ3YjJjMTBmZTUwZmRl
|
11
|
+
NGFlYzNmNmMyYzgyNDVlNTI5YzQxN2NkNWMyOWE0NjI3MDUwMDk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MzA3NTg0MzgyMzk1NmY5ZDFmYTkxOWIzZmU5MjBmZWRmZjZlNGVmYWJkZjNm
|
14
|
+
YWM1ZDI5ZGZmM2Y5YmQ2MjFiZjg5YjNhOTBmYjIzMTQxMmFiN2JiN2FhZGMz
|
15
|
+
OGVkM2YyMTJmMTQ4OWFlYzFhNDA0NjlkY2U1YTQ3ZDc2ZTAyMDg=
|
data/README.md
CHANGED
@@ -47,7 +47,39 @@ Use your preferred file editor and edit the config file.
|
|
47
47
|
|
48
48
|
Edit the ignored list to skip URIs or file formats. DoubleTake generates sensible defaults that can be extended.
|
49
49
|
|
50
|
-
|
50
|
+
Testing multiple window resolutions for responsive design is made possible in DoubleTake.
|
51
|
+
By default DoubleTake generated config file has 3 resolutions:
|
52
|
+
|
53
|
+
```
|
54
|
+
SCREEN_RESOLUTION:
|
55
|
+
:desktop:
|
56
|
+
- 1400
|
57
|
+
- 800
|
58
|
+
:tablet:
|
59
|
+
- 640
|
60
|
+
- 480
|
61
|
+
:mobile:
|
62
|
+
- 300
|
63
|
+
- 600
|
64
|
+
```
|
65
|
+
The above configuration has Desktop mode set to 1400x800, tablet to 640x480 and mobile to 300x600. This can be edited and extended
|
66
|
+
to something like this:
|
67
|
+
|
68
|
+
```
|
69
|
+
SCREEN_RESOLUTION:
|
70
|
+
:desktop:
|
71
|
+
- 1024
|
72
|
+
- 800
|
73
|
+
:tablet:
|
74
|
+
- 640
|
75
|
+
- 480
|
76
|
+
:mobile:
|
77
|
+
- 300
|
78
|
+
- 550
|
79
|
+
:iphone6:
|
80
|
+
- 375
|
81
|
+
- 667
|
82
|
+
```
|
51
83
|
|
52
84
|
DoubleTake is cable to authenticate with user credentials provided in the config file. This allows more in-depth scans.
|
53
85
|
|
@@ -135,7 +167,9 @@ Ex: ~/DoubleTake_data/desktop/progress_mysite.yml
|
|
135
167
|
In addition to this progress config file we also need to known the type of the scan that is being resumed i.e, compare / scrape
|
136
168
|
|
137
169
|
To Resume a scan:
|
170
|
+
```
|
138
171
|
$ doubletake resume --type compare --conf ~/DoubleTake_data/desktop/progress_mysite.com.yml
|
172
|
+
```
|
139
173
|
|
140
174
|
|
141
175
|
## Contributing
|
data/doubletake.gemspec
CHANGED
@@ -9,10 +9,10 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Melchi Salins"]
|
10
10
|
spec.email = ["melchisalins@gmail.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{Visual regression testing tool and more
|
13
|
-
spec.homepage = "
|
12
|
+
spec.summary = %q{Visual regression testing tool and more.}
|
13
|
+
spec.homepage = "https://www.linkedin.com/in/melchisalins"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.description = "
|
15
|
+
spec.description = "Visual regression testing tool and more"
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
18
|
spec.bindir = "exe"
|
data/lib/config.rb
CHANGED
@@ -9,12 +9,13 @@ class Configuration
|
|
9
9
|
attr_reader :PASS_VALUE, :PASS_DOM_ID
|
10
10
|
attr_reader :LOGIN_CONFIRM_CHECK, :LOGIN_CONFIRM, :LOGIN
|
11
11
|
attr_reader :URI_THRESHOLD, :IMAGE_THRESHOLD
|
12
|
+
attr_reader :SCREEN_RESOLUTION
|
12
13
|
|
13
14
|
def initialize
|
14
15
|
@stage = ""
|
15
16
|
@prod = ""
|
16
17
|
@ignored = ["ignore_me", "not_important_url_prefix",".css", ".pdf", ".js", ".jpg", ".png", "video/pop", "user/logout", "?", "=", "#"]
|
17
|
-
@SCREEN_RESOLUTION = {:desktop => [1400,800]}
|
18
|
+
@SCREEN_RESOLUTION = {:desktop => [1400,800], :iPadair => [1024,768], :iphone6 => [375,667]}
|
18
19
|
@IMAGE_THRESHOLD = 0
|
19
20
|
@LOGIN = true
|
20
21
|
@LOGIN_URI = 'user/login' # http://example.com/login
|
data/lib/doubletake/version.rb
CHANGED
data/lib/site_context.rb
CHANGED
@@ -88,20 +88,22 @@ class Crawler < SiteContext
|
|
88
88
|
|
89
89
|
def initialize(site, test, base, browser = :firefox)
|
90
90
|
@site = site.to_s
|
91
|
-
|
92
|
-
|
91
|
+
$config.SCREEN_RESOLUTION.keys.each do |key|
|
92
|
+
FileUtils::mkdir_p "#{ENV['HOME']}/DoubleTake_data/#{@site}/#{key}"
|
93
|
+
end
|
94
|
+
puts "* Screenshots are saved in #{ENV['HOME']}/DoubleTake_data/#{@site}"
|
93
95
|
$config.to_be_scraped << test
|
94
96
|
@test_domain_length = test.length
|
95
97
|
puts "Crawler initialized"
|
96
98
|
@driver1 = SiteContext.new
|
97
99
|
@driver1 = @driver1.set_driver(browser)
|
98
100
|
@driver1.get(test)
|
99
|
-
@driver1.manage.window.resize_to(
|
101
|
+
@driver1.manage.window.resize_to($config.SCREEN_RESOLUTION.first[1][0], $config.SCREEN_RESOLUTION.first[1][1]) #First resolution
|
100
102
|
unless $cf == "scrape"
|
101
103
|
@driver2 = SiteContext.new
|
102
104
|
@driver2 = @driver2.set_driver(browser)
|
103
105
|
@driver2.get(base)
|
104
|
-
@driver2.manage.window.resize_to(
|
106
|
+
@driver2.manage.window.resize_to($config.SCREEN_RESOLUTION.first[1][0], $config.SCREEN_RESOLUTION.first[1][1]) #First resolution
|
105
107
|
end
|
106
108
|
end
|
107
109
|
|
@@ -152,7 +154,6 @@ class Crawler < SiteContext
|
|
152
154
|
puts "Good Link: "+link
|
153
155
|
return false
|
154
156
|
end #End of `if`
|
155
|
-
|
156
157
|
end
|
157
158
|
|
158
159
|
def crawl
|
@@ -196,13 +197,12 @@ class Crawler < SiteContext
|
|
196
197
|
prod_link = $config.prod + stage_uri
|
197
198
|
# *****************************************
|
198
199
|
if $cf == "scrape"
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
warning_log.close
|
200
|
+
$config.SCREEN_RESOLUTION.each do |type, res|
|
201
|
+
name = sanitize(stage_uri)
|
202
|
+
@driver1.manage.window.resize_to(res[0], res[1])
|
203
|
+
@driver1.save_screenshot("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_stage.png")
|
204
|
+
end
|
205
|
+
@driver1.manage.window.resize_to($config.SCREEN_RESOLUTION.first[1][0], $config.SCREEN_RESOLUTION.first[1][1])
|
206
206
|
else
|
207
207
|
@driver2.get(prod_link)
|
208
208
|
image_stuff(stage_uri)
|
@@ -213,14 +213,14 @@ class Crawler < SiteContext
|
|
213
213
|
$config.to_be_scraped = $config.to_be_scraped - [nil] # This was issue when .delete() was used which resulted in element replaced by nil
|
214
214
|
$config.to_be_scraped = $config.to_be_scraped - [each_link]
|
215
215
|
$config.to_be_scraped.uniq!
|
216
|
-
File.open("#{ENV['HOME']}/DoubleTake_data/
|
216
|
+
File.open("#{ENV['HOME']}/DoubleTake_data/progress_#{@site}.yml", "w") {|f| f.write($config.to_yaml)}
|
217
217
|
rescue Selenium::WebDriver::Error::StaleElementReferenceError => e
|
218
218
|
puts "Stale element error occured moving to next link: #{stage_uri}"
|
219
219
|
puts e
|
220
220
|
next
|
221
221
|
rescue Exception => e
|
222
222
|
puts "Generic Exception occured"
|
223
|
-
binding.pry
|
223
|
+
#binding.pry
|
224
224
|
puts e.backtrace
|
225
225
|
next
|
226
226
|
end #End of begin
|
@@ -232,17 +232,21 @@ class Crawler < SiteContext
|
|
232
232
|
|
233
233
|
def image_stuff(stage_uri)
|
234
234
|
name = sanitize(stage_uri)
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
235
|
+
$config.SCREEN_RESOLUTION.each do |type, res|
|
236
|
+
@driver1.manage.window.resize_to(res[0], res[1])
|
237
|
+
@driver2.manage.window.resize_to(res[0], res[1])
|
238
|
+
@driver1.save_screenshot("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_stage.png")
|
239
|
+
@driver2.save_screenshot("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_prod.png")
|
240
|
+
# a, b = IO.read("#{ENV['HOME']}/DoubleTake_data/desktop/stage_"+@site+"/"+name+".png")[0x10..0x18].unpack('NN')
|
241
|
+
img1 = ImageList.new("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_stage.png")
|
242
|
+
img2 = ImageList.new("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_prod.png")
|
243
|
+
diff_img, diff_metric = img1[0].compare_channel( img2[0], Magick::MeanSquaredErrorMetric )
|
244
|
+
if diff_metric > $config.IMAGE_THRESHOLD
|
245
|
+
diff_img.write("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/"+name+"_diff.png")
|
246
|
+
else
|
247
|
+
File.delete("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_stage.png")
|
248
|
+
File.delete("#{ENV['HOME']}/DoubleTake_data/#{@site}/#{type}/#{name}_prod.png")
|
249
|
+
end # if diff_metric > $IMAGE_THRESHOLD
|
250
|
+
end
|
247
251
|
end #def image_stuff(image1, image2)
|
248
252
|
end #Class Crawler < SiteContext
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doubletake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Melchi Salins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,7 +106,7 @@ dependencies:
|
|
106
106
|
- - ~>
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: 0.19.1
|
109
|
-
description:
|
109
|
+
description: Visual regression testing tool and more
|
110
110
|
email:
|
111
111
|
- melchisalins@gmail.com
|
112
112
|
executables:
|
@@ -129,7 +129,7 @@ files:
|
|
129
129
|
- lib/doubletake.rb
|
130
130
|
- lib/doubletake/version.rb
|
131
131
|
- lib/site_context.rb
|
132
|
-
homepage:
|
132
|
+
homepage: https://www.linkedin.com/in/melchisalins
|
133
133
|
licenses:
|
134
134
|
- MIT
|
135
135
|
metadata:
|
@@ -154,5 +154,5 @@ rubyforge_project:
|
|
154
154
|
rubygems_version: 2.4.6
|
155
155
|
signing_key:
|
156
156
|
specification_version: 4
|
157
|
-
summary: Visual regression testing tool and more
|
157
|
+
summary: Visual regression testing tool and more.
|
158
158
|
test_files: []
|