chromedriver-screenshot 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +3 -0
- data/Appraisals +7 -0
- data/CHANGELOG.md +9 -0
- data/LICENSE +1 -1
- data/README.md +2 -2
- data/chromedriver-screenshot.gemspec +3 -1
- data/features/step_definitions/image_page_steps.rb +1 -4
- data/features/support/env.rb +1 -0
- data/features/support/fixtures/single_window_image/expected_screenshot.png +0 -0
- data/features/support/hooks.rb +9 -0
- data/features/support/image.rb +39 -0
- data/gemfiles/selenium_2.gemfile +7 -0
- data/gemfiles/selenium_3.gemfile +7 -0
- data/lib/chromedriver-screenshot.rb +12 -3
- data/lib/chromedriver-screenshot/platforms.rb +17 -6
- data/lib/chromedriver-screenshot/version.rb +1 -1
- metadata +37 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18e504d4f42af744fbf2ae1865e0f66e02f8954a
|
4
|
+
data.tar.gz: 25ea4dd2c07df554500b49733d33fe531fb640fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c50253ad37a6b2bdf2a0943e0048cd16ae0836791b7b992843406582a9f13526c719f57381219053882cd950e362624a086de3762db9b4bb6e372a14ef71d02f
|
7
|
+
data.tar.gz: c66caadcd1e538aae50e76928389dde0776113e52b40c6547735d31f41b5f0cfee6fa3e7b7e6e788852d2f910acaaff8796b07ab98c36e0040fb638e49b839b7
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Appraisals
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 0.4.0 (January 30, 2017)
|
2
|
+
|
3
|
+
- Add support for both Selenium 2 and 3
|
4
|
+
- Transfer ownership to The Orchard
|
5
|
+
- Implement Selenium UI testing using Cucumber
|
6
|
+
|
7
|
+
Bugs:
|
8
|
+
- Fix dimension mismatches on React applications
|
9
|
+
|
1
10
|
## 0.3.0 (December 6, 2016)
|
2
11
|
|
3
12
|
- Upgraded to Selenium 3.0
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -15,11 +15,11 @@ You can switch to the old screenshot behavior by changing the `take_full_screens
|
|
15
15
|
ChromedriverScreenshot.take_full_screenshots = false
|
16
16
|
|
17
17
|
# Known issues:
|
18
|
-
0. Screenshots on Retina displays quadruple in size
|
18
|
+
0. Screenshots on Retina displays quadruple in size. As a result, screenshots are cropped incorrectly.
|
19
19
|
|
20
20
|
# TODO:
|
21
21
|
0. Better inheritance/monkeypatching
|
22
|
-
0. Find a solution to
|
22
|
+
0. Find a solution to screenshots on Retina
|
23
23
|
0. Refactor singleton platforms class
|
24
24
|
0. Refactor ChunkyPNG method
|
25
25
|
0. Add e2e tests
|
@@ -16,9 +16,11 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
|
18
18
|
s.add_dependency "oily_png", "~> 1.2"
|
19
|
-
s.add_dependency "selenium-webdriver", "
|
19
|
+
s.add_dependency "selenium-webdriver", ">= 2.0"
|
20
20
|
|
21
|
+
s.add_development_dependency "appraisal", "~> 2.1.0"
|
21
22
|
s.add_development_dependency "rspec", "~> 3.2"
|
22
23
|
s.add_development_dependency "cucumber", "~> 2.4.0"
|
23
24
|
s.add_development_dependency "rake", "~> 10.5.0"
|
25
|
+
s.add_development_dependency "rmagick", "~> 2.16.0"
|
24
26
|
end
|
@@ -10,8 +10,5 @@ end
|
|
10
10
|
|
11
11
|
Then(/^the screenshot matches the stored single window image$/) do
|
12
12
|
expected_screenshot_path = File.join(support_directory, "fixtures", "single_window_image", "expected_screenshot.png")
|
13
|
-
|
14
|
-
actual_screenshot = File.read(@actual_screenshot_path)
|
15
|
-
|
16
|
-
expect(actual_screenshot).to eql expected_screenshot
|
13
|
+
Image.new(@actual_screenshot_path).should_match(expected_screenshot_path)
|
17
14
|
end
|
data/features/support/env.rb
CHANGED
Binary file
|
data/features/support/hooks.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
browser = Selenium::WebDriver.for :chrome
|
2
2
|
|
3
|
+
desired_window_height = 600
|
4
|
+
desired_window_width = 1024
|
5
|
+
browser.manage.window.resize_to(desired_window_width, desired_window_height)
|
6
|
+
|
7
|
+
window_height = browser.execute_script ChromedriverScreenshot::Platforms::WINDOW_HEIGHT_SCRIPT
|
8
|
+
window_width = browser.execute_script ChromedriverScreenshot::Platforms::WINDOW_WIDTH_SCRIPT
|
9
|
+
|
10
|
+
browser.manage.window.resize_to(desired_window_width*2 - window_width, desired_window_height*2 - window_height)
|
11
|
+
|
3
12
|
Before do
|
4
13
|
@browser = browser
|
5
14
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Image
|
2
|
+
def initialize(image)
|
3
|
+
@path = image
|
4
|
+
@image = Magick::Image.read(image)[0]
|
5
|
+
end
|
6
|
+
|
7
|
+
# consider turning this into a custom matcher instead
|
8
|
+
def should_match(image_path_to_compare, max_difference: 0.10)
|
9
|
+
image_difference = difference_from(image_path_to_compare)
|
10
|
+
fail(
|
11
|
+
"Images don't match!\n"\
|
12
|
+
" Expected image: #{@path}\n"\
|
13
|
+
" Actual image: #{image_path_to_compare}\n"\
|
14
|
+
" Difference: #{image_difference}\n"\
|
15
|
+
" Threshold: #{max_difference}"
|
16
|
+
) unless image_difference < max_difference
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def difference_from(image_path)
|
22
|
+
image_to_compare = Magick::Image.read(image_path)[0]
|
23
|
+
|
24
|
+
assert_dimensions_match(image_to_compare)
|
25
|
+
|
26
|
+
_, diff_metric = @image.compare_channel(image_to_compare, Magick::MeanSquaredErrorMetric)
|
27
|
+
diff_metric
|
28
|
+
end
|
29
|
+
|
30
|
+
def assert_dimensions_match(other_image)
|
31
|
+
base_dims = [@image.columns, @image.rows]
|
32
|
+
compared_dims = [other_image.columns, other_image.rows]
|
33
|
+
fail(
|
34
|
+
"images do not match!\n"\
|
35
|
+
"Base image: #{base_dims}\n"\
|
36
|
+
"Compared image: #{compared_dims}"
|
37
|
+
) if base_dims != compared_dims
|
38
|
+
end
|
39
|
+
end
|
@@ -21,10 +21,11 @@ module Selenium
|
|
21
21
|
module WebDriver
|
22
22
|
module Remote
|
23
23
|
class Bridge
|
24
|
-
|
25
|
-
|
24
|
+
@@use_selenium_2 = Gem.loaded_specs["selenium-webdriver"].version < Gem::Version.create('3.0')
|
25
|
+
|
26
|
+
def new_screenshot_method
|
26
27
|
if browser == :chrome && ChromedriverScreenshot.take_full_screenshots
|
27
|
-
ChromedriverScreenshot::Platforms.create_platform(self)
|
28
|
+
ChromedriverScreenshot::Platforms.create_platform(self, @@use_selenium_2)
|
28
29
|
|
29
30
|
screenshot = ChromedriverScreenshot::Page.new.full_screenshot
|
30
31
|
blob = screenshot.to_blob(:fast_rgb) # optimized for opaque images; greatly reduces runtime
|
@@ -33,6 +34,14 @@ module Selenium
|
|
33
34
|
window_screenshot
|
34
35
|
end
|
35
36
|
end
|
37
|
+
|
38
|
+
if @@use_selenium_2
|
39
|
+
alias_method :window_screenshot, :getScreenshot
|
40
|
+
alias_method :getScreenshot, :new_screenshot_method
|
41
|
+
else
|
42
|
+
alias_method :window_screenshot, :screenshot
|
43
|
+
alias_method :screenshot, :new_screenshot_method
|
44
|
+
end
|
36
45
|
end
|
37
46
|
end
|
38
47
|
end
|
@@ -1,11 +1,17 @@
|
|
1
1
|
module ChromedriverScreenshot
|
2
2
|
class Platforms
|
3
|
+
BODY_CLIENT_WIDTH = "document.body.clientWidth"
|
4
|
+
DOCUMENT_CLIENT_WIDTH = "document.documentElement.clientWidth"
|
5
|
+
BODY_CLIENT_HEIGHT = "document.body.clientHeight"
|
6
|
+
DOCUMENT_CLIENT_HEIGHT = "document.documentElement.clientHeight"
|
7
|
+
WINDOW_WIDTH_SCRIPT = "return Math.min(#{BODY_CLIENT_WIDTH}, #{DOCUMENT_CLIENT_WIDTH})"
|
8
|
+
WINDOW_HEIGHT_SCRIPT = "return Math.min(#{BODY_CLIENT_HEIGHT}, #{DOCUMENT_CLIENT_HEIGHT})"
|
3
9
|
def self.platform
|
4
10
|
@platform
|
5
11
|
end
|
6
12
|
|
7
|
-
def self.create_platform(bridge)
|
8
|
-
@platform = new(bridge)
|
13
|
+
def self.create_platform(bridge, use_selenium_2_methods)
|
14
|
+
@platform = new(bridge, use_selenium_2_methods)
|
9
15
|
end
|
10
16
|
|
11
17
|
def page_width
|
@@ -17,11 +23,11 @@ module ChromedriverScreenshot
|
|
17
23
|
end
|
18
24
|
|
19
25
|
def window_width
|
20
|
-
@window_width ||= execute_script
|
26
|
+
@window_width ||= execute_script WINDOW_WIDTH_SCRIPT
|
21
27
|
end
|
22
28
|
|
23
29
|
def window_height
|
24
|
-
@window_height ||= execute_script
|
30
|
+
@window_height ||= execute_script WINDOW_HEIGHT_SCRIPT
|
25
31
|
end
|
26
32
|
|
27
33
|
def window_x
|
@@ -43,12 +49,17 @@ module ChromedriverScreenshot
|
|
43
49
|
|
44
50
|
private
|
45
51
|
|
46
|
-
def initialize(bridge)
|
52
|
+
def initialize(bridge, use_version_2)
|
47
53
|
@bridge = bridge
|
54
|
+
@use_version_2 = use_version_2
|
48
55
|
end
|
49
56
|
|
50
57
|
def execute_script(script)
|
51
|
-
@
|
58
|
+
if @use_version_2
|
59
|
+
@bridge.executeScript(script)
|
60
|
+
else
|
61
|
+
@bridge.execute_script(script)
|
62
|
+
end
|
52
63
|
end
|
53
64
|
end
|
54
65
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chromedriver-screenshot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean MacGahan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oily_png
|
@@ -28,16 +28,30 @@ dependencies:
|
|
28
28
|
name: selenium-webdriver
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: appraisal
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.1.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
54
|
+
version: 2.1.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: 10.5.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rmagick
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.16.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 2.16.0
|
83
111
|
description: Full-page screenshots for Chrome in Selenium WebDriver
|
84
112
|
email: smacgaha@gmail.com
|
85
113
|
executables: []
|
@@ -89,6 +117,7 @@ files:
|
|
89
117
|
- ".gitignore"
|
90
118
|
- ".rspec"
|
91
119
|
- ".travis.yml"
|
120
|
+
- Appraisals
|
92
121
|
- CHANGELOG.md
|
93
122
|
- Gemfile
|
94
123
|
- LICENSE
|
@@ -102,7 +131,10 @@ files:
|
|
102
131
|
- features/support/fixtures/single_window_image/smiley_face.png
|
103
132
|
- features/support/fixtures/single_window_image/test_page.html
|
104
133
|
- features/support/hooks.rb
|
134
|
+
- features/support/image.rb
|
105
135
|
- features/support/step_helpers.rb
|
136
|
+
- gemfiles/selenium_2.gemfile
|
137
|
+
- gemfiles/selenium_3.gemfile
|
106
138
|
- lib/chromedriver-screenshot.rb
|
107
139
|
- lib/chromedriver-screenshot/page.rb
|
108
140
|
- lib/chromedriver-screenshot/platforms.rb
|