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 +4 -4
- data/.rubocop.yml +3 -0
- data/examples/watir_test_script.rb +2 -2
- data/eyes_selenium.gemspec +21 -5
- data/lib/applitools/eyes.rb +15 -3
- data/lib/applitools/eyes_logger.rb +2 -4
- data/lib/applitools/poltergeist/applitools_compatible.rb +28 -0
- data/lib/applitools/poltergeist/driver.rb +11 -0
- data/lib/applitools/selenium/driver.rb +0 -2
- data/lib/applitools/selenium/element.rb +8 -1
- data/lib/applitools/selenium/viewport_size.rb +10 -7
- data/lib/applitools/version.rb +1 -1
- data/lib/eyes_selenium.rb +1 -1
- data/spec/driver_passthrough_spec.rb +10 -0
- metadata +23 -36
- data/lib/applitools/watir_browser.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd32f2f7bfa22643fd6639e2d9cf44564d6fede3
|
4
|
+
data.tar.gz: 2a2b3b5458dcd6d581d54601055ec7683bcdfc8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c1370db2044afad9f6357f18fa9f6f4fc211d84a31a62c27a83f4611c5230531dd727636519e7e1be7bd6a05e59b0766476ee8aa395a7257fb8892dbf7ca7c7
|
7
|
+
data.tar.gz: 533e01b894784508b098e54859e77bb602c5499a82de81fa6c187404bf94594a096459fdc27f324944a83558cd22612281d32ba5fc84603d474211da91adb33c
|
data/.rubocop.yml
CHANGED
@@ -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')
|
data/eyes_selenium.gemspec
CHANGED
@@ -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
|
-
|
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.
|
data/lib/applitools/eyes.rb
CHANGED
@@ -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
|
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
|
-
|
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
|
|
@@ -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
|
@@ -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?
|
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
|
-
|
76
|
-
|
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
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
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.'
|
data/lib/applitools/version.rb
CHANGED
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.
|
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:
|
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:
|
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:
|
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.
|
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
|