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 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