eyes_selenium 2.38.0 → 2.39.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: 3f99be729477dfe4620d7e5a34ac8bdf7c72b0d0
4
- data.tar.gz: 960476bb8f22adb7348a2ff3c17b9785bb9c3bf7
3
+ metadata.gz: fd32f2f7bfa22643fd6639e2d9cf44564d6fede3
4
+ data.tar.gz: 2a2b3b5458dcd6d581d54601055ec7683bcdfc8e
5
5
  SHA512:
6
- metadata.gz: 479fedebff785cec3a5bcc440fc9bb700713ecc70c84e2e5eef786ff9e4cb3306753ffef4766534fa7f5df95ef1f4d89a56028dd8760bb16b2b958ae2b760868
7
- data.tar.gz: 2001fcb0b69a988b981bd3952e85121e968ab210d8c969593439d36d2b75351a318f3ac2f46e8c22725951f68bdda113816b0ff740d458328f3d3010b339cda9
6
+ metadata.gz: 3c1370db2044afad9f6357f18fa9f6f4fc211d84a31a62c27a83f4611c5230531dd727636519e7e1be7bd6a05e59b0766476ee8aa395a7257fb8892dbf7ca7c7
7
+ data.tar.gz: 533e01b894784508b098e54859e77bb602c5499a82de81fa6c187404bf94594a096459fdc27f324944a83558cd22612281d32ba5fc84603d474211da91adb33c
data/.rubocop.yml CHANGED
@@ -23,6 +23,9 @@ Metrics/AbcSize:
23
23
  Metrics/BlockNesting:
24
24
  Max: 4
25
25
 
26
+ Metrics/BlockLength:
27
+ Max: 50
28
+
26
29
  Style/SignalException:
27
30
  EnforcedStyle: only_raise
28
31
 
@@ -9,11 +9,11 @@ eyes = Applitools::Eyes.new
9
9
  eyes.api_key = ENV['APPLITOOLS_API_KEY']
10
10
  eyes.log_handler = Logger.new(STDOUT)
11
11
 
12
- browser = Watir::Browser.new
12
+ browser = Watir::Browser.new :chrome
13
13
 
14
14
  begin
15
15
  eyes.test(app_name: 'Ruby SDK', test_name: 'Applitools website test', viewport_size: { width: 900, height: 600 },
16
- driver: browser) do |driver|
16
+ driver: browser.driver) do |driver|
17
17
  driver.get 'http://www.applitools.com'
18
18
  eyes.check_window('initial')
19
19
  eyes.check_region(:css, '.pricing', 'Pricing button')
@@ -8,8 +8,9 @@ CURRENT_RYBY_VERSION = Gem::Version.new RUBY_VERSION
8
8
  RUBY_1_9_3 = Gem::Version.new '1.9.3'
9
9
  RUBY_2_0_0 = Gem::Version.new '2.0.0'
10
10
  RUBY_2_2_2 = Gem::Version.new '2.2.2'
11
+ RUBY_2_4_0 = Gem::Version.new '2.4.0'
11
12
 
12
- RUBY_KEY = [RUBY_1_9_3, RUBY_2_0_0, RUBY_2_2_2].select { |v| v <= CURRENT_RYBY_VERSION }.last
13
+ RUBY_KEY = [RUBY_1_9_3, RUBY_2_0_0, RUBY_2_2_2, RUBY_2_4_0].select { |v| v <= CURRENT_RYBY_VERSION }.last
13
14
 
14
15
  EYES_GEM_SPECS = {
15
16
  RUBY_1_9_3 => proc do |spec|
@@ -19,13 +20,28 @@ EYES_GEM_SPECS = {
19
20
  spec.add_development_dependency 'rubocop', ['~> 0.41.1']
20
21
  spec.add_development_dependency 'cmdparse', ['= 2.0.2']
21
22
  spec.add_development_dependency 'net-ssh', ['<= 3.0.0']
23
+ spec.add_development_dependency 'net-http-persistent', ['< 3.0.0']
24
+ spec.add_development_dependency 'sauce'
25
+ spec.add_dependency 'nokogiri', '~> 1.6.0'
26
+ spec.add_dependency 'public_suffix', '< 1.5.0'
27
+ spec.add_dependency 'appium_lib', '< 9.1'
22
28
  end,
23
29
  RUBY_2_0_0 => proc do |spec|
24
30
  spec.add_development_dependency 'rack', ['~> 1.6.0']
25
- spec.add_development_dependency 'rubocop'
31
+ spec.add_development_dependency 'rubocop', ['<= 0.46.0']
32
+ spec.add_development_dependency 'net-http-persistent', ['< 3.0.0']
33
+ spec.add_development_dependency 'sauce'
34
+ spec.add_dependency 'nokogiri', '~> 1.6.0'
35
+ spec.add_development_dependency 'appium_lib', '< 9.1'
26
36
  end,
27
37
  RUBY_2_2_2 => proc do |spec|
28
- spec.add_development_dependency 'rubocop'
38
+ spec.add_development_dependency 'rubocop', ['<= 0.46.0']
39
+ spec.add_development_dependency 'sauce'
40
+ spec.add_development_dependency 'appium_lib'
41
+ end,
42
+ RUBY_2_4_0 => proc do |spec|
43
+ spec.add_development_dependency 'appium_lib'
44
+ spec.add_development_dependency 'rubocop', ['<= 0.46.0']
29
45
  end
30
46
  }.freeze
31
47
 
@@ -45,6 +61,7 @@ Gem::Specification.new do |spec|
45
61
  spec.require_paths = ['lib']
46
62
 
47
63
  spec.add_dependency 'selenium-webdriver', '>= 2.45.0'
64
+ spec.add_dependency 'poltergeist', '~> 1.9'
48
65
  spec.add_dependency 'oily_png', '~> 1.2'
49
66
  spec.add_dependency 'chunky_png', '= 1.3.6'
50
67
  spec.add_dependency 'faraday'
@@ -53,10 +70,9 @@ Gem::Specification.new do |spec|
53
70
  spec.add_development_dependency 'bundler'
54
71
  spec.add_development_dependency 'rake'
55
72
  spec.add_development_dependency 'capybara'
56
- spec.add_development_dependency 'sauce'
57
73
  spec.add_development_dependency 'rspec', '>= 3'
58
74
  spec.add_development_dependency 'watir-webdriver'
59
- spec.add_development_dependency 'appium_lib'
75
+
60
76
  EYES_GEM_SPECS[RUBY_KEY].call spec
61
77
 
62
78
  # Exclude debugging support on Travis CI, due to its incompatibility with jruby and older rubies.
@@ -1,3 +1,5 @@
1
+ require 'capybara/poltergeist'
2
+
1
3
  require_relative 'version'
2
4
  require_relative 'eyes_logger'
3
5
 
@@ -74,7 +76,7 @@ class Applitools::Eyes
74
76
  # the default value.
75
77
  # +debug_screenshot+:: +boolean+ If true saves every taken screenshot in current folder. File name has following
76
78
  # format: +TAG_YYYY_MM_DD_HH_MI__N.png+, where +TAG+ - the tag specified for the test,
77
- # +YYYY_MM_DD_HH_MI+ - date && time, +N+ - screenshot number (makes sence only when
79
+ # +YYYY_MM_DD_HH_MI+ - date && time, +N+ - screenshot number (makes sense only when
78
80
  # +force_fullpage_screenshot+ is true). Default value is false
79
81
 
80
82
  attr_reader :app_name, :test_name, :is_open, :viewport_size, :driver, :passed_driver
@@ -141,9 +143,19 @@ class Applitools::Eyes
141
143
  @driver = driver.driver_for_eyes self
142
144
  else
143
145
  unless driver.is_a?(Applitools::Selenium::Driver)
144
- Applitools::EyesLogger.warn("Unrecognized driver type: (#{driver.class.name})!")
145
146
  is_mobile_device = driver.respond_to?(:capabilities) && driver.capabilities['platformName']
146
- @driver = Applitools::Selenium::Driver.new(self, driver: driver, is_mobile_device: is_mobile_device)
147
+
148
+ @driver =
149
+ case driver
150
+ when Selenium::WebDriver
151
+ Applitools::Selenium::Driver.new(self, driver: driver, is_mobile_device: is_mobile_device)
152
+ when Capybara::Poltergeist::Driver # driver for PhantomJS
153
+ Applitools::Poltergeist::Driver.new(self, driver: driver, is_mobile_device: is_mobile_device)
154
+ else
155
+ Applitools::EyesLogger.warn("Unrecognized driver type: (#{driver.class.name})!")
156
+ Applitools::Selenium::Driver.new(self, driver: driver, is_mobile_device: is_mobile_device)
157
+ end
158
+
147
159
  end
148
160
  end
149
161
 
@@ -3,11 +3,9 @@ require 'forwardable'
3
3
 
4
4
  module Applitools::EyesLogger
5
5
  class NullLogger < Logger
6
- def initialize(*_args)
7
- end
6
+ def initialize(*_args) end
8
7
 
9
- def add(*_args, &_block)
10
- end
8
+ def add(*_args, &_block) end
11
9
  end
12
10
 
13
11
  extend Forwardable
@@ -0,0 +1,28 @@
1
+ # This module is used for compatibility with Applitools API.
2
+ # Should be extended by Poltergeist driver instance.
3
+ module Applitools::Poltergeist
4
+ module ApplitoolsCompatible
5
+ # Implementation of `screenshot_as` method for PhantomJS.
6
+ # Realisation uses Poltergeist binding to `renderBase64` PhantomJS method.
7
+ def screenshot_as(fmt)
8
+ Base64.decode64(browser.render_base64(fmt))
9
+ end
10
+
11
+ # Poltergeist driver does not have `manage` and `window` methods.
12
+ # In Applitools these methods are used in a chain to get size by `size` method call.
13
+ %w(manage window).each do |method_name|
14
+ define_method(method_name) { self }
15
+ end
16
+
17
+ # Method provides opened window size in Applitools format.
18
+ def size
19
+ size = window_size(current_window_handle)
20
+ Applitools::Base::Dimension.new(size[0], size[1])
21
+ end
22
+
23
+ # Method changes opened window size in a way how original Applitools::Selenium::Driver does.
24
+ def size=(new_size)
25
+ resize(new_size.width, new_size.height)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ # Applitools::Poltergeist::Driver is a small class implemented
2
+ # for compatibility with Applitools API.
3
+ # It gives required for Applitools methods to Poltergeist driver.
4
+ module Applitools::Poltergeist
5
+ class Driver < Applitools::Selenium::Driver
6
+ def initialize(eyes, options)
7
+ options[:driver].extend Applitools::Poltergeist::ApplitoolsCompatible
8
+ super(eyes, options)
9
+ end
10
+ end
11
+ end
@@ -6,8 +6,6 @@ module Applitools::Selenium
6
6
  class Driver < SimpleDelegator
7
7
  extend Forwardable
8
8
 
9
- include Selenium::WebDriver::DriverExtensions::HasInputDevices
10
-
11
9
  RIGHT_ANGLE = 90
12
10
  IOS = 'IOS'.freeze
13
11
  ANDROID = 'ANDROID'.freeze
@@ -12,6 +12,8 @@ module Applitools::Selenium
12
12
  @web_element ||= __getobj__
13
13
  end
14
14
 
15
+ protected :web_element
16
+
15
17
  def click
16
18
  current_control = region
17
19
  offset = current_control.middle_offset
@@ -25,8 +27,13 @@ module Applitools::Selenium
25
27
  end
26
28
 
27
29
  def ==(other)
28
- other.is_a?(web_element.class) && web_element == other
30
+ if other.is_a? self.class
31
+ super other.web_element
32
+ else
33
+ super other
34
+ end
29
35
  end
36
+
30
37
  alias eql? ==
31
38
 
32
39
  def send_keys(*args)
@@ -72,8 +72,10 @@ module Applitools::Selenium
72
72
 
73
73
  browser_size_calculation_count = 0
74
74
  while browser_size_calculation_count < BROWSER_SIZE_CALCULATION_RETRIES
75
- raise Applitools::TestFailedError.new 'Failed to set browser size!' \
76
- " (current size: #{browser_size})" unless resize_attempt
75
+ unless resize_attempt
76
+ raise Applitools::TestFailedError.new 'Failed to set browser size!' \
77
+ " (current size: #{browser_size})"
78
+ end
77
79
  browser_size_calculation_count += 1
78
80
  if viewport_size == size
79
81
  Applitools::EyesLogger.debug "Actual viewport size #{viewport_size}"
@@ -107,11 +109,12 @@ module Applitools::Selenium
107
109
  return dimension if dimension.is_a? ::Selenium::WebDriver::Dimension
108
110
  return Applitools::Base::Dimension.for(dimension) if dimension.respond_to?(:width) &
109
111
  dimension.respond_to?(:height)
110
- return Applitools::Base::Dimension.new(
111
- dimension[:width],
112
- dimension[:height]
113
- ) if dimension.is_a?(Hash) && (dimension.keys & [:width, :height]).size == 2
114
-
112
+ if dimension.is_a?(Hash) && (dimension.keys & [:width, :height]).size == 2
113
+ return Applitools::Base::Dimension.new(
114
+ dimension[:width],
115
+ dimension[:height]
116
+ )
117
+ end
115
118
  raise ArgumentError,
116
119
  "expected #{@dimension.inspect}:#{@dimension.class} to respond to #width and #height," \
117
120
  ' or be a hash with these keys.'
@@ -1,3 +1,3 @@
1
1
  module Applitools
2
- VERSION = '2.38.0'.freeze
2
+ VERSION = '2.39.0'.freeze
3
3
  end
data/lib/eyes_selenium.rb CHANGED
@@ -30,11 +30,11 @@ require_relative 'applitools/version'
30
30
  Applitools.require_dir 'base'
31
31
  Applitools.require_dir 'utils'
32
32
  Applitools.require_dir 'selenium'
33
+ Applitools.require_dir 'poltergeist'
33
34
 
34
35
  require_relative 'applitools/eyes'
35
36
  require_relative 'applitools/selenium_webdriver'
36
37
  require_relative 'applitools/appium_driver'
37
- require_relative 'applitools/watir_browser'
38
38
 
39
39
  if defined? Sauce
40
40
  require 'applitools/sauce'
@@ -37,6 +37,16 @@ describe 'passthrough methods' do
37
37
  expect(link).not_to be_nil
38
38
  expect(link).to be_a(Applitools::Selenium::Element)
39
39
  end
40
+
41
+ # From the Selenium tests
42
+ # @see https://github.com/SeleniumHQ/selenium/blob/7e2cca5/rb/spec/integration/selenium/webdriver/element_spec.rb#L192
43
+ it 'should know when two elements are equal' do
44
+ body = @driver.find_element(tag_name: 'body')
45
+ xbody = @driver.find_element(xpath: '//body')
46
+
47
+ expect(body).to eq(xbody)
48
+ expect(body).to eql(xbody)
49
+ end
40
50
  end
41
51
 
42
52
  context 'all elements' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eyes_selenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.38.0
4
+ version: 2.39.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-28 00:00:00.000000000 Z
11
+ date: 2017-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.45.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: poltergeist
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.9'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.9'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: oily_png
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +136,6 @@ dependencies:
122
136
  - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: sauce
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rspec
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -178,34 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: rack
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: 1.6.0
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: 1.6.0
195
181
  - !ruby/object:Gem::Dependency
196
182
  name: rubocop
197
183
  requirement: !ruby/object:Gem::Requirement
198
184
  requirements:
199
- - - ">="
185
+ - - "<="
200
186
  - !ruby/object:Gem::Version
201
- version: '0'
187
+ version: 0.46.0
202
188
  type: :development
203
189
  prerelease: false
204
190
  version_requirements: !ruby/object:Gem::Requirement
205
191
  requirements:
206
- - - ">="
192
+ - - "<="
207
193
  - !ruby/object:Gem::Version
208
- version: '0'
194
+ version: 0.46.0
209
195
  - !ruby/object:Gem::Dependency
210
196
  name: pry
211
197
  requirement: !ruby/object:Gem::Requirement
@@ -317,6 +303,8 @@ files:
317
303
  - lib/applitools/eyes.rb
318
304
  - lib/applitools/eyes_logger.rb
319
305
  - lib/applitools/method_tracer.rb
306
+ - lib/applitools/poltergeist/applitools_compatible.rb
307
+ - lib/applitools/poltergeist/driver.rb
320
308
  - lib/applitools/sauce.rb
321
309
  - lib/applitools/selenium/browser.rb
322
310
  - lib/applitools/selenium/capybara/capybara_settings.rb
@@ -334,7 +322,6 @@ files:
334
322
  - lib/applitools/utils/image_utils.rb
335
323
  - lib/applitools/utils/utils.rb
336
324
  - lib/applitools/version.rb
337
- - lib/applitools/watir_browser.rb
338
325
  - lib/eyes_selenium.rb
339
326
  - spec/driver_passthrough_spec.rb
340
327
  - spec/fixtures/static_test_file.html
@@ -359,7 +346,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
359
346
  version: '0'
360
347
  requirements: []
361
348
  rubyforge_project:
362
- rubygems_version: 2.4.6
349
+ rubygems_version: 2.6.8
363
350
  signing_key:
364
351
  specification_version: 4
365
352
  summary: Applitools Ruby SDK
@@ -1,8 +0,0 @@
1
- if defined? Watir::Browser
2
- Watir::Browser.class_eval do
3
- def driver_for_eyes(eyes)
4
- is_mobile_device = driver.capabilities['platformName'] ? true : false
5
- Applitools::Selenium::Driver.new(eyes, driver: driver, is_mobile_device: is_mobile_device)
6
- end
7
- end
8
- end