goggles 0.1.4 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +29 -0
- data/README.md +111 -60
- data/goggles.gemspec +3 -5
- data/lib/goggles.rb +15 -68
- data/lib/goggles/comparison.rb +67 -33
- data/lib/goggles/configuration.rb +20 -0
- data/lib/goggles/iteration.rb +38 -0
- data/lib/goggles/version.rb +1 -1
- data/spec/goggles/comparison_spec.rb +99 -0
- data/spec/goggles/configuration_spec.rb +47 -0
- data/spec/goggles/iteration_spec.rb +32 -0
- data/spec/goggles_spec.rb +55 -28
- data/spec/spec_helper.rb +1 -9
- metadata +29 -45
- data/bin/swim +0 -5
- data/lib/goggles/cli.rb +0 -60
- data/lib/goggles/error.rb +0 -3
- data/spec/support/configs/test_config_1024_600.yml +0 -20
- data/spec/support/configs/test_config_no_screenshot.yml +0 -19
- data/spec/support/configs/test_config_scriptless.yml +0 -19
- data/spec/support/scripts/google_search.rb +0 -14
- data/spec/support/scripts/no_screenshot.rb +0 -12
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2bd05fb9c67d3e55a5bb2d9a3c26d5c1ddd96636
|
4
|
+
data.tar.gz: 594c499843796017d18ca8d75588edc6ea3b7a8e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ead73b5e863e59e3fefcad08225f1b144a6e7a7572902c333ff1ce7774041d24c7eecbb202ba933b3dff7a212e5aaa19b58d84f66712a75ab1fc687c6e6935d1
|
7
|
+
data.tar.gz: 616fddeeddf282c24a3ad9eeebfeb1cb8c82f1e79b4656360b8a68bdaa2357c8b996e148c2ca41ecef625bb54a3aa6eb8c93b8ede4d5b8aaf318a9777f291b70
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# CHANGELOG
|
2
|
+
|
3
|
+
## v0.8.0 (Apr 10, 2015)
|
4
|
+
* Remove `swim` executable.
|
5
|
+
* Remove YAML configuration.
|
6
|
+
* Add `Goggles.configure` for configuration through a block (like RSpec).
|
7
|
+
* Remove reserved instance variables like `@gg_url`.
|
8
|
+
* Scripts are executed via blocks passed to `Goggles.each`.
|
9
|
+
* `Goggles.each` yields a browser instance with the `#grab_screenshot` method.
|
10
|
+
* README updates.
|
11
|
+
* Add this CHANGELOG.
|
12
|
+
|
13
|
+
## v0.1.4 (Jan 28, 2014)
|
14
|
+
* Small code enhancements with no user impact.
|
15
|
+
|
16
|
+
## v0.1.3 (Jan 23, 2014)
|
17
|
+
* Do not delete cookies before each script.
|
18
|
+
* Make `@gg_url` variable available to scripts.
|
19
|
+
|
20
|
+
## v0.1.2 (Jan 21, 2014)
|
21
|
+
* Add diff color configuration setting.
|
22
|
+
* Default color setting to blue.
|
23
|
+
* Prepend all instance variables with `gg_`.
|
24
|
+
|
25
|
+
## v0.1.1 (Jan 20, 2014)
|
26
|
+
* Add command line option for generating default project
|
27
|
+
|
28
|
+
## v0.1.0 (Jan 20, 2014)
|
29
|
+
* Initial release
|
data/README.md
CHANGED
@@ -1,98 +1,149 @@
|
|
1
1
|
# goggles
|
2
2
|
[![Gem Version](https://badge.fury.io/rb/goggles.png)](http://badge.fury.io/rb/goggles)
|
3
3
|
|
4
|
-
Goggles is a visual testing tool inspired by [wraith](http://github.com/bbc-news/wraith) and powered by [watir-webdriver](http://github.com/watir/watir-webdriver). It
|
4
|
+
Goggles is a visual testing tool inspired by [wraith](http://github.com/bbc-news/wraith) and powered by [watir-webdriver](http://github.com/watir/watir-webdriver). It compares screenshots of your web applications in different browsers at differents sizes.
|
5
5
|
|
6
|
-
##
|
6
|
+
## Usage
|
7
7
|
|
8
|
-
|
8
|
+
### Configuration
|
9
9
|
|
10
|
-
|
11
|
-
* Linux: `$ sudo apt-get install imagemagick`
|
12
|
-
* Windows: [Download](http://www.imagemagick.org/script/binary-releases.php#windows) installer and add to your PATH.
|
10
|
+
Configure Goggles with a block passed to the `Goggles.configure` method, which will yield a config object to your block for manipulation. The `directory` setting must be configured for Goggles to work. You'll also need to provide `browsers` and `sizes` that you'd like to compare, but those can be configured with the script.
|
13
11
|
|
14
|
-
|
12
|
+
The `fuzzing` and `color` attributes default to "blue" and "20%" respectively.
|
15
13
|
|
16
|
-
|
14
|
+
```ruby
|
15
|
+
Goggles.configure do |config|
|
16
|
+
config.directory = "/path/to/my/results"
|
17
|
+
config.browsers = [:chrome, :firefox, :phantomjs]
|
18
|
+
config.sizes = [1080, 600]
|
19
|
+
config.color = "red"
|
20
|
+
end
|
21
|
+
```
|
17
22
|
|
18
|
-
|
23
|
+
### Scripting
|
19
24
|
|
20
|
-
|
25
|
+
Your Scripts are passed to `Goggles.each` as blocks. Goggles will iterate over the block with each combination of browser/browser size configured, and the method will yield a browser object to your script block.
|
21
26
|
|
22
|
-
|
27
|
+
```ruby
|
28
|
+
Goggles.each do |browser|
|
29
|
+
browser.goto "http://www.google.com"
|
30
|
+
browser.text_field(id: "lst-ib").value = "Google"
|
31
|
+
end
|
32
|
+
```
|
23
33
|
|
24
|
-
|
34
|
+
#### Browsers and sizes
|
25
35
|
|
26
|
-
|
36
|
+
You can pass additional browsers or browser sizes to `Goggles.each` as arrays. With version 0.8.0, these arguments will overwrite what you've configured through `Goggles.configure`.
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
Goggles.each([:chrome, :firefox], [1080]) do |browser|
|
40
|
+
# ...
|
41
|
+
end
|
42
|
+
```
|
27
43
|
|
28
|
-
|
44
|
+
**TODO**
|
29
45
|
|
30
|
-
|
46
|
+
Before the 1.0.0 release, these arguments will act as additonal browsers/sizes to script against. That way, the base configuration can be extended for particular script instances.
|
31
47
|
|
32
|
-
|
33
|
-
# config.yaml
|
34
|
-
# Directory where you want to store your results. Required.
|
35
|
-
results_directory: "/home/example/results"
|
48
|
+
#### Screenshots
|
36
49
|
|
37
|
-
#
|
38
|
-
scripts_directory: "/home/example/scripts"
|
50
|
+
Your script blocks should include the `Watir::Browser#grab_screenshot` method, which has been patched onto the browser objects yielded to your blocks. Simply give the method a description argument and the screenshot will be saved to your configured directory.
|
39
51
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
52
|
+
```ruby
|
53
|
+
Goggles.each do |browser|
|
54
|
+
browser.goto "http://www.google.com"
|
55
|
+
browser.grab_screenshot "homepage"
|
56
|
+
end
|
57
|
+
```
|
44
58
|
|
45
|
-
|
46
|
-
domain_under_test: "http://www.google.com"
|
59
|
+
#### Closing the browser
|
47
60
|
|
48
|
-
|
49
|
-
paths_to_capture:
|
50
|
-
home: "/"
|
51
|
-
gmail: "/gmail"
|
61
|
+
There's no need to explicitly close the browser objects in your script blocks. Goggles will handle that.
|
52
62
|
|
53
|
-
|
54
|
-
browsers:
|
55
|
-
- "chrome"
|
56
|
-
- "firefox"
|
63
|
+
#### Results
|
57
64
|
|
58
|
-
|
59
|
-
browser_widths:
|
60
|
-
- 1024
|
65
|
+
Screenshots are saved to your configured directory. Screenshot comparison results are saved to a sub-folder based on the screenshot description and browser size. Results include a diff image and data file.
|
61
66
|
|
62
|
-
|
63
|
-
|
67
|
+
```ruby
|
68
|
+
Goggles.configure do |c|
|
69
|
+
c.directory = "/goggles/results"
|
70
|
+
c.browsers = [:chrome, :firefox, :phantomjs]
|
71
|
+
c.sizes = [1080, 600]
|
72
|
+
end
|
64
73
|
|
65
|
-
|
66
|
-
|
74
|
+
Goggles.each do |browser|
|
75
|
+
browser.goto "http://www.google.com"
|
76
|
+
browser.grab_screenshot "google"
|
77
|
+
end
|
67
78
|
```
|
68
79
|
|
69
|
-
If you pass scripts to goggles as part of your testing, you **must** specify when screenshots should be taken with the `#grab_screenshot` method. If you do not specify scripts in configuration, goggles will open each of your paths and take a screenshot.
|
70
80
|
|
71
|
-
|
81
|
+
```
|
82
|
+
/goggles/results
|
83
|
+
|- google_1080_chrome.png
|
84
|
+
|- google_1080_firefox.png
|
85
|
+
|- google_1080_phantomjs.png
|
86
|
+
|- google_600_chrome.png
|
87
|
+
|- google_600_firefox.png
|
88
|
+
|- google_600_phantomjs.png
|
89
|
+
|- /google_1080
|
90
|
+
|- chrome_firefox_data.txt
|
91
|
+
|- chrome_firefox_diff.png
|
92
|
+
|- chrome_phantomjs_data.txt
|
93
|
+
|- chrome_phantomjs_diff.png
|
94
|
+
|- firefox_phantomjs_data.txt
|
95
|
+
|- firefox_phantomjs_diff.png
|
96
|
+
|- /google_600
|
97
|
+
|- chrome_firefox_data.txt
|
98
|
+
|- chrome_firefox_diff.png
|
99
|
+
|- chrome_phantomjs_data.txt
|
100
|
+
|- chrome_phantomjs_diff.png
|
101
|
+
|- firefox_phantomjs_data.txt
|
102
|
+
|- firefox_phantomjs_diff.png
|
103
|
+
```
|
72
104
|
|
73
|
-
|
74
|
-
# script_to_execute.rb
|
75
|
-
require 'goggles'
|
76
|
-
@watir.cookies.add("cookie_name", "cookie_value")
|
105
|
+
## Road to 1.0.0
|
77
106
|
|
78
|
-
|
79
|
-
|
80
|
-
|
107
|
+
I've made a lot of changes recently and bumped the version up to 0.8.0. Check the [/CHANGELOG.md](changelog) for more information about those changes.
|
108
|
+
|
109
|
+
### v0.9.0
|
81
110
|
|
82
|
-
|
111
|
+
* Browser/size arguments against `Goggles.each` extend configuration instead of overwriting it.
|
112
|
+
* End-to-end Cucumber tests
|
83
113
|
|
84
|
-
|
114
|
+
### v1.0.0
|
115
|
+
|
116
|
+
* Documentation
|
117
|
+
* Examples
|
118
|
+
* TravisCI integration for specs (but not features)
|
119
|
+
|
120
|
+
## Installation
|
121
|
+
|
122
|
+
Install ImageMagick:
|
123
|
+
|
124
|
+
* OSX: `$ brew install imagemagick`
|
125
|
+
* Ubuntu: `$ sudo apt-get install imagemagick`
|
126
|
+
* Windows: [Download](http://www.imagemagick.org/script/binary-releases.php#windows) installer and add to your PATH.
|
127
|
+
|
128
|
+
Add this line to your application's Gemfile:
|
129
|
+
|
130
|
+
gem 'goggles'
|
131
|
+
|
132
|
+
And then execute:
|
133
|
+
|
134
|
+
$ bundle
|
135
|
+
|
136
|
+
Or install it yourself with:
|
137
|
+
|
138
|
+
$ gem install goggles
|
85
139
|
|
86
140
|
## Contributing
|
87
141
|
|
88
142
|
1. Fork it ( http://github.com/jdenen/goggles/fork )
|
89
143
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
90
|
-
3.
|
91
|
-
4.
|
92
|
-
5.
|
93
|
-
6. Create new Pull Request
|
94
|
-
|
95
|
-
\*Chrome and [ChromeDriver](http://code.google.com/p/selenium/wiki/ChromeDriver) are required to pass specs. Download the latest version and add it to your PATH before running `rspec`.
|
144
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
145
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
146
|
+
5. Create new Pull Request
|
96
147
|
|
97
148
|
## Questions, Comments, Concerns
|
98
|
-
|
149
|
+
Find me on Twitter ([@jpdenen](http://twitter.com/jpdenen)) or write up an issue.
|
data/goggles.gemspec
CHANGED
@@ -7,9 +7,9 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "goggles"
|
8
8
|
spec.version = Goggles::VERSION
|
9
9
|
spec.authors = ["Johnson Denen"]
|
10
|
-
spec.email = ["
|
11
|
-
spec.summary = %q{
|
12
|
-
spec.description = %q{
|
10
|
+
spec.email = ["johnson.denen@gmail.com"]
|
11
|
+
spec.summary = %q{Compare screenshots in different browers at differnt sizes}
|
12
|
+
spec.description = %q{Compare screenshots in different browers at differnt sizes}
|
13
13
|
spec.homepage = "http://github.com/jdenen/goggles"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -23,6 +23,4 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_runtime_dependency "watir-webdriver"
|
25
25
|
spec.add_runtime_dependency "image_size"
|
26
|
-
|
27
|
-
spec.executables << "swim"
|
28
26
|
end
|
data/lib/goggles.rb
CHANGED
@@ -1,81 +1,28 @@
|
|
1
|
-
require "goggles/
|
1
|
+
require "goggles/configuration"
|
2
2
|
require "goggles/comparison"
|
3
|
-
require "goggles/
|
4
|
-
|
5
|
-
require "watir-webdriver"
|
6
|
-
require "yaml"
|
7
|
-
require "fileutils"
|
3
|
+
require "goggles/iteration"
|
8
4
|
|
9
5
|
module Goggles
|
10
6
|
extend self
|
11
|
-
|
12
|
-
def
|
13
|
-
conf
|
14
|
-
|
15
|
-
@gg_result_dir = conf['results_directory']
|
16
|
-
@gg_script_dir = conf['scripts_directory']
|
17
|
-
@gg_domain = conf['domain_under_test']
|
18
|
-
@gg_paths = conf['paths_to_capture']
|
19
|
-
@gg_scripts = conf['scripts_to_execute']
|
20
|
-
@gg_platforms = conf['browsers']
|
21
|
-
@gg_widths = conf['browser_widths']
|
22
|
-
@gg_fuzz = conf['image_fuzzing']
|
23
|
-
@gg_color = conf['diff_color'] || 'blue'
|
24
|
-
|
25
|
-
embark!
|
26
|
-
diff_images
|
7
|
+
|
8
|
+
def configure &block
|
9
|
+
configuration.tap { |conf| yield conf }
|
27
10
|
end
|
28
11
|
|
29
|
-
def
|
30
|
-
|
31
|
-
|
32
|
-
image_dir = "#{@gg_result_dir}/#{@gg_label}"
|
33
|
-
image_name = "#{detail}_#{@gg_size}_#{@gg_browser}"
|
34
|
-
|
35
|
-
@watir.screenshot.save "#{image_dir}/#{image_name}.png"
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def embark!
|
41
|
-
ensure_fresh_start
|
12
|
+
def each browsers = nil, sizes = nil, &block
|
13
|
+
browsers ||= configuration.browsers
|
14
|
+
sizes ||= configuration.sizes
|
42
15
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
@gg_platforms.each do |pf|
|
47
|
-
@gg_browser = pf
|
48
|
-
|
49
|
-
@watir = Watir::Browser.new pf.to_sym
|
50
|
-
@watir.driver.manage.window.resize_to(@gg_size, 768)
|
51
|
-
|
52
|
-
@gg_paths.each do |label, path|
|
53
|
-
@gg_label = label
|
54
|
-
@gg_url = "#{@gg_domain}#{path}"
|
55
|
-
|
56
|
-
if @gg_scripts.nil?
|
57
|
-
@watir.goto @gg_url
|
58
|
-
grab_screenshot("screenshot")
|
59
|
-
else
|
60
|
-
@gg_scripts.each do |script|
|
61
|
-
script = "#{@gg_script_dir}/#{script}"
|
62
|
-
@watir.goto @gg_url
|
63
|
-
eval(File.read(script))
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
@watir.close
|
69
|
-
end
|
16
|
+
browsers.product(sizes).each do |browser, size|
|
17
|
+
Iteration.new browser, size, configuration, &block
|
70
18
|
end
|
19
|
+
|
20
|
+
Comparison.new(configuration).tap { |comparison| comparison.make! }
|
71
21
|
end
|
72
22
|
|
73
|
-
|
74
|
-
FileUtils.rm_rf("#{@gg_result_dir}")
|
75
|
-
end
|
23
|
+
private
|
76
24
|
|
77
|
-
def
|
78
|
-
|
25
|
+
def configuration
|
26
|
+
@configuration ||= Configuration.new
|
79
27
|
end
|
80
|
-
|
81
28
|
end
|
data/lib/goggles/comparison.rb
CHANGED
@@ -1,50 +1,84 @@
|
|
1
1
|
require "image_size"
|
2
2
|
|
3
3
|
module Goggles
|
4
|
+
class Comparison
|
5
|
+
attr_reader :directory, :fuzzing, :color, :groups, :results_dir
|
6
|
+
|
7
|
+
def initialize config
|
8
|
+
@directory = config.directory
|
9
|
+
@fuzzing = config.fuzzing
|
10
|
+
@color = config.color
|
11
|
+
@groups = config.groups
|
12
|
+
end
|
13
|
+
|
14
|
+
def make!
|
15
|
+
cut_to_common_size
|
16
|
+
highlight_differences
|
17
|
+
end
|
18
|
+
|
19
|
+
def cut_to_common_size
|
20
|
+
groups.each_with_object([]) do |group, sizes|
|
21
|
+
collection = find_comparable group
|
22
|
+
|
23
|
+
collection.each do |img|
|
24
|
+
File.open(img, 'rb'){ |file| sizes << read_size(file) }
|
25
|
+
end
|
4
26
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
size_to_smallest!
|
27
|
+
cut! collection, sizes
|
28
|
+
end
|
29
|
+
end
|
10
30
|
|
11
|
-
|
12
|
-
|
13
|
-
|
31
|
+
def highlight_differences
|
32
|
+
groups.each do |desc|
|
33
|
+
ensure_result_directory desc
|
34
|
+
find_comparable(desc).combination(2).to_a.each { |imgs| diff imgs[0], imgs[1] }
|
35
|
+
end
|
36
|
+
end
|
14
37
|
|
15
|
-
|
38
|
+
def find_comparable description
|
39
|
+
Dir.glob("#{directory}/*.png").grep(/#{description}_/).sort
|
40
|
+
end
|
16
41
|
|
17
|
-
|
18
|
-
|
42
|
+
def find_common_width array
|
43
|
+
array.collect(&:first).sort.first
|
44
|
+
end
|
19
45
|
|
20
|
-
|
46
|
+
def find_common_height array
|
47
|
+
array.collect(&:last).sort.first
|
21
48
|
end
|
22
|
-
end
|
23
49
|
|
24
|
-
|
25
|
-
images = Dir.glob("#{@gg_result_dir}/*/*.png").sort
|
50
|
+
private
|
26
51
|
|
27
|
-
|
28
|
-
pair = images.slice!(0..1)
|
29
|
-
widths = []
|
30
|
-
heights = []
|
52
|
+
attr_writer :results_dir
|
31
53
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
54
|
+
def cut! images, sizes
|
55
|
+
w = find_common_width sizes
|
56
|
+
h = find_common_height sizes
|
57
|
+
images.each { |img| `convert #{img} -background none -extent #{w}x#{h} #{img}` }
|
58
|
+
end
|
36
59
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
60
|
+
def diff img_one, img_two
|
61
|
+
b1 = diffed img_one
|
62
|
+
b2 = diffed img_two
|
63
|
+
|
64
|
+
fuzz = "#{results_dir}/#{b1}_#{b2}_diff.png"
|
65
|
+
data = "#{results_dir}/#{b1}_#{b2}_data.txt"
|
66
|
+
|
67
|
+
`compare -fuzz #{fuzzing} -metric AE -highlight-color #{color} #{img_one} #{img_two} #{fuzz} 2>#{data}`
|
68
|
+
end
|
41
69
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
70
|
+
def diffed img
|
71
|
+
File.basename(img).match(/\d+_(.*)\.png/)[1]
|
72
|
+
end
|
73
|
+
|
74
|
+
def read_size file
|
75
|
+
ImageSize.new(file.read).size
|
47
76
|
end
|
48
|
-
end
|
49
77
|
|
78
|
+
def ensure_result_directory description
|
79
|
+
self.results_dir = "#{directory}/#{description}"
|
80
|
+
FileUtils.rm_rf results_dir
|
81
|
+
FileUtils.mkdir_p results_dir
|
82
|
+
end
|
83
|
+
end
|
50
84
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Goggles
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :browsers, :sizes, :fuzzing, :color, :groups
|
4
|
+
attr_reader :directory
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@browsers = []
|
8
|
+
@sizes = []
|
9
|
+
@groups = []
|
10
|
+
@directory = ""
|
11
|
+
@color = "blue"
|
12
|
+
@fuzzing = "20%"
|
13
|
+
end
|
14
|
+
|
15
|
+
def directory=(path)
|
16
|
+
@directory = path
|
17
|
+
FileUtils.mkdir_p path unless path.empty?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "watir-webdriver"
|
2
|
+
|
3
|
+
module Watir
|
4
|
+
class Browser
|
5
|
+
attr_accessor :goggles, :iteration
|
6
|
+
|
7
|
+
def grab_screenshot name
|
8
|
+
description = "#{name}_#{iteration.size}"
|
9
|
+
goggles.groups << description unless goggles.groups.include? description
|
10
|
+
screenshot.save "#{goggles.directory}/#{description}_#{iteration.browser_name}.png"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Goggles
|
16
|
+
class Iteration
|
17
|
+
attr_reader :browser, :browser_name, :size, :config
|
18
|
+
|
19
|
+
def initialize driver, width, config, &block
|
20
|
+
@browser_name = driver
|
21
|
+
@config = config
|
22
|
+
@size = width
|
23
|
+
build_browser
|
24
|
+
yield browser
|
25
|
+
browser.close
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def build_browser
|
31
|
+
@browser = Watir::Browser.new(browser_name).tap do |engine|
|
32
|
+
engine.goggles = config
|
33
|
+
engine.iteration = self
|
34
|
+
engine.driver.manage.window.resize_to size, 768
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/goggles/version.rb
CHANGED
@@ -0,0 +1,99 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Goggles::Comparison do
|
4
|
+
let(:config){ instance_double "configuration" }
|
5
|
+
let(:comparison){ Goggles::Comparison.new config }
|
6
|
+
|
7
|
+
before do
|
8
|
+
allow(config).to receive_messages(
|
9
|
+
directory: "dir",
|
10
|
+
fuzzing: "20%",
|
11
|
+
color: "blue",
|
12
|
+
groups: [1])
|
13
|
+
end
|
14
|
+
|
15
|
+
it "reads attributes from a given configuration object" do
|
16
|
+
expect(config).to receive(:directory)
|
17
|
+
expect(config).to receive(:fuzzing)
|
18
|
+
expect(config).to receive(:color)
|
19
|
+
Goggles::Comparison.new config
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#make!" do
|
23
|
+
it "cuts images and highlights their differences" do
|
24
|
+
expect(comparison).to receive(:cut_to_common_size)
|
25
|
+
expect(comparison).to receive(:highlight_differences)
|
26
|
+
comparison.make!
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#cut_to_common_size" do
|
31
|
+
it "iterates over screenshot descriptions" do
|
32
|
+
groups = instance_double "[groups]"
|
33
|
+
expect(comparison).to receive(:groups).and_return groups
|
34
|
+
expect(groups).to receive(:each_with_object).with([])
|
35
|
+
comparison.cut_to_common_size
|
36
|
+
end
|
37
|
+
|
38
|
+
it "collects comparable screenshots" do
|
39
|
+
expect(comparison).to receive(:groups).and_return [1, 2]
|
40
|
+
expect(comparison).to receive(:find_comparable).with(1).and_return([])
|
41
|
+
expect(comparison).to receive(:find_comparable).with(2).and_return([])
|
42
|
+
comparison.cut_to_common_size
|
43
|
+
end
|
44
|
+
|
45
|
+
context "with collection of comparable screenshots" do
|
46
|
+
it "iterates over the collection" do
|
47
|
+
screens = instance_double "[screenshots]"
|
48
|
+
expect(comparison).to receive(:groups).and_return ["foo"]
|
49
|
+
expect(comparison).to receive(:find_comparable).and_return screens
|
50
|
+
expect(screens).to receive(:each)
|
51
|
+
expect(comparison).to receive(:cut!).with(screens, [])
|
52
|
+
comparison.cut_to_common_size
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "while iterating over collected comparable images" do
|
57
|
+
it "opens each image in binary mode" do
|
58
|
+
expect(comparison).to receive(:find_comparable).and_return [:foo]
|
59
|
+
expect(File).to receive(:open).with(:foo, 'rb')
|
60
|
+
expect(comparison).to receive(:cut!)
|
61
|
+
comparison.cut_to_common_size
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#highlight_differences" do
|
67
|
+
it "diffs every combination of comparable screenshots" do
|
68
|
+
images = ["foo_1.png", "foo_2.png", "foo_3.png"]
|
69
|
+
expect(comparison).to receive(:groups).and_return ["foo"]
|
70
|
+
expect(comparison).to receive(:find_comparable).with("foo").and_return images
|
71
|
+
images.combination(2).to_a.each do |i|
|
72
|
+
expect(comparison).to receive(:diff).with i[0], i[1]
|
73
|
+
end
|
74
|
+
comparison.highlight_differences
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#find_comparable" do
|
79
|
+
it "returns an array of file paths" do
|
80
|
+
array = ["/foo_chrome.png", "/bar_chrome.png", "/foo_ff.png", "/bar_ff.png"]
|
81
|
+
expect(Dir).to receive(:glob).and_return array
|
82
|
+
expect(comparison.find_comparable "foo").to eq ["/foo_chrome.png", "/foo_ff.png"]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#find_common_width" do
|
87
|
+
it "returns the smallest number from first items in an array of arrays" do
|
88
|
+
arrays = [[100,40], [68,300], [104,98]]
|
89
|
+
expect(comparison.find_common_width arrays).to eq 68
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#find_common_height" do
|
94
|
+
it "returns the smallest number from second items in an array of arrays" do
|
95
|
+
arrays = [[100,40], [68,300], [104,98]]
|
96
|
+
expect(comparison.find_common_height arrays).to eq 40
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Goggles::Configuration do
|
4
|
+
let(:config) { Goggles::Configuration.new }
|
5
|
+
|
6
|
+
it "has attributes by default" do
|
7
|
+
expect(config).to have_attributes(
|
8
|
+
:browsers => [],
|
9
|
+
:sizes => [],
|
10
|
+
:groups => [],
|
11
|
+
:directory => "",
|
12
|
+
:color => "blue",
|
13
|
+
:fuzzing => "20%"
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has attributes that can be set" do
|
18
|
+
config.browsers << "chrome"
|
19
|
+
config.sizes << 100
|
20
|
+
config.groups << "foo"
|
21
|
+
config.color = "red"
|
22
|
+
config.fuzzing = "10%"
|
23
|
+
|
24
|
+
expect(config).to have_attributes(
|
25
|
+
:browsers => ["chrome"],
|
26
|
+
:sizes => [100],
|
27
|
+
:groups => ["foo"],
|
28
|
+
:color => "red",
|
29
|
+
:fuzzing => "10%"
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#directory=" do
|
34
|
+
it "ensures the directory exists" do
|
35
|
+
expect(FileUtils).to receive(:mkdir_p).with "/foo/bar"
|
36
|
+
config.directory = "/foo/bar"
|
37
|
+
expect(config.directory).to eq "/foo/bar"
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when attribute is empty" do
|
41
|
+
it "does not create the directory" do
|
42
|
+
expect(FileUtils).to_not receive(:mkdir_p)
|
43
|
+
config.directory = ""
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Goggles::Iteration do
|
4
|
+
let(:watir) { instance_double("browser") }
|
5
|
+
|
6
|
+
before do
|
7
|
+
allow(watir).to receive_messages(
|
8
|
+
:driver => watir,
|
9
|
+
:manage => watir,
|
10
|
+
:window => watir,
|
11
|
+
:goggles= => nil,
|
12
|
+
:iteration= => nil,
|
13
|
+
:resize_to => nil,
|
14
|
+
:close => nil)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "yields an instantiated browser" do
|
18
|
+
expect(Watir::Browser).to receive(:new).and_return watir
|
19
|
+
expect { |b| Goggles::Iteration.new "", "", "", &b }.to yield_with_args watir
|
20
|
+
end
|
21
|
+
|
22
|
+
it "yields the browser based on the browser_name attribute" do
|
23
|
+
expect(Watir::Browser).to receive(:new).with(:foo).and_return watir
|
24
|
+
Goggles::Iteration.new(:foo, "", ""){ "bar" }
|
25
|
+
end
|
26
|
+
|
27
|
+
it "resizes the browser based on the size attribute" do
|
28
|
+
expect(Watir::Browser).to receive(:new).with(:foo).and_return watir
|
29
|
+
expect(watir).to receive(:resize_to).with(500, 768)
|
30
|
+
Goggles::Iteration.new(:foo, 500, ""){ "bar" }
|
31
|
+
end
|
32
|
+
end
|
data/spec/goggles_spec.rb
CHANGED
@@ -1,41 +1,68 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Goggles do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
before { allow(FileUtils).to receive(:mkdir_p) }
|
5
|
+
|
6
|
+
describe ".configure" do
|
7
|
+
it "yields a configuration object" do
|
8
|
+
expect { |b| Goggles.configure &b }.to yield_with_args Goggles::Configuration
|
9
|
+
end
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
Given(:sizes_config) { "#{config_path}/test_config_1024_600.yml" }
|
12
|
-
When { Goggles.swim(sizes_config) }
|
13
|
-
Then { images.size.should == 6 }
|
14
|
-
And { diffs.size.should == 2 }
|
15
|
-
And { datas.size.should == 2 }
|
11
|
+
it "returns a configuration object" do
|
12
|
+
expect(Goggles.configure { "foo" }).to be_a Goggles::Configuration
|
16
13
|
end
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
Then { expect{ Goggles.swim(no_shot_config) }.to raise_error(Goggles::EmptyResultError) }
|
15
|
+
it "memoizes the configuration object" do
|
16
|
+
expect(Goggles.configure { "foo" }).to equal Goggles.configure { "bar" }
|
21
17
|
end
|
22
18
|
end
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
And { datas.size.should == 2 }
|
20
|
+
describe ".each" do
|
21
|
+
let(:config) do
|
22
|
+
Goggles.configure do |conf|
|
23
|
+
conf.browsers = [:foo]
|
24
|
+
conf.sizes = [500]
|
25
|
+
end
|
31
26
|
end
|
32
|
-
end
|
33
27
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
28
|
+
before do
|
29
|
+
allow(config).to receive_messages(directory: "/dir", fuzzing: "20%", color: "blue", groups: [])
|
30
|
+
end
|
31
|
+
|
32
|
+
it "passes browser, width, and configuration to an iteration object" do
|
33
|
+
expect(Goggles::Iteration).to receive(:new).with(:foo, 500, config)
|
34
|
+
Goggles.each { "foo" }
|
35
|
+
end
|
36
|
+
|
37
|
+
it "accepts non-configured browser and size arguments" do
|
38
|
+
expect(Goggles::Iteration).to receive(:new).with(:bar, 300, config)
|
39
|
+
Goggles.each([:bar], [300]) { "foo" }
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns a comparison object" do
|
43
|
+
expect(Goggles::Iteration).to receive(:new).with(:foo, 500, config)
|
44
|
+
expect(Goggles.each { "foo" }).to be_a Goggles::Comparison
|
45
|
+
end
|
46
|
+
|
47
|
+
context "when configured for browsers at one size" do
|
48
|
+
it "creates an iteration for each browser with the width" do
|
49
|
+
config.browsers << :bar
|
50
|
+
[:foo, :bar].each { |browser| expect(Goggles::Iteration).to receive(:new).with browser, 500, config }
|
51
|
+
Goggles.each { "foo" }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when configured for browsers at different sizes" do
|
56
|
+
it "creates an iteration for every browser and width combination" do
|
57
|
+
config.browsers << :bar
|
58
|
+
config.sizes << 1000
|
40
59
|
|
60
|
+
[:foo, :bar].product([500, 1000]).each do |browser, width|
|
61
|
+
expect(Goggles::Iteration).to receive(:new).with browser, width, Object
|
62
|
+
end
|
63
|
+
|
64
|
+
Goggles.each { "foo" }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
41
68
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: goggles
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.8.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Johnson Denen
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-04-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,124 +27,111 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: watir-webdriver
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: image_size
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
|
-
description:
|
83
|
+
description: Compare screenshots in different browers at differnt sizes
|
95
84
|
email:
|
96
|
-
-
|
97
|
-
executables:
|
98
|
-
- swim
|
85
|
+
- johnson.denen@gmail.com
|
86
|
+
executables: []
|
99
87
|
extensions: []
|
100
88
|
extra_rdoc_files: []
|
101
89
|
files:
|
102
90
|
- .gitignore
|
91
|
+
- CHANGELOG.md
|
103
92
|
- Gemfile
|
104
93
|
- LICENSE.txt
|
105
94
|
- README.md
|
106
95
|
- Rakefile
|
107
|
-
- bin/swim
|
108
96
|
- goggles.gemspec
|
109
97
|
- lib/goggles.rb
|
110
|
-
- lib/goggles/cli.rb
|
111
98
|
- lib/goggles/comparison.rb
|
112
|
-
- lib/goggles/
|
99
|
+
- lib/goggles/configuration.rb
|
100
|
+
- lib/goggles/iteration.rb
|
113
101
|
- lib/goggles/version.rb
|
102
|
+
- spec/goggles/comparison_spec.rb
|
103
|
+
- spec/goggles/configuration_spec.rb
|
104
|
+
- spec/goggles/iteration_spec.rb
|
114
105
|
- spec/goggles_spec.rb
|
115
106
|
- spec/spec_helper.rb
|
116
|
-
- spec/support/configs/test_config_1024_600.yml
|
117
|
-
- spec/support/configs/test_config_no_screenshot.yml
|
118
|
-
- spec/support/configs/test_config_scriptless.yml
|
119
|
-
- spec/support/scripts/google_search.rb
|
120
|
-
- spec/support/scripts/no_screenshot.rb
|
121
107
|
homepage: http://github.com/jdenen/goggles
|
122
108
|
licenses:
|
123
109
|
- MIT
|
110
|
+
metadata: {}
|
124
111
|
post_install_message:
|
125
112
|
rdoc_options: []
|
126
113
|
require_paths:
|
127
114
|
- lib
|
128
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
116
|
requirements:
|
131
|
-
- -
|
117
|
+
- - '>='
|
132
118
|
- !ruby/object:Gem::Version
|
133
119
|
version: '0'
|
134
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
121
|
requirements:
|
137
|
-
- -
|
122
|
+
- - '>='
|
138
123
|
- !ruby/object:Gem::Version
|
139
124
|
version: '0'
|
140
125
|
requirements: []
|
141
126
|
rubyforge_project:
|
142
|
-
rubygems_version:
|
127
|
+
rubygems_version: 2.0.14
|
143
128
|
signing_key:
|
144
|
-
specification_version:
|
145
|
-
summary:
|
129
|
+
specification_version: 4
|
130
|
+
summary: Compare screenshots in different browers at differnt sizes
|
146
131
|
test_files:
|
132
|
+
- spec/goggles/comparison_spec.rb
|
133
|
+
- spec/goggles/configuration_spec.rb
|
134
|
+
- spec/goggles/iteration_spec.rb
|
147
135
|
- spec/goggles_spec.rb
|
148
136
|
- spec/spec_helper.rb
|
149
|
-
|
150
|
-
- spec/support/configs/test_config_no_screenshot.yml
|
151
|
-
- spec/support/configs/test_config_scriptless.yml
|
152
|
-
- spec/support/scripts/google_search.rb
|
153
|
-
- spec/support/scripts/no_screenshot.rb
|
137
|
+
has_rdoc:
|
data/bin/swim
DELETED
data/lib/goggles/cli.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'goggles'
|
2
|
-
require 'optparse'
|
3
|
-
require 'pathname'
|
4
|
-
|
5
|
-
module Goggles
|
6
|
-
class CLI
|
7
|
-
|
8
|
-
def initialize(argv)
|
9
|
-
opt_parser = OptionParser.new do |opts|
|
10
|
-
opts.banner = "Goggles: Compare responsive screenshots in multiple browsers"
|
11
|
-
opts.separator ""
|
12
|
-
opts.separator "Options"
|
13
|
-
|
14
|
-
opts.on("-c", "--config CONFIG_FILE", "configuration to execute") do |config|
|
15
|
-
run_conf(config)
|
16
|
-
end
|
17
|
-
|
18
|
-
opts.on("-i", "--init CONFIG_FILE", "create empty config file") do |config|
|
19
|
-
file = Pathname.new(config)
|
20
|
-
|
21
|
-
if file.exist?
|
22
|
-
puts "Configuration file already exists: #{Pathname.new(config).realpath}"
|
23
|
-
else
|
24
|
-
File.open(file, 'w+') { |f| f.write(YAML::dump(EMPTY_CONFIG)) }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
opts.on("-v", "--version", "Goggles::VERSION") do
|
29
|
-
puts Goggles::VERSION
|
30
|
-
end
|
31
|
-
|
32
|
-
opts.on("-h", "--help", "help text") do
|
33
|
-
puts opt_parser
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
opt_parser.parse!
|
38
|
-
end
|
39
|
-
|
40
|
-
def run_conf(config)
|
41
|
-
if File.exists? config
|
42
|
-
Goggles.swim config
|
43
|
-
else
|
44
|
-
puts "Not a valid configuration file: #{config}"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
EMPTY_CONFIG = {
|
49
|
-
'results_directory' => "/home/example/results",
|
50
|
-
'scripts_directory' => "/home/example/scripts",
|
51
|
-
'scripts_to_execute' => ["first_example.rb", "second_example.rb"],
|
52
|
-
'domain_under_test' => "http://www.google.com",
|
53
|
-
'paths_to_capture' => { 'home' => "/", 'gmail' => "/gmail" },
|
54
|
-
'browsers' => ["chrome", "firefox"],
|
55
|
-
'browser_widths' => [1024, 600],
|
56
|
-
'image_fuzzing' => "20%",
|
57
|
-
'diff_color' => "blue"
|
58
|
-
}
|
59
|
-
end
|
60
|
-
end
|
data/lib/goggles/error.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
results_directory: "spec/support/results"
|
2
|
-
scripts_directory: "spec/support/scripts"
|
3
|
-
|
4
|
-
domain_under_test: "http://www.google.com"
|
5
|
-
|
6
|
-
paths_to_capture:
|
7
|
-
home: "/"
|
8
|
-
|
9
|
-
scripts_to_execute:
|
10
|
-
- "google_search.rb"
|
11
|
-
|
12
|
-
browsers:
|
13
|
-
- "firefox"
|
14
|
-
- "chrome"
|
15
|
-
|
16
|
-
browser_widths:
|
17
|
-
- 1024
|
18
|
-
- 600
|
19
|
-
|
20
|
-
image_fuzzing: "20%"
|
@@ -1,19 +0,0 @@
|
|
1
|
-
results_directory: "spec/support/results"
|
2
|
-
scripts_directory: "spec/support/scripts"
|
3
|
-
|
4
|
-
domain_under_test: "http://www.google.com"
|
5
|
-
|
6
|
-
paths_to_capture:
|
7
|
-
home: "/"
|
8
|
-
|
9
|
-
scripts_to_execute:
|
10
|
-
- "no_screenshot.rb"
|
11
|
-
|
12
|
-
browsers:
|
13
|
-
- "firefox"
|
14
|
-
- "chrome"
|
15
|
-
|
16
|
-
browser_widths:
|
17
|
-
- 320
|
18
|
-
|
19
|
-
image_fuzzing: "20%"
|
@@ -1,19 +0,0 @@
|
|
1
|
-
results_directory: "spec/support/results"
|
2
|
-
scripts_directory: "spec/support/scripts"
|
3
|
-
|
4
|
-
domain_under_test: "http://www.google.com"
|
5
|
-
|
6
|
-
paths_to_capture:
|
7
|
-
home: "/"
|
8
|
-
email: "/gmail"
|
9
|
-
|
10
|
-
scripts_to_execute:
|
11
|
-
|
12
|
-
browsers:
|
13
|
-
- "firefox"
|
14
|
-
- "chrome"
|
15
|
-
|
16
|
-
browser_widths:
|
17
|
-
- 1024
|
18
|
-
|
19
|
-
image_fuzzing: "20%"
|