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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d669b6828cdf8802b5b771efdec6219512f3cf97
4
- data.tar.gz: 82bf11763a57cff6a0d8337231393f32b92e4380
3
+ metadata.gz: 18e504d4f42af744fbf2ae1865e0f66e02f8954a
4
+ data.tar.gz: 25ea4dd2c07df554500b49733d33fe531fb640fb
5
5
  SHA512:
6
- metadata.gz: 9036f2eb0d7e3e6e8a7d924521db19ff227eed196439bc2bf9fddc08909b15d13455ee4d5c228c094c0a5848697ab51d461db2d406d1c359ead8d61131452dc8
7
- data.tar.gz: 6ebc32f50f58a4becd615154836abf3a6f408bb2fa06a459976b9eea589ae4e60187c52755504759707c4d915d043872e9cf02e2704f386f8b35d0c19efa2e77
6
+ metadata.gz: c50253ad37a6b2bdf2a0943e0048cd16ae0836791b7b992843406582a9f13526c719f57381219053882cd950e362624a086de3762db9b4bb6e372a14ef71d02f
7
+ data.tar.gz: c66caadcd1e538aae50e76928389dde0776113e52b40c6547735d31f41b5f0cfee6fa3e7b7e6e788852d2f910acaaff8796b07ab98c36e0040fb638e49b839b7
data/.gitignore CHANGED
@@ -26,6 +26,7 @@ build/
26
26
  # for a library or gem, you might want to ignore these files since the code is
27
27
  # intended to run in multiple environments; otherwise, check them in:
28
28
  Gemfile.lock
29
+ gemfiles/*.lock
29
30
  # .ruby-version
30
31
  # .ruby-gemset
31
32
 
@@ -2,6 +2,9 @@ language: ruby
2
2
  dist: trusty
3
3
  rvm:
4
4
  - 2.2
5
+ gemfile:
6
+ - gemfiles/selenium_2.gemfile
7
+ - gemfiles/selenium_3.gemfile
5
8
  cache: bundler
6
9
  before_script:
7
10
  - export CHROME_BIN=/usr/bin/google-chrome
@@ -0,0 +1,7 @@
1
+ appraise "selenium-2" do
2
+ gem "selenium-webdriver", "< 3.0"
3
+ end
4
+
5
+ appraise "selenium-3" do
6
+ gem "selenium-webdriver", ">= 3.0"
7
+ end
@@ -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
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015 Sean MacGahan
3
+ Copyright (c) 2016 The Orchard
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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 because Apple is a piece of shit. As a result, screenshots are cropped incorrectly.
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 the Retina bullshit
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", "~> 3.0"
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
- expected_screenshot = File.read(expected_screenshot_path)
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
@@ -1,4 +1,5 @@
1
1
  require "selenium-webdriver"
2
2
  require "chromedriver-screenshot"
3
+ require "rmagick"
3
4
 
4
5
  ChromedriverScreenshot.take_full_screenshots = true
@@ -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
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "selenium-webdriver", "< 3.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "selenium-webdriver", ">= 3.0"
6
+
7
+ gemspec :path => "../"
@@ -21,10 +21,11 @@ module Selenium
21
21
  module WebDriver
22
22
  module Remote
23
23
  class Bridge
24
- alias_method :window_screenshot, :screenshot
25
- def screenshot
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("return document.documentElement.clientWidth")
26
+ @window_width ||= execute_script WINDOW_WIDTH_SCRIPT
21
27
  end
22
28
 
23
29
  def window_height
24
- @window_height ||= execute_script("return document.documentElement.clientHeight")
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
- @bridge.execute_script(script)
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
@@ -1,3 +1,3 @@
1
1
  module ChromedriverScreenshot
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  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.3.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: 2016-12-06 00:00:00.000000000 Z
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: '3.0'
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: '3.0'
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