wraith 2.6.0 → 2.7.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/{wraith-logo.png → assets/wraith-logo.png} +0 -0
  4. data/lib/wraith/cli.rb +2 -9
  5. data/lib/wraith/folder.rb +5 -1
  6. data/lib/wraith/gallery.rb +11 -1
  7. data/lib/wraith/gallery_template/gallery_template.erb +3 -0
  8. data/lib/wraith/version.rb +1 -1
  9. data/lib/wraith/wraith.rb +1 -1
  10. data/{configs → spec/configs}/test_config--casper.yaml +6 -1
  11. data/{configs/test_config.yaml → spec/configs/test_config--phantom.yaml} +6 -1
  12. data/spec/helpers.rb +6 -2
  13. data/spec/js/global.js +2 -2
  14. data/spec/js/path.js +2 -2
  15. data/spec/thumbnails/test/test_image-1.png +0 -0
  16. data/spec/thumbnails/test/test_image-2.png +0 -0
  17. data/spec/thumbnails/test/test_image-diff.png +0 -0
  18. data/spec/wraith_spec.rb +79 -7
  19. data/templates/README.md +5 -0
  20. data/templates/configs/component.yaml +58 -0
  21. data/templates/configs/multiple_domains.yaml +54 -0
  22. data/templates/configs/spider.yaml +54 -0
  23. data/templates/javascript/README.md +5 -0
  24. data/templates/javascript/_getDimensions.js +7 -0
  25. data/templates/javascript/_phantom__common.js +122 -0
  26. data/templates/javascript/beforeCapture--casper_example.js +5 -0
  27. data/templates/javascript/beforeCapture--phantom_example.js +9 -0
  28. data/templates/javascript/casper.js +59 -0
  29. data/templates/javascript/phantom--nojs.js +6 -0
  30. data/templates/javascript/phantom.js +6 -0
  31. metadata +26 -17
  32. data/configs/component.yaml +0 -47
  33. data/configs/config_nojs.yaml +0 -43
  34. data/configs/custom_height.yaml +0 -42
  35. data/configs/history.yaml +0 -52
  36. data/configs/templates/component.yaml +0 -51
  37. data/configs/templates/config.yaml +0 -43
  38. data/lib/wraith/javascript/beforeCapture.js +0 -5
  39. data/lib/wraith/javascript/casper.js +0 -48
  40. data/lib/wraith/javascript/customHeight.js +0 -99
  41. data/lib/wraith/javascript/nojs.js +0 -85
  42. data/lib/wraith/javascript/snap.js +0 -85
@@ -0,0 +1,5 @@
1
+ These JavaScript files have been provided by Wraith for your benefit, but you are free to edit these or add new JavaScript files if you wish.
2
+
3
+ Files beginning with an underscore should not be referenced directly in your YAML files. They are 'private' modules required by some of the other modules in this directory.
4
+
5
+ The two most important files to be aware of are `casper.js` and `_phantom__common.js`, as these files map Wraith's command line arguments to each respective browser engine.
@@ -0,0 +1,7 @@
1
+ module.exports = function (dimensions) {
2
+ dimensions = /(\d*)x?((\d*))?/i.exec(dimensions);
3
+ return {
4
+ 'viewportWidth': parseInt(dimensions[1]),
5
+ 'viewportHeight': parseInt(dimensions[2] || 1500)
6
+ };
7
+ }
@@ -0,0 +1,122 @@
1
+ module.exports = function (config) {
2
+
3
+ // modules
4
+ var page = require('webpage').create();
5
+
6
+ // config
7
+ var systemArgs = config.systemArgs,
8
+ javascriptEnabled = config.javascriptEnabled;
9
+
10
+ // command line arguments
11
+ var url = systemArgs[1],
12
+ dimensions = require('./_getDimensions.js')(systemArgs[2]),
13
+ image_name = systemArgs[3],
14
+ selector = systemArgs[4],
15
+ globalBeforeCaptureJS = systemArgs[5],
16
+ pathBeforeCaptureJS = systemArgs[6];
17
+
18
+ globalBeforeCaptureJS = globalBeforeCaptureJS === 'false' ? false : globalBeforeCaptureJS;
19
+ pathBeforeCaptureJS = pathBeforeCaptureJS === 'false' ? false : pathBeforeCaptureJS;
20
+
21
+ var current_requests = 0;
22
+ var last_request_timeout;
23
+ var final_timeout;
24
+
25
+ page.viewportSize = { width: dimensions.viewportWidth, height: dimensions.viewportHeight};
26
+ page.settings = { loadImages: true, javascriptEnabled: javascriptEnabled };
27
+
28
+ // If you want to use additional phantomjs commands, place them here
29
+ page.settings.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.17';
30
+
31
+ // You can place custom headers here, example below.
32
+ // page.customHeaders = {
33
+
34
+ // 'X-Candy-OVERRIDE': 'https://api.live.bbc.co.uk/'
35
+
36
+ // };
37
+
38
+ // If you want to set a cookie, just add your details below in the following way.
39
+
40
+ // phantom.addCookie({
41
+ // 'name': 'ckns_policy',
42
+ // 'value': '111',
43
+ // 'domain': '.bbc.co.uk'
44
+ // });
45
+ // phantom.addCookie({
46
+ // 'name': 'locserv',
47
+ // 'value': '1#l1#i=6691484:n=Oxford+Circus:h=e@w1#i=8:p=London@d1#1=l:2=e:3=e:4=2@n1#r=40',
48
+ // 'domain': '.bbc.co.uk'
49
+ // });
50
+
51
+ page.onResourceRequested = function(req) {
52
+ current_requests += 1;
53
+ };
54
+
55
+ page.onResourceReceived = function(res) {
56
+ if (res.stage === 'end') {
57
+ current_requests -= 1;
58
+ debounced_render();
59
+ }
60
+ };
61
+
62
+ page.open(url, function(status) {
63
+ if (status !== 'success') {
64
+ console.log('Error with page ' + url);
65
+ phantom.exit();
66
+ }
67
+ });
68
+
69
+
70
+ function debounced_render() {
71
+ clearTimeout(last_request_timeout);
72
+ clearTimeout(final_timeout);
73
+
74
+ // If there's no more ongoing resource requests, wait for 1 second before
75
+ // rendering, just in case the page kicks off another request
76
+ if (current_requests < 1) {
77
+ clearTimeout(final_timeout);
78
+ last_request_timeout = setTimeout(function() {
79
+
80
+ if (globalBeforeCaptureJS) {
81
+ require(globalBeforeCaptureJS)(page);
82
+ }
83
+ if (pathBeforeCaptureJS) {
84
+ require(pathBeforeCaptureJS)(page);
85
+ }
86
+
87
+ console.log('Snapping ' + url + ' at: ' + dimensions.viewportWidth + 'x' + dimensions.viewportHeight);
88
+ page.clipRect = {
89
+ top: 0,
90
+ left: 0,
91
+ height: dimensions.viewportHeight,
92
+ width: dimensions.viewportWidth
93
+ };
94
+ page.render(image_name);
95
+ phantom.exit();
96
+ }, 1000);
97
+ }
98
+
99
+ // Sometimes, straggling requests never make it back, in which
100
+ // case, timeout after 5 seconds and render the page anyway
101
+ final_timeout = setTimeout(function() {
102
+
103
+ if (globalBeforeCaptureJS) {
104
+ require(globalBeforeCaptureJS)(page);
105
+ }
106
+ if (pathBeforeCaptureJS) {
107
+ require(pathBeforeCaptureJS)(page);
108
+ }
109
+
110
+ console.log('Snapping ' + url + ' at: ' + dimensions.viewportWidth + 'x' + dimensions.viewportHeight);
111
+ page.clipRect = {
112
+ top: 0,
113
+ left: 0,
114
+ height: dimensions.viewportHeight,
115
+ width: dimensions.viewportWidth
116
+ };
117
+ page.render(image_name);
118
+ phantom.exit();
119
+ }, 5000);
120
+ }
121
+
122
+ }
@@ -0,0 +1,5 @@
1
+ module.exports = function (browserEngine) {
2
+ browserEngine.wait(2000, function() {
3
+ browserEngine.click('.ns-panel__hotspot--2');
4
+ });
5
+ }
@@ -0,0 +1,9 @@
1
+ module.exports = function (browserEngine) {
2
+ browserEngine.evaluate(function(){
3
+ var a = document.querySelector('.ns-panel__hotspot--2');
4
+ var e = document.createEvent('MouseEvents');
5
+ e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
6
+ a.dispatchEvent(e);
7
+ waitforload = true;
8
+ });
9
+ }
@@ -0,0 +1,59 @@
1
+ // modules
2
+ var system = require('system'),
3
+ casper = require('casper').create();
4
+
5
+ // command line arguments
6
+ var url = casper.cli.get(0),
7
+ dimensions = requireRelative('_getDimensions.js')(casper.cli.get(1)),
8
+ image_name = casper.cli.get(2),
9
+ selector = casper.cli.get(3),
10
+ globalBeforeCaptureJS = casper.cli.get(4),
11
+ pathBeforeCaptureJS = casper.cli.get(5);
12
+
13
+ // functions
14
+ function requireRelative(file) {
15
+ // PhantomJS will automatically `require` relatively, but CasperJS needs some extra help. Hence this function.
16
+ // 'templates/javascript/casper.js' -> 'templates/javascript'
17
+ var currentFilePath = system.args[3].split('/');
18
+ currentFilePath.pop();
19
+ var fs = require('fs');
20
+ currentFilePath = fs.absolute(currentFilePath.join('/'));
21
+ return require(currentFilePath + '/' + file);
22
+ }
23
+ function snap() {
24
+ if (!selector) {
25
+ this.capture(image_name);
26
+ }
27
+ else {
28
+ this.captureSelector(image_name, selector);
29
+ }
30
+ console.log('Snapping ' + url + ' at: ' + dimensions.viewportWidth + 'x' + dimensions.viewportHeight);
31
+ }
32
+
33
+ // Casper can now do its magic
34
+ casper.start();
35
+ casper.open(url);
36
+ casper.viewport(dimensions.viewportWidth, dimensions.viewportHeight);
37
+ casper.then(function() {
38
+ if (globalBeforeCaptureJS) {
39
+ require('./' + globalBeforeCaptureJS)(this);
40
+ }
41
+ });
42
+ casper.then(function() {
43
+ if (pathBeforeCaptureJS) {
44
+ require('./' + pathBeforeCaptureJS)(this);
45
+ }
46
+ });
47
+ // waits for all images to download before taking screenshots
48
+ // (broken images are a big cause of Wraith failures!)
49
+ // Credit: http://reff.it/8m3HYP
50
+ casper.waitFor(function() {
51
+ return this.evaluate(function() {
52
+ var images = document.getElementsByTagName('img');
53
+ return Array.prototype.every.call(images, function(i) { return i.complete; });
54
+ });
55
+ }, function then () {
56
+ snap.bind(this)();
57
+ });
58
+
59
+ casper.run();
@@ -0,0 +1,6 @@
1
+ var system = require('system');
2
+
3
+ require('./_phantom__common.js')({
4
+ systemArgs: system.args,
5
+ javascriptEnabled: false
6
+ });
@@ -0,0 +1,6 @@
1
+ var system = require('system');
2
+
3
+ require('./_phantom__common.js')({
4
+ systemArgs: system.args,
5
+ javascriptEnabled: true
6
+ });
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wraith
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Blooman
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-08-20 00:00:00.000000000 Z
13
+ date: 2015-10-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: pry
@@ -188,15 +188,8 @@ files:
188
188
  - README.md
189
189
  - Rakefile
190
190
  - assets/invalid.jpg
191
+ - assets/wraith-logo.png
191
192
  - bin/wraith
192
- - configs/component.yaml
193
- - configs/config_nojs.yaml
194
- - configs/custom_height.yaml
195
- - configs/history.yaml
196
- - configs/templates/component.yaml
197
- - configs/templates/config.yaml
198
- - configs/test_config--casper.yaml
199
- - configs/test_config.yaml
200
193
  - lib/wraith.rb
201
194
  - lib/wraith/cli.rb
202
195
  - lib/wraith/compare_images.rb
@@ -204,11 +197,6 @@ files:
204
197
  - lib/wraith/folder.rb
205
198
  - lib/wraith/gallery.rb
206
199
  - lib/wraith/gallery_template/gallery_template.erb
207
- - lib/wraith/javascript/beforeCapture.js
208
- - lib/wraith/javascript/casper.js
209
- - lib/wraith/javascript/customHeight.js
210
- - lib/wraith/javascript/nojs.js
211
- - lib/wraith/javascript/snap.js
212
200
  - lib/wraith/save_images.rb
213
201
  - lib/wraith/spider.rb
214
202
  - lib/wraith/thumbnails.rb
@@ -216,11 +204,27 @@ files:
216
204
  - lib/wraith/wraith.rb
217
205
  - spec/base/global.png
218
206
  - spec/base/path.png
207
+ - spec/configs/test_config--casper.yaml
208
+ - spec/configs/test_config--phantom.yaml
219
209
  - spec/helpers.rb
220
210
  - spec/js/global.js
221
211
  - spec/js/path.js
212
+ - spec/thumbnails/test/test_image-1.png
213
+ - spec/thumbnails/test/test_image-2.png
214
+ - spec/thumbnails/test/test_image-diff.png
222
215
  - spec/wraith_spec.rb
223
- - wraith-logo.png
216
+ - templates/README.md
217
+ - templates/configs/component.yaml
218
+ - templates/configs/multiple_domains.yaml
219
+ - templates/configs/spider.yaml
220
+ - templates/javascript/README.md
221
+ - templates/javascript/_getDimensions.js
222
+ - templates/javascript/_phantom__common.js
223
+ - templates/javascript/beforeCapture--casper_example.js
224
+ - templates/javascript/beforeCapture--phantom_example.js
225
+ - templates/javascript/casper.js
226
+ - templates/javascript/phantom--nojs.js
227
+ - templates/javascript/phantom.js
224
228
  - wraith.gemspec
225
229
  homepage: https://github.com/BBC-News/wraith
226
230
  licenses:
@@ -242,14 +246,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
246
  version: '0'
243
247
  requirements: []
244
248
  rubyforge_project:
245
- rubygems_version: 2.0.3
249
+ rubygems_version: 2.4.8
246
250
  signing_key:
247
251
  specification_version: 4
248
252
  summary: Wraith is a screenshot comparison tool, created by developers at BBC News.
249
253
  test_files:
250
254
  - spec/base/global.png
251
255
  - spec/base/path.png
256
+ - spec/configs/test_config--casper.yaml
257
+ - spec/configs/test_config--phantom.yaml
252
258
  - spec/helpers.rb
253
259
  - spec/js/global.js
254
260
  - spec/js/path.js
261
+ - spec/thumbnails/test/test_image-1.png
262
+ - spec/thumbnails/test/test_image-2.png
263
+ - spec/thumbnails/test/test_image-diff.png
255
264
  - spec/wraith_spec.rb
@@ -1,47 +0,0 @@
1
- #Headless browser option
2
- browser:
3
- phantomjs: "casperjs"
4
- # slimerjs: "slimerjs"
5
-
6
- #If you want to have multiple snapping files, set the file name here
7
- snap_file: "lib/wraith/javascript/casper.js"
8
-
9
- # Type the name of the directory that shots will be stored in
10
- directory: 'shots'
11
-
12
- # Add only 2 domains, key will act as a label
13
- domains:
14
- arabic: "http://www.bbc.com/arabic"
15
- russian: "http://www.bbc.com/russian"
16
-
17
- #Type screen widths below, here are a couple of examples
18
- screen_widths:
19
- - 320
20
- - 600
21
- - 768
22
- - 1024
23
- - 1280
24
-
25
- #Type page URL paths below, here are a couple of examples
26
- paths:
27
- brand:
28
- path: /
29
- selector: '.site-brand'
30
-
31
- #Amount of fuzz ImageMagick will use
32
- fuzz: '20%'
33
-
34
- #Set the filename of the spider file to use, if not specified it will fallback to spider.txt
35
- # spider_file: bbc_co_uk_spider.txt
36
-
37
- #Set the number of days to keep the site spider file
38
- spider_days:
39
- - 10
40
-
41
- #Choose how results are displayed, by default alphanumeric. Different screen widths are always grouped.
42
- #alphanumeric - all paths (with, and without, a difference) are shown, sorted by path
43
- #diffs_first - all paths (with, and without, a difference) are shown, sorted by difference size (largest first)
44
- #diffs_only - only paths with a difference are shown, sorted by difference size (largest first)
45
- mode: diffs_first
46
-
47
- threshold: 15
@@ -1,43 +0,0 @@
1
- #Headless browser option
2
- browser:
3
- phantomjs: "phantomjs"
4
- # slimerjs: "slimerjs"
5
-
6
- #If you want to have multiple snapping files, set the file name here
7
- snap_file: "lib/wraith/javascript/nojs.js"
8
-
9
- # Type the name of the directory that shots will be stored in
10
- directory: 'shots_nojs'
11
-
12
- # Add only 2 domains, key will act as a label
13
- domains:
14
- arabic: "http://www.bbc.com/arabic"
15
- russian: "http://www.bbc.com/russian"
16
-
17
- #Type screen widths below, here are a couple of examples
18
- screen_widths:
19
- - 320
20
- - 600
21
- - 768
22
- - 1024
23
- - 1280
24
-
25
- #Type page URL paths below, here are a couple of examples
26
- paths:
27
- home: /
28
- uk_index: /uk
29
-
30
- #Amount of fuzz ImageMagick will use
31
- fuzz: '20%'
32
-
33
- #Set the number of days to keep the site spider file
34
- spider_days:
35
- - 10
36
-
37
- #A list of URLs to skip when spidering. Ruby regular expressions can be
38
- #used, if prefixed with !ruby/regexp as defined in the YAML Cookbook
39
- #http://www.yaml.org/YAML_for_ruby.html#regexps
40
- #
41
- # spider_skips:
42
- # - /foo/bar.html # Matches /foo/bar.html explcitly
43
- # - !ruby/regexp /^\/baz\// # Matches any URLs that start with /baz
@@ -1,42 +0,0 @@
1
- #Headless browser option
2
- browser:
3
- phantomjs: "phantomjs"
4
- # slimerjs: "slimerjs"
5
-
6
- #If you want to have multiple snapping files, set the file name here
7
- snap_file: "lib/wraith/javascript/customHeight.js"
8
-
9
- # Type the name of the directory that shots will be stored in
10
- directory: 'shots'
11
-
12
- # Add only 2 domains, key will act as a label
13
- domains:
14
- arabic: "http://www.bbc.com/arabic"
15
- russian: "http://www.bbc.com/russian"
16
-
17
- #Type screen widths below, here are a couple of examples
18
- screen_widths:
19
- # - widthxheight
20
- - 480x320
21
- - 400x600
22
- - 600x768
23
- - 800x1024
24
- - 720x1280
25
-
26
- #Type page URL paths below, here are a couple of examples
27
- paths:
28
- home: /
29
- uk_index: /uk
30
-
31
- #Amount of fuzz ImageMagick will use
32
- fuzz: '20%'
33
-
34
- #Set the number of days to keep the site spider file
35
- spider_days:
36
- - 10
37
-
38
- #Choose how results are displayed, by default alphanumeric. Different screen widths are always grouped.
39
- #alphanumeric - all paths (with, and without, a difference) are shown, sorted by path
40
- #diffs_first - all paths (with, and without, a difference) are shown, sorted by difference size (largest first)
41
- #diffs_only - only paths with a difference are shown, sorted by difference size (largest first)
42
- #mode: diffs_first