lineup 0.2.1 → 0.3.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 +4 -4
- data/Gemfile.lock +29 -29
- data/README.md +2 -0
- data/doc/lineup.png +0 -0
- data/doc/lineup_mini.png +0 -0
- data/lib/controller/browser.rb +8 -2
- data/lib/lineup/version.rb +2 -2
- data/lib/lineup.rb +31 -4
- data/tests/rspec/lineup_spec.rb +72 -25
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89ea9b6e95a25a526e1bb6317ec204a8518d4e4d
|
4
|
+
data.tar.gz: 01f7795b66bb5b652c0f01925307b5fa6af6ea2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 774b8f2777cd26e9609875e34a29336dcda9a5c254e3c78acf153a48d320b0a0587d2332c15090bdb8be10ed2daccec3c848f1fed0cbd8ccc1b662208aa5a5fb
|
7
|
+
data.tar.gz: bfd830aa1e580998ba50c87bfbea26004a76202b97e46418607de0358bb22b52827bba433ef5d3af474ce3d52f785bc447b882d4b1564b345415cb1fe7d2d5c3
|
data/Gemfile.lock
CHANGED
@@ -2,46 +2,46 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
lineup (0.2.1)
|
5
|
-
chunky_png (
|
6
|
-
dimensions (
|
7
|
-
headless (
|
8
|
-
oily_png (
|
9
|
-
pxdoppelganger (
|
5
|
+
chunky_png (~> 1.3)
|
6
|
+
dimensions (~> 1.3)
|
7
|
+
headless (~> 0.1)
|
8
|
+
oily_png (~> 1.2)
|
9
|
+
pxdoppelganger (~> 0.1)
|
10
10
|
rspec (~> 3.2)
|
11
|
-
selenium-webdriver (
|
12
|
-
watir (
|
13
|
-
watir-webdriver (
|
11
|
+
selenium-webdriver (~> 2.46)
|
12
|
+
watir (~> 5.0)
|
13
|
+
watir-webdriver (~> 0.8)
|
14
14
|
|
15
15
|
GEM
|
16
16
|
remote: https://rubygems.org/
|
17
17
|
specs:
|
18
|
-
childprocess (0.5.
|
18
|
+
childprocess (0.5.9)
|
19
19
|
ffi (~> 1.0, >= 1.0.11)
|
20
|
-
chunky_png (1.3.
|
20
|
+
chunky_png (1.3.5)
|
21
21
|
commonwatir (4.0.0)
|
22
22
|
diff-lcs (1.2.5)
|
23
23
|
dimensions (1.3.0)
|
24
|
-
ffi (1.9.
|
25
|
-
headless (
|
26
|
-
multi_json (1.11.
|
24
|
+
ffi (1.9.10)
|
25
|
+
headless (0.3.1)
|
26
|
+
multi_json (1.11.2)
|
27
27
|
oily_png (1.2.0)
|
28
28
|
chunky_png (~> 1.3.1)
|
29
29
|
pxdoppelganger (0.1.1)
|
30
|
-
rspec (3.
|
31
|
-
rspec-core (~> 3.
|
32
|
-
rspec-expectations (~> 3.
|
33
|
-
rspec-mocks (~> 3.
|
34
|
-
rspec-core (3.2
|
35
|
-
rspec-support (~> 3.
|
36
|
-
rspec-expectations (3.
|
30
|
+
rspec (3.4.0)
|
31
|
+
rspec-core (~> 3.4.0)
|
32
|
+
rspec-expectations (~> 3.4.0)
|
33
|
+
rspec-mocks (~> 3.4.0)
|
34
|
+
rspec-core (3.4.2)
|
35
|
+
rspec-support (~> 3.4.0)
|
36
|
+
rspec-expectations (3.4.0)
|
37
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
38
|
-
rspec-support (~> 3.
|
39
|
-
rspec-mocks (3.
|
38
|
+
rspec-support (~> 3.4.0)
|
39
|
+
rspec-mocks (3.4.1)
|
40
40
|
diff-lcs (>= 1.2.0, < 2.0)
|
41
|
-
rspec-support (~> 3.
|
42
|
-
rspec-support (3.
|
41
|
+
rspec-support (~> 3.4.0)
|
42
|
+
rspec-support (3.4.1)
|
43
43
|
rubyzip (1.1.7)
|
44
|
-
selenium-webdriver (2.
|
44
|
+
selenium-webdriver (2.50.0)
|
45
45
|
childprocess (~> 0.5)
|
46
46
|
multi_json (~> 1.0)
|
47
47
|
rubyzip (~> 1.0)
|
@@ -49,9 +49,9 @@ GEM
|
|
49
49
|
watir (5.0.0)
|
50
50
|
commonwatir (~> 4)
|
51
51
|
watir-webdriver
|
52
|
-
watir-webdriver (0.
|
53
|
-
selenium-webdriver (>= 2.
|
54
|
-
websocket (1.2.
|
52
|
+
watir-webdriver (0.9.1)
|
53
|
+
selenium-webdriver (>= 2.46.2)
|
54
|
+
websocket (1.2.2)
|
55
55
|
|
56
56
|
PLATFORMS
|
57
57
|
ruby
|
@@ -68,4 +68,4 @@ DEPENDENCIES
|
|
68
68
|
watir-webdriver
|
69
69
|
|
70
70
|
BUNDLED WITH
|
71
|
-
1.
|
71
|
+
1.11.2
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Lineup
|
2
2
|
|
3
|
+

|
4
|
+
|
3
5
|
Lineup is doing automated testing of webpage designs, eg. in continious delivery.
|
4
6
|
If you push new code to production, you can evaluate the design of your page compared to a defined base design and
|
5
7
|
get an analysis about the difference of the designs:
|
data/doc/lineup.png
ADDED
Binary file
|
data/doc/lineup_mini.png
ADDED
Binary file
|
data/lib/controller/browser.rb
CHANGED
@@ -7,7 +7,7 @@ require_relative '../helper'
|
|
7
7
|
|
8
8
|
class Browser
|
9
9
|
|
10
|
-
def initialize(baseurl, urls, resolutions, path, headless, wait)
|
10
|
+
def initialize(baseurl, urls, resolutions, path, headless, wait, cookie = false)
|
11
11
|
@absolute_image_path = path
|
12
12
|
FileUtils.mkdir_p @absolute_image_path
|
13
13
|
@baseurl = baseurl
|
@@ -15,6 +15,7 @@ class Browser
|
|
15
15
|
@resolutions = resolutions
|
16
16
|
@headless = headless
|
17
17
|
@wait = wait
|
18
|
+
@cookie = cookie
|
18
19
|
end
|
19
20
|
|
20
21
|
def record(version)
|
@@ -50,9 +51,14 @@ class Browser
|
|
50
51
|
def screenshot_recorder(width, url, version)
|
51
52
|
filename = Helper.filename(@absolute_image_path, url, width, version)
|
52
53
|
@browser.driver.manage.window.resize_to(width, 1000)
|
53
|
-
|
54
|
+
|
54
55
|
url = Helper.url(@baseurl, url)
|
55
56
|
@browser.goto url
|
57
|
+
if @cookie
|
58
|
+
@browser.cookies.clear
|
59
|
+
@browser.cookies.add(@cookie[:name], @cookie[:value], domain: @cookie[:domain], path: @cookie[:path], expires: Time.now + 7200, secure: @cookie[:secure])
|
60
|
+
@browser.goto url
|
61
|
+
end
|
56
62
|
sleep @wait if @wait
|
57
63
|
@browser.screenshot.save( File.expand_path(filename))
|
58
64
|
end
|
data/lib/lineup/version.rb
CHANGED
data/lib/lineup.rb
CHANGED
@@ -173,6 +173,34 @@ module Lineup
|
|
173
173
|
end
|
174
174
|
|
175
175
|
|
176
|
+
def cookie_for_experiment(cookie)
|
177
|
+
|
178
|
+
# a hash for a cookie can be set here. this is optional.
|
179
|
+
#
|
180
|
+
# e.g {name: 'experiment', value: 'experiment_value', domain: 'domain.com', path: '/', expires: <Time>, secure: false}
|
181
|
+
#
|
182
|
+
# if it is not nil it has to be an array:
|
183
|
+
if cookie
|
184
|
+
# generate :symbol => "value" hash map from "symbol" => "value"
|
185
|
+
cookie = cookie.inject({}){|element,(symbol,value)| element[symbol.to_sym] = value; element}
|
186
|
+
|
187
|
+
#Validation
|
188
|
+
(raise "Cookie must be a hash of format
|
189
|
+
{name: 'experiment', value: 'experiment_value', domain: 'domain.com', path: '/', expires: <Time>, secure: false}
|
190
|
+
" unless cookie.is_a? Hash)
|
191
|
+
|
192
|
+
raise "cookie must have value for :name" unless (cookie[:name]).is_a? String
|
193
|
+
raise "cookie must have value for :value" unless (cookie[:value]).is_a? String
|
194
|
+
raise "cookie must have value for :domain" unless (cookie[:domain]).is_a? String
|
195
|
+
raise "cookie must have value for :path" unless (cookie[:path]).is_a? String
|
196
|
+
raise "cookie must have value for :secure" if (cookie[:secure]) == nil
|
197
|
+
end
|
198
|
+
|
199
|
+
# assign the variable
|
200
|
+
|
201
|
+
@cookie_for_experiment = cookie
|
202
|
+
end
|
203
|
+
|
176
204
|
|
177
205
|
def wait_for_asynchron_pages(wait)
|
178
206
|
|
@@ -190,8 +218,6 @@ module Lineup
|
|
190
218
|
@wait_for_asynchron_pages = wait
|
191
219
|
end
|
192
220
|
|
193
|
-
|
194
|
-
|
195
221
|
def load_json_config(path)
|
196
222
|
|
197
223
|
# loads all possible configs from a json file.
|
@@ -209,11 +235,12 @@ module Lineup
|
|
209
235
|
use_phantomjs(configuration["use_phantomjs"])
|
210
236
|
difference_path(configuration["difference_path"])
|
211
237
|
wait_for_asynchron_pages(configuration["wait_for_asynchron_pages"])
|
238
|
+
cookie_for_experiment(configuration["cookie_for_experiment"])
|
212
239
|
|
213
240
|
# the method calls set the variables for the parameters, we return an array with all of them.
|
214
241
|
# for the example above it is:
|
215
242
|
# [["/multimedia", "/sport"], [600, 800, 1200], "~/images/", true, "#/images/diff"]
|
216
|
-
[@urls, @resolutions, @screenshots_path, @headless, @difference_path, @wait_for_asynchron_pages]
|
243
|
+
[@urls, @resolutions, @screenshots_path, @headless, @difference_path, @wait_for_asynchron_pages, @cookie_for_experiment]
|
217
244
|
end
|
218
245
|
|
219
246
|
|
@@ -230,7 +257,7 @@ module Lineup
|
|
230
257
|
# and saves the screenshot in the file
|
231
258
|
# @screenshot_path
|
232
259
|
|
233
|
-
browser = Browser.new(@baseurl, @urls, @resolutions, @screenshots_path, @headless, @wait_for_asynchron_pages)
|
260
|
+
browser = Browser.new(@baseurl, @urls, @resolutions, @screenshots_path, @headless, @wait_for_asynchron_pages, @cookie_for_experiment)
|
234
261
|
|
235
262
|
# the only argument missing is if this is the "base" or "new" screenshot, this can be
|
236
263
|
# passed as an argument. The value does not need to be "base" or "new", but can be anything
|
data/tests/rspec/lineup_spec.rb
CHANGED
@@ -6,7 +6,7 @@ require_relative '../../lib/lineup'
|
|
6
6
|
|
7
7
|
describe '#screeshot_recorder' do
|
8
8
|
|
9
|
-
BASE_URL = 'https://www.
|
9
|
+
BASE_URL = 'https://www.google.de/'
|
10
10
|
SCREENSHOTS = "#{Dir.pwd}/screenshots/"
|
11
11
|
|
12
12
|
after(:each) { FileUtils.rmtree SCREENSHOTS }
|
@@ -15,7 +15,13 @@ describe '#screeshot_recorder' do
|
|
15
15
|
# Given
|
16
16
|
file = "#{Dir.pwd}/test_configuration.json"
|
17
17
|
FileUtils.rm file if (File.exists? file)
|
18
|
-
json = '{"urls":"page1, page2",
|
18
|
+
json = '{"urls":"page1, page2",
|
19
|
+
"resolutions":"13,42",
|
20
|
+
"filepath_for_images":"some/path",
|
21
|
+
"use_phantomjs":true,
|
22
|
+
"difference_path":"some/difference/image/path",
|
23
|
+
"wait_for_asynchron_pages":5
|
24
|
+
}'
|
19
25
|
save_json(json, file)
|
20
26
|
|
21
27
|
# When
|
@@ -24,7 +30,7 @@ describe '#screeshot_recorder' do
|
|
24
30
|
# Then
|
25
31
|
expect(
|
26
32
|
lineup.load_json_config(file)
|
27
|
-
).to eq([['page1', 'page2'], [13,42], 'some/path', true, 'some/difference/image/path', 5])
|
33
|
+
).to eq([['page1', 'page2'], [13,42], 'some/path', true, 'some/difference/image/path', 5, nil])
|
28
34
|
|
29
35
|
# cleanup:
|
30
36
|
FileUtils.rm file if (File.exists? file)
|
@@ -54,7 +60,7 @@ describe '#screeshot_recorder' do
|
|
54
60
|
|
55
61
|
it 'takes a screenshot a desired resolution' do
|
56
62
|
# Given
|
57
|
-
width = '
|
63
|
+
width = '700'
|
58
64
|
lineup = Lineup::Screenshot.new(BASE_URL)
|
59
65
|
|
60
66
|
# When
|
@@ -74,7 +80,7 @@ describe '#screeshot_recorder' do
|
|
74
80
|
|
75
81
|
it 'takes screenshots of different pages, if specified' do
|
76
82
|
# Given
|
77
|
-
urls = '/,
|
83
|
+
urls = '/, flights'
|
78
84
|
lineup = Lineup::Screenshot.new(BASE_URL)
|
79
85
|
lineup.resolutions('1180')
|
80
86
|
lineup.urls(urls)
|
@@ -88,7 +94,7 @@ describe '#screeshot_recorder' do
|
|
88
94
|
).to be(true)
|
89
95
|
|
90
96
|
expect(
|
91
|
-
File.exist? ("#{Dir.pwd}/screenshots/
|
97
|
+
File.exist? ("#{Dir.pwd}/screenshots/flights_1180_base.png")
|
92
98
|
).to be(true)
|
93
99
|
|
94
100
|
end
|
@@ -106,14 +112,22 @@ describe '#screeshot_recorder' do
|
|
106
112
|
|
107
113
|
# Then
|
108
114
|
}.to raise_error ArgumentError
|
109
|
-
|
110
115
|
end
|
111
116
|
|
112
117
|
it 'compares a base and a new screenshot and detects no difference if images are the same' do
|
113
118
|
# Given
|
114
119
|
lineup = Lineup::Screenshot.new(BASE_URL)
|
115
|
-
lineup.urls('/
|
120
|
+
lineup.urls('/')
|
116
121
|
lineup.resolutions('400')
|
122
|
+
lineup.wait_for_asynchron_pages(5)
|
123
|
+
lineup.use_phantomjs(true)
|
124
|
+
cookie = {"name" => "CONSENT",
|
125
|
+
"value" => "YES+DE.de+V7",
|
126
|
+
"domain" => ".google.de",
|
127
|
+
"path" => "/",
|
128
|
+
"secure" => false}
|
129
|
+
lineup.cookie_for_experiment(cookie)
|
130
|
+
|
117
131
|
lineup.record_screenshot('base')
|
118
132
|
lineup.record_screenshot('new')
|
119
133
|
|
@@ -126,11 +140,47 @@ describe '#screeshot_recorder' do
|
|
126
140
|
|
127
141
|
end
|
128
142
|
|
143
|
+
it 'compares a base and a new screenshot when loading a json config and setting a cookie' do
|
144
|
+
# Given
|
145
|
+
file = "#{Dir.pwd}/test_configuration.json"
|
146
|
+
FileUtils.rm file if (File.exists? file)
|
147
|
+
json = '{"urls":"page1, page2",
|
148
|
+
"resolutions":"13,42",
|
149
|
+
"filepath_for_images":"some/path",
|
150
|
+
"use_phantomjs":true,
|
151
|
+
"difference_path":"some/difference/image/path",
|
152
|
+
"wait_for_asynchron_pages":5,
|
153
|
+
"cookie_for_experiment":{
|
154
|
+
"name":"CONSENT",
|
155
|
+
"value":"YES+DE.de+V7",
|
156
|
+
"domain":".google.de",
|
157
|
+
"path":"/",
|
158
|
+
"secure":false
|
159
|
+
}
|
160
|
+
}'
|
161
|
+
save_json(json, file)
|
162
|
+
lineup = Lineup::Screenshot.new(BASE_URL)
|
163
|
+
lineup.load_json_config(file)
|
164
|
+
|
165
|
+
lineup.record_screenshot('base')
|
166
|
+
lineup.record_screenshot('new')
|
167
|
+
|
168
|
+
expect(
|
169
|
+
# When
|
170
|
+
lineup.compare('base', 'new')
|
171
|
+
|
172
|
+
# Then
|
173
|
+
).to eq([])
|
174
|
+
|
175
|
+
# cleanup:
|
176
|
+
FileUtils.rm file if (File.exists? file)
|
177
|
+
end
|
178
|
+
|
129
179
|
it 'compares a base and a new screenshot and returns the difference if the images are NOT the same as json log' do
|
130
180
|
# Given
|
131
|
-
width = '
|
132
|
-
base_site = '
|
133
|
-
new_site = '
|
181
|
+
width = '800'
|
182
|
+
base_site = '?q=test'
|
183
|
+
new_site = '?q=somethingelse'
|
134
184
|
json_path = "#{Dir.pwd}"
|
135
185
|
json_file = "#{json_path}/log.json"
|
136
186
|
|
@@ -152,41 +202,38 @@ describe '#screeshot_recorder' do
|
|
152
202
|
# the output will be similar to the values here:
|
153
203
|
# [
|
154
204
|
# {
|
155
|
-
# :url => '
|
156
|
-
# :width =>
|
205
|
+
# :url => 'translate',
|
206
|
+
# :width => 800,
|
157
207
|
# :difference => 0.7340442722738748,
|
158
|
-
# :base_file => '/home/myname/lineup/tests/respec/screenshots/
|
159
|
-
# :new_file => '/home/myname/lineup/tests/respec/screenshots/
|
160
|
-
# :diff_file => '/home/myname/lineup/tests/rspec/screenshots/
|
208
|
+
# :base_file => '/home/myname/lineup/tests/respec/screenshots/translate_600_base.png'
|
209
|
+
# :new_file => '/home/myname/lineup/tests/respec/screenshots/translate_600_new.png'
|
210
|
+
# :diff_file => '/home/myname/lineup/tests/rspec/screenshots/translate_600_DIFFERENCE.png'
|
161
211
|
# }
|
162
212
|
# ]
|
163
213
|
#
|
164
214
|
expect(
|
165
215
|
(lineup.compare('base', 'new').first)[:url]
|
166
|
-
).to eq('
|
216
|
+
).to eq('?q=somethingelse')
|
167
217
|
# And
|
168
218
|
expect(
|
169
219
|
(lineup.compare('base', 'new').first)[:width]
|
170
|
-
).to eq(
|
220
|
+
).to eq(800)
|
171
221
|
# And
|
172
222
|
result = (lineup.compare('base', 'new').first)[:difference]
|
173
223
|
expect(
|
174
224
|
result
|
175
|
-
).to
|
176
|
-
# 15-20% of pixel works toady (12.3 on 2015/09) for the difference between sport and multimedia page of OTTO.de,
|
177
|
-
# but the pages may some day look more or less alike, then these values can be changed
|
178
|
-
# And
|
225
|
+
).to be > 0 # 'compare' returns the difference of pixel between the screenshots in %
|
179
226
|
expect(
|
180
227
|
(lineup.compare('base', 'new').first)[:base_file]
|
181
|
-
).to include("/lineup/tests/rspec/screenshots
|
228
|
+
).to include("/lineup/tests/rspec/screenshots/?q=somethingelse_#{width}_base.png")
|
182
229
|
# And
|
183
230
|
expect(
|
184
231
|
(lineup.compare('base', 'new').first)[:new_file]
|
185
|
-
).to include("/lineup/tests/rspec/screenshots
|
232
|
+
).to include("/lineup/tests/rspec/screenshots/?q=somethingelse_#{width}_new.png")
|
186
233
|
# And
|
187
234
|
expect(
|
188
235
|
(lineup.compare('base', 'new').first)[:difference_file]
|
189
|
-
).to include("/lineup/tests/rspec/screenshots
|
236
|
+
).to include("/lineup/tests/rspec/screenshots/?q=somethingelse_#{width}_DIFFERENCE.png")
|
190
237
|
|
191
238
|
# And When
|
192
239
|
lineup.save_json(json_path)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lineup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Finn
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-02-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -151,6 +151,8 @@ files:
|
|
151
151
|
- README.md
|
152
152
|
- bin/lineup
|
153
153
|
- doc/example.png
|
154
|
+
- doc/lineup.png
|
155
|
+
- doc/lineup_mini.png
|
154
156
|
- lib/controller/browser.rb
|
155
157
|
- lib/controller/comparer.rb
|
156
158
|
- lib/helper.rb
|