chromedriver-screenshot 0.3.0 → 0.4.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/.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
|