eyes_selenium 2.38.0 → 2.39.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: 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