eyes_selenium 2.16.0 → 2.17.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 +4 -4
- data/.rubocop.yml +54 -0
- data/.travis.yml +2 -0
- data/Rakefile +3 -0
- data/eyes_selenium.gemspec +3 -2
- data/lib/applitools/base/image_position.rb +10 -0
- data/lib/applitools/base/mouse_trigger.rb +1 -1
- data/lib/applitools/base/point.rb +18 -5
- data/lib/applitools/base/region.rb +44 -9
- data/lib/applitools/base/server_connector.rb +7 -6
- data/lib/applitools/base/test_results.rb +4 -5
- data/lib/applitools/extensions.rb +17 -0
- data/lib/applitools/eyes.rb +40 -32
- data/lib/applitools/eyes_logger.rb +7 -7
- data/lib/applitools/method_tracer.rb +2 -2
- data/lib/applitools/selenium/browser.rb +220 -0
- data/lib/applitools/selenium/driver.rb +61 -59
- data/lib/applitools/selenium/element.rb +10 -5
- data/lib/applitools/selenium/match_window_data.rb +1 -1
- data/lib/applitools/selenium/match_window_task.rb +25 -18
- data/lib/applitools/selenium/mouse.rb +3 -3
- data/lib/applitools/selenium/viewport_size.rb +57 -48
- data/lib/applitools/utils/image_delta_compressor.rb +148 -150
- data/lib/applitools/utils/image_utils.rb +36 -3
- data/lib/applitools/utils/utils.rb +3 -6
- data/lib/applitools/version.rb +1 -1
- data/lib/eyes_selenium.rb +2 -2
- data/spec/driver_passthrough_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -5
- data/test/appium_example_script.rb +15 -15
- data/test/test_script.rb +1 -1
- data/test/watir_test_script.rb +1 -1
- metadata +23 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 250fb34d1762517235653022b1912a310f725030
|
4
|
+
data.tar.gz: e72d68a5d5927ad9bf4deaef8375820cc5c8fe23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e86ee6df164195fd10b9b66032ca7132fd53deadca423ce904672e553b76e92f55c8f99f195d90bcf5217ebecf695a01aa86c5d62afa4cd6f9559e7cfa7b436
|
7
|
+
data.tar.gz: 41c97cde1b72b9dee573fec079fc80f6a3823c1ea00e41e45778a48743c10fe7292222d2a4a77a761f5dbe9dcdcc659dcc3de3fedc857496a4f47bdfc0d7d6ce
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# Custom config for RuboCop static code analysis
|
2
|
+
Metrics/LineLength:
|
3
|
+
Max: 120
|
4
|
+
|
5
|
+
Metrics/MethodLength:
|
6
|
+
Enabled: false
|
7
|
+
|
8
|
+
Metrics/ClassLength:
|
9
|
+
Enabled: false
|
10
|
+
|
11
|
+
Metrics/ParameterLists:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Metrics/CyclomaticComplexity:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Metrics/PerceivedComplexity:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Metrics/AbcSize:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Metrics/BlockNesting:
|
24
|
+
Max: 4
|
25
|
+
|
26
|
+
Style/SignalException:
|
27
|
+
EnforcedStyle: only_raise
|
28
|
+
|
29
|
+
Style/RaiseArgs:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
Style/AlignParameters:
|
33
|
+
EnforcedStyle: with_fixed_indentation
|
34
|
+
|
35
|
+
Style/HashSyntax:
|
36
|
+
UseHashRocketsWithSymbolValues: true
|
37
|
+
|
38
|
+
Style/AlignHash:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
Style/MultilineOperationIndentation:
|
42
|
+
EnforcedStyle: indented
|
43
|
+
|
44
|
+
Style/IndentHash:
|
45
|
+
EnforcedStyle: consistent
|
46
|
+
|
47
|
+
Style/ClassAndModuleChildren:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
Style/Documentation:
|
51
|
+
Enabled: false
|
52
|
+
|
53
|
+
Style/ModuleFunction:
|
54
|
+
Enabled: false
|
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
data/eyes_selenium.gemspec
CHANGED
@@ -13,13 +13,13 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'https://www.applitools.com'
|
14
14
|
spec.license = 'Apache License, Version 2.0'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split(
|
16
|
+
spec.files = `git ls-files`.split($RS)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_dependency 'selenium-webdriver', '>= 2.45.0'
|
22
|
-
spec.add_dependency 'oily_png'
|
22
|
+
spec.add_dependency 'oily_png', '>= 1.2'
|
23
23
|
spec.add_dependency 'faraday'
|
24
24
|
spec.add_dependency 'oj'
|
25
25
|
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency 'rspec', '>= 3'
|
29
29
|
spec.add_development_dependency 'watir-webdriver'
|
30
30
|
spec.add_development_dependency 'appium_lib'
|
31
|
+
spec.add_development_dependency 'rubocop'
|
31
32
|
|
32
33
|
# Exclude debugging support on Travis CI, due to its incompatibility with jruby and older rubies.
|
33
34
|
unless ENV['TRAVIS']
|
@@ -2,16 +2,29 @@ module Applitools::Base
|
|
2
2
|
class Point
|
3
3
|
attr_accessor :x, :y
|
4
4
|
|
5
|
+
alias_attribute :left, :x
|
6
|
+
alias_attribute :top, :y
|
7
|
+
|
5
8
|
def initialize(x, y)
|
6
9
|
@x = x
|
7
10
|
@y = y
|
8
11
|
end
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
TOP_LEFT = Point.new(0, 0)
|
14
|
+
|
15
|
+
def ==(other)
|
16
|
+
return super.==(other) unless other.is_a?(Point)
|
17
|
+
@x == other.x && @y == other.y
|
18
|
+
end
|
19
|
+
|
20
|
+
def hash
|
21
|
+
@x.hash & @y.hash
|
22
|
+
end
|
23
|
+
|
24
|
+
alias_method :eql?, :==
|
25
|
+
|
26
|
+
def to_hash(options = {})
|
27
|
+
options[:region] ? { left: left, top: top } : { x: x, y: y }
|
15
28
|
end
|
16
29
|
|
17
30
|
def values
|
@@ -9,7 +9,7 @@ module Applitools::Base
|
|
9
9
|
@height = height.round
|
10
10
|
end
|
11
11
|
|
12
|
-
EMPTY =
|
12
|
+
EMPTY = Region.new(0, 0, 0, 0)
|
13
13
|
|
14
14
|
def make_empty
|
15
15
|
@left = EMPTY.left
|
@@ -19,7 +19,7 @@ module Applitools::Base
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def empty?
|
22
|
-
|
22
|
+
@left == EMPTY.left && @top == EMPTY.top && @width == EMPTY.width && @height == EMPTY.height
|
23
23
|
end
|
24
24
|
|
25
25
|
def right
|
@@ -31,14 +31,17 @@ module Applitools::Base
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def intersecting?(other)
|
34
|
-
((left <= other.left && other.left <= right) || (other.left <= left && left <= other.right))
|
35
|
-
|
34
|
+
((left <= other.left && other.left <= right) || (other.left <= left && left <= other.right)) &&
|
35
|
+
((top <= other.top && other.top <= bottom) || (other.top <= top && top <= other.bottom))
|
36
36
|
end
|
37
37
|
|
38
38
|
def intersect(other)
|
39
|
-
|
40
|
-
make_empty
|
39
|
+
unless intersecting?(other)
|
40
|
+
make_empty
|
41
|
+
|
42
|
+
return
|
41
43
|
end
|
44
|
+
|
42
45
|
i_left = (left >= other.left) ? left : other.left
|
43
46
|
i_right = (right <= other.right) ? right : other.right
|
44
47
|
i_top = (top >= other.top) ? top : other.top
|
@@ -51,14 +54,46 @@ module Applitools::Base
|
|
51
54
|
end
|
52
55
|
|
53
56
|
def contains?(other_left, other_top)
|
54
|
-
other_left >= left && other_left <= right &&
|
55
|
-
other_top >= top && other_top <= bottom
|
57
|
+
other_left >= left && other_left <= right && other_top >= top && other_top <= bottom
|
56
58
|
end
|
57
59
|
|
58
60
|
def middle_offset
|
59
61
|
mid_x = width / 2
|
60
62
|
mid_y = height / 2
|
61
|
-
|
63
|
+
Point.new(mid_x.round, mid_y.round)
|
64
|
+
end
|
65
|
+
|
66
|
+
def subregions(subregion_size)
|
67
|
+
[].tap do |subregions|
|
68
|
+
current_top = @top
|
69
|
+
bottom = @top + @height
|
70
|
+
right = @left + @width
|
71
|
+
subregion_width = [@width, subregion_size.width].min
|
72
|
+
subregion_height = [@height, subregion_size.height].min
|
73
|
+
|
74
|
+
while current_top < bottom
|
75
|
+
current_bottom = current_top + subregion_height
|
76
|
+
if current_bottom > bottom
|
77
|
+
current_bottom = bottom
|
78
|
+
current_top = current_bottom - subregion_height
|
79
|
+
end
|
80
|
+
|
81
|
+
current_left = @left
|
82
|
+
while current_left < right
|
83
|
+
current_right = current_left + subregion_width
|
84
|
+
if current_right > right
|
85
|
+
current_right = right
|
86
|
+
current_left = current_right - subregion_width
|
87
|
+
end
|
88
|
+
|
89
|
+
subregions << Region.new(current_left, current_top, subregion_width, subregion_height)
|
90
|
+
|
91
|
+
current_left += subregion_width
|
92
|
+
end
|
93
|
+
|
94
|
+
current_top += subregion_height
|
95
|
+
end
|
96
|
+
end
|
62
97
|
end
|
63
98
|
|
64
99
|
def to_hash
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
|
3
3
|
require 'oj'
|
4
|
-
Oj.default_options = {:mode => :compat }
|
4
|
+
Oj.default_options = { :mode => :compat }
|
5
5
|
|
6
6
|
require 'uri'
|
7
7
|
|
@@ -44,7 +44,8 @@ module Applitools::Base::ServerConnector
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def start_session(session_start_info)
|
47
|
-
res = post(endpoint_url, body: Oj.dump(startInfo:
|
47
|
+
res = post(endpoint_url, body: Oj.dump(startInfo:
|
48
|
+
Applitools::Utils.camelcase_hash_keys(session_start_info.to_hash)))
|
48
49
|
raise Applitools::EyesError.new("Request failed: #{res.status}") unless res.success?
|
49
50
|
|
50
51
|
response = Oj.load(res.body)
|
@@ -52,7 +53,7 @@ module Applitools::Base::ServerConnector
|
|
52
53
|
end
|
53
54
|
|
54
55
|
def stop_session(session, aborted = nil, save = false)
|
55
|
-
res = long_delete(URI.join(endpoint_url, session.id.to_s), query: {aborted: aborted, updateBaseline: save})
|
56
|
+
res = long_delete(URI.join(endpoint_url, session.id.to_s), query: { aborted: aborted, updateBaseline: save })
|
56
57
|
raise Applitools::EyesError.new("Request failed: #{res.status}") unless res.success?
|
57
58
|
|
58
59
|
response = Oj.load(res.body)
|
@@ -82,11 +83,11 @@ module Applitools::Base::ServerConnector
|
|
82
83
|
end
|
83
84
|
|
84
85
|
def request(url, method, options = {})
|
85
|
-
Faraday::Connection.new(url, ssl: {ca_file: SSL_CERT}).send(method) do |req|
|
86
|
+
Faraday::Connection.new(url, ssl: { ca_file: SSL_CERT }).send(method) do |req|
|
86
87
|
req.options.timeout = DEFAULT_TIMEOUT
|
87
88
|
req.headers = DEFAULT_HEADERS.merge(options[:headers] || {})
|
88
89
|
req.headers['Content-Type'] = options[:content_type] if options.key?(:content_type)
|
89
|
-
req.params = {apiKey: api_key}.merge(options[:query] || {})
|
90
|
+
req.params = { apiKey: api_key }.merge(options[:query] || {})
|
90
91
|
req.body = options[:body]
|
91
92
|
end
|
92
93
|
end
|
@@ -95,7 +96,7 @@ module Applitools::Base::ServerConnector
|
|
95
96
|
delay = LONG_REQUEST_DELAY
|
96
97
|
(options[:headers] ||= {})['Eyes-Expect'] = '202-accepted'
|
97
98
|
|
98
|
-
|
99
|
+
loop do
|
99
100
|
# Date should be in RFC 1123 format.
|
100
101
|
options[:headers]['Eyes-Date'] = Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')
|
101
102
|
|
@@ -2,7 +2,7 @@ module Applitools::Base
|
|
2
2
|
class TestResults
|
3
3
|
attr_accessor :is_new, :url
|
4
4
|
attr_reader :steps, :matches, :mismatches, :missing, :exact_matches, :strict_matches, :content_matches,
|
5
|
-
:layout_matches, :none_matches
|
5
|
+
:layout_matches, :none_matches
|
6
6
|
|
7
7
|
def initialize(steps = 0, matches = 0, mismatches = 0, missing = 0, exact_matches = 0, strict_matches = 0,
|
8
8
|
content_matches = 0, layout_matches = 0, none_matches = 0)
|
@@ -19,15 +19,14 @@ module Applitools::Base
|
|
19
19
|
@url = nil
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def passed?
|
23
23
|
!is_new && mismatches == 0 && missing == 0
|
24
24
|
end
|
25
|
+
alias_method :is_passed, :passed?
|
25
26
|
|
26
27
|
def to_s
|
27
28
|
is_new_str = ''
|
28
|
-
unless is_new.nil?
|
29
|
-
is_new_str = is_new ? 'New test' : 'Existing test'
|
30
|
-
end
|
29
|
+
is_new_str = is_new ? 'New test' : 'Existing test' unless is_new.nil?
|
31
30
|
|
32
31
|
"#{is_new_str} [ steps: #{steps}, matches: #{matches}, mismatches: #{mismatches}, missing: #{missing} ], "\
|
33
32
|
"URL: #{url}"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Module
|
2
|
+
def alias_attribute(new_name, old_name)
|
3
|
+
module_eval <<-STR, __FILE__, __LINE__ + 1
|
4
|
+
def #{new_name}
|
5
|
+
self.#{old_name}
|
6
|
+
end
|
7
|
+
|
8
|
+
def #{new_name}?
|
9
|
+
self.#{old_name}?
|
10
|
+
end
|
11
|
+
|
12
|
+
def #{new_name}=(v)
|
13
|
+
self.#{old_name}
|
14
|
+
end
|
15
|
+
STR
|
16
|
+
end
|
17
|
+
end
|
data/lib/applitools/eyes.rb
CHANGED
@@ -23,7 +23,9 @@ class Applitools::Eyes
|
|
23
23
|
DEFAULT_MATCH_TIMEOUT = 2.0.freeze # Seconds
|
24
24
|
BASE_AGENT_ID = ('eyes.selenium.ruby/' + Applitools::VERSION).freeze
|
25
25
|
|
26
|
-
|
26
|
+
ANDROID = 'Android'.freeze
|
27
|
+
IOS = 'iOS'.freeze
|
28
|
+
|
27
29
|
# Attributes:
|
28
30
|
#
|
29
31
|
# +app_name+:: +String+ The application name which was provided as an argument to +open+.
|
@@ -31,7 +33,8 @@ class Applitools::Eyes
|
|
31
33
|
# +is_open+:: +boolean+ Is there an open session.
|
32
34
|
# +viewport_size+:: +Hash+ The viewport size which was provided as an argument to +open+. Should include +width+
|
33
35
|
# and +height+.
|
34
|
-
# +driver+:: +Applitools::Selenium::Driver+ The driver instance wrapping the driver which was provided as an argument
|
36
|
+
# +driver+:: +Applitools::Selenium::Driver+ The driver instance wrapping the driver which was provided as an argument
|
37
|
+
# to +open+.
|
35
38
|
# +api_key+:: +String+ The user's API key.
|
36
39
|
# +match_timeout+:: +Float+ The default timeout for check_XXXX operations. (Seconds)
|
37
40
|
# +batch+:: +BatchInfo+ The current tests grouping, if any.
|
@@ -41,8 +44,8 @@ class Applitools::Eyes
|
|
41
44
|
# you wish to override Eyes' automatic inference.
|
42
45
|
# +branch_name+:: +String+ If set, names the branch in which the test should run.
|
43
46
|
# +parent_branch_name+:: +String+ If set, names the parent branch of the branch in which the test should run.
|
44
|
-
# +user_inputs+:: +Applitools::Base::MouseTrigger+/+Applitools::Selenium::KeyboardTrigger+ Mouse/Keyboard events which
|
45
|
-
# the last visual validation.
|
47
|
+
# +user_inputs+:: +Applitools::Base::MouseTrigger+/+Applitools::Selenium::KeyboardTrigger+ Mouse/Keyboard events which
|
48
|
+
# happened after the last visual validation.
|
46
49
|
# +save_new_tests+:: +boolean+ Whether or not new tests should be automatically accepted as baseline.
|
47
50
|
# +save_failed_tests+:: +boolean+ Whether or not failed tests should be automatically accepted as baseline.
|
48
51
|
# +match_level+:: +String+ The default match level for the entire session. See +Applitools::Eyes::MATCH_LEVEL+.
|
@@ -58,10 +61,14 @@ class Applitools::Eyes
|
|
58
61
|
# +rotation+:: +Integer+|+nil+ The degrees by which to rotate the screenshots received from the driver. Set this to
|
59
62
|
# override Eyes' automatic rotation inference. Positive values = clockwise rotation, negative
|
60
63
|
# values = counter-clockwise, 0 = force no rotation, +nil+ = use Eyes' automatic rotation inference.
|
64
|
+
# +force_fullpage_screenshot+:: +boolean+ Whether or not to force fullpage screenshot taking, if the browser doesn't
|
65
|
+
# support it explicitly.
|
66
|
+
# +hide_scrollbars+:: +boolean+ Whether or not hide scrollbars.
|
67
|
+
# +use_css_transition+:: +boolean+ Whether or not to perform CSS transition.
|
61
68
|
attr_reader :app_name, :test_name, :is_open, :viewport_size, :driver
|
62
69
|
attr_accessor :match_timeout, :batch, :host_os, :host_app, :branch_name, :parent_branch_name, :user_inputs,
|
63
70
|
:save_new_tests, :save_failed_tests, :is_disabled, :server_url, :agent_id, :failure_reports, :match_level,
|
64
|
-
:baseline_name, :rotation
|
71
|
+
:baseline_name, :rotation, :force_fullpage_screenshot, :hide_scrollbars, :use_css_transition
|
65
72
|
|
66
73
|
def_delegators 'Applitools::EyesLogger', :log_handler, :log_handler=
|
67
74
|
def_delegators 'Applitools::Base::ServerConnector', :api_key, :api_key=, :server_url, :server_url=
|
@@ -98,6 +105,9 @@ class Applitools::Eyes
|
|
98
105
|
@save_new_tests = true
|
99
106
|
@save_failed_tests = false
|
100
107
|
@dont_get_title = false
|
108
|
+
@force_fullpage_screenshot = false
|
109
|
+
@hide_scrollbars = false
|
110
|
+
@use_css_transition = false
|
101
111
|
end
|
102
112
|
|
103
113
|
def open(options = {})
|
@@ -105,7 +115,7 @@ class Applitools::Eyes
|
|
105
115
|
return driver if disabled?
|
106
116
|
|
107
117
|
if api_key.nil?
|
108
|
-
raise Applitools::EyesError.new(
|
118
|
+
raise Applitools::EyesError.new('API key not set! Log in to https://applitools.com to obtain your API Key and '\
|
109
119
|
"use 'api_key' to set it.")
|
110
120
|
end
|
111
121
|
|
@@ -180,7 +190,7 @@ class Applitools::Eyes
|
|
180
190
|
check_region_(Applitools::Base::Region::EMPTY, tag, specific_timeout)
|
181
191
|
end
|
182
192
|
|
183
|
-
def close(raise_ex=true)
|
193
|
+
def close(raise_ex = true)
|
184
194
|
return if disabled?
|
185
195
|
@is_open = false
|
186
196
|
|
@@ -217,7 +227,7 @@ class Applitools::Eyes
|
|
217
227
|
return results
|
218
228
|
end
|
219
229
|
|
220
|
-
unless results.
|
230
|
+
unless results.passed?
|
221
231
|
# Test failed
|
222
232
|
Applitools::EyesLogger.info "--- Failed test ended. See details at #{session_results_url}"
|
223
233
|
|
@@ -246,15 +256,13 @@ class Applitools::Eyes
|
|
246
256
|
# get "http://www.google.com"
|
247
257
|
# check_window("initial")
|
248
258
|
# end
|
249
|
-
#noinspection RubyUnusedLocalVariable
|
250
|
-
def test(options = {}, &
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
abort_if_not_closed
|
257
|
-
end
|
259
|
+
# noinspection RubyUnusedLocalVariable
|
260
|
+
def test(options = {}, &_block)
|
261
|
+
open(options)
|
262
|
+
yield(driver)
|
263
|
+
close
|
264
|
+
ensure
|
265
|
+
abort_if_not_closed
|
258
266
|
end
|
259
267
|
|
260
268
|
def abort_if_not_closed
|
@@ -266,7 +274,7 @@ class Applitools::Eyes
|
|
266
274
|
|
267
275
|
begin
|
268
276
|
Applitools::Base::ServerConnector.stop_session(@session, true, false)
|
269
|
-
rescue
|
277
|
+
rescue => e
|
270
278
|
Applitools::EyesLogger.error "Failed to abort server session: #{e.message}!"
|
271
279
|
ensure
|
272
280
|
@session = nil
|
@@ -280,8 +288,8 @@ class Applitools::Eyes
|
|
280
288
|
end
|
281
289
|
|
282
290
|
def get_driver(options)
|
283
|
-
# TODO remove the "browser" related block when possible. It's for backward compatibility.
|
284
|
-
if options.
|
291
|
+
# TODO: remove the "browser" related block when possible. It's for backward compatibility.
|
292
|
+
if options.key?(:browser)
|
285
293
|
Applitools::EyesLogger.warn('"browser" key is deprecated, please use "driver" instead.')
|
286
294
|
|
287
295
|
return options[:browser]
|
@@ -308,10 +316,10 @@ class Applitools::Eyes
|
|
308
316
|
Applitools::EyesLogger.info 'Mobile device detected! Checking device type..'
|
309
317
|
if driver.android?
|
310
318
|
Applitools::EyesLogger.info 'Android detected.'
|
311
|
-
platform_name =
|
319
|
+
platform_name = ANDROID
|
312
320
|
elsif driver.ios?
|
313
321
|
Applitools::EyesLogger.info 'iOS detected.'
|
314
|
-
platform_name =
|
322
|
+
platform_name = IOS
|
315
323
|
else
|
316
324
|
Applitools::EyesLogger.warn 'Unknown device type.'
|
317
325
|
end
|
@@ -379,15 +387,15 @@ class Applitools::Eyes
|
|
379
387
|
as_expected = @match_window_task.match_window(region, specific_timeout, tag, rotation,
|
380
388
|
@should_match_window_run_once_on_timeout)
|
381
389
|
Applitools::EyesLogger.debug 'Match window done!'
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
390
|
+
return if as_expected
|
391
|
+
|
392
|
+
@should_match_window_run_once_on_timeout = true
|
393
|
+
return if @session.new_session?
|
394
|
+
|
395
|
+
Applitools::EyesLogger.info %( mismatch #{ tag ? '' : "(#{tag})" } )
|
396
|
+
return unless failure_reports.to_i == Applitools::Eyes::FAILURE_REPORTS[:immediate]
|
397
|
+
|
398
|
+
raise Applitools::TestFailedError.new("Mismatch found in '#{@session_start_info.scenario_id_or_name}' "\
|
399
|
+
"of '#{@session_start_info.app_id_or_name}'")
|
392
400
|
end
|
393
401
|
end
|