eyes_core 3.14.5 → 3.14.6

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
  SHA256:
3
- metadata.gz: 699fdaa843ddf61783611136c23a54748dbf14fb539f8277704560aec1987d4a
4
- data.tar.gz: 865d01e90e8b4167874101bf0e5888af1f2e2cd10f6a37f58d4bca8635fad1b0
3
+ metadata.gz: 76b1b9533c6ab0e561eb14fa9b80aedfae91846720fd7559b504f097517b37d3
4
+ data.tar.gz: 355309c1236932eb25b426464de828db42bd609a093271817b0ad1860d97d2d0
5
5
  SHA512:
6
- metadata.gz: 7ca423cd9645a0ea4e67077600aae06a377567063e5ac6b5e580da4cf0137bbc30ff2073ace51ceee44e6ef55c7790dc020e2ba73a5e336f9ac28137159cb33d
7
- data.tar.gz: eb4acf47dd5d0d6cd14172359c287d768b769121a14315c7d7135e9c2065039222a48ffc49c366db52a84007abdf2551a456cc2cb605772558b38a1d475df8f4
6
+ metadata.gz: af2aea48847d239d1f4c832b8168e821b1d1aa87841dd2ec9eb647f9f43e3c837a52f9a740dc11bdd765c1ff6eb342e146a55a1c4ebf16bdd71cfbf7308e7fa6
7
+ data.tar.gz: e90c28eef3e5b7f9cf8f5efa72eeb3dc6279675b893dd1a4858d3854f145a173e6c0bbd97f297e5b86cf4f85eee37c83c8d335ae34b62479aa1570f50b33a182
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Applitools::Appium
4
+ class Driver < Applitools::Selenium::Driver
5
+ attr_accessor :appium_driver
6
+ def initialize(eyes, options)
7
+ self.appium_driver = options.delete(:appium_driver)
8
+ super(eyes, options)
9
+ end
10
+ end
11
+ end
@@ -1,12 +1,115 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- module Applitools::Appium
4
- module Eyes
5
- def perform_driver_settings_for_appium_driver
6
- self.region_visibility_strategy = Applitools::Selenium::NopRegionVisibilityStrategy.new
7
- self.force_driver_resolution_as_viewport_size = true
3
+ class Applitools::Appium::Eyes < Applitools::Selenium::Eyes
4
+ def perform_driver_settings_for_appium_driver
5
+ self.region_visibility_strategy = Applitools::Selenium::NopRegionVisibilityStrategy.new
6
+ self.force_driver_resolution_as_viewport_size = true
7
+ end
8
+
9
+ def initialize(*args)
10
+ super
11
+ self.dont_get_title = true
12
+ end
13
+
14
+ private :perform_driver_settings_for_appium_driver
15
+
16
+ def check(name, target)
17
+ logger.info "check(#{name}) is called"
18
+ self.tag_for_debug = name
19
+ Applitools::ArgumentGuard.one_of? target, 'target', [Applitools::Selenium::Target, Applitools::Appium::Target]
20
+
21
+ return check_native(name, target) if native_app?
22
+ super
23
+ end
24
+
25
+ attr_accessor :eyes_element_to_check, :region_provider
26
+ private :eyes_element_to_check, :eyes_element_to_check=, :region_provider, :region_provider=
27
+
28
+ def check_native(name, target)
29
+ logger.info "check_native(#{name}) is called"
30
+ update_scaling_params
31
+ target_to_check = target.finalize
32
+ match_data = Applitools::MatchWindowData.new
33
+ match_data.tag = name
34
+ timeout = target_to_check.options[:timeout] || USE_DEFAULT_MATCH_TIMEOUT
35
+
36
+ eyes_element = target_to_check.region_to_check.call(driver)
37
+ self.eyes_element_to_check = eyes_element
38
+ region_provider = Applitools::Appium::RegionProvider.new(driver, eyes_element)
39
+ match_data.read_target(target_to_check, driver)
40
+
41
+ check_window_base(
42
+ region_provider, timeout, match_data
43
+ )
44
+ end
45
+
46
+ def native_app?
47
+ return true if driver.current_context == 'NATIVE_APP'
48
+ false
49
+ end
50
+
51
+ def capture_screenshot
52
+ logger.info 'Getting screenshot (capture_screenshot() has been invoked)'
53
+ case eyes_element_to_check
54
+ when Applitools::Region
55
+ viewport_screenshot
56
+ when Selenium::WebDriver::Element, Applitools::Selenium::Element
57
+ element_screenshot
8
58
  end
59
+ end
60
+
61
+ def get_app_output_with_screenshot(*args)
62
+ super do |screenshot|
63
+ if scale_provider
64
+ scaled_image = scale_provider.scale_image(screenshot.image)
65
+ self.screenshot = Applitools::Appium::Screenshot.new(
66
+ Applitools::Screenshot.from_image(
67
+ case scaled_image
68
+ when ChunkyPNG::Image
69
+ scaled_image
70
+ when Applitools::Screenshot::Datastream
71
+ scaled_image.image
72
+ else
73
+ raise Applitools::EyesError.new('Unknown image format after scale!')
74
+ end
75
+ )
76
+ )
77
+ end
78
+ end
79
+ end
80
+
81
+ def dom_data
82
+ {}
83
+ end
84
+
85
+ def check_window(tag = nil, match_timeout = USE_DEFAULT_MATCH_TIMEOUT)
86
+ target = Applitools::Appium::Target.window.tap do |t|
87
+ t.timeout(match_timeout)
88
+ end
89
+ check(tag, target)
90
+ end
91
+
92
+ def check_region(*args)
93
+ options = { timeout: USE_DEFAULT_MATCH_TIMEOUT, tag: nil }.merge! Applitools::Utils.extract_options!(args)
94
+ target = Applitools::Appium::Target.new.region(*args).timeout(options[:match_timeout])
95
+ check(options[:tag], target)
96
+ end
97
+
98
+ private
99
+
100
+ def viewport_screenshot
101
+ logger.info 'Viewport screenshot requested...'
102
+ self.screenshot = Applitools::Appium::Screenshot.new(
103
+ Applitools::Screenshot.from_datastream(driver.screenshot_as(:png))
104
+ )
105
+ end
9
106
 
10
- private :perform_driver_settings_for_appium_driver
107
+ def element_screenshot
108
+ logger.info 'Element screenshot requested...'
109
+ self.screenshot = Applitools::Appium::Screenshot.new(
110
+ Applitools::Screenshot.from_datastream(
111
+ driver.element_screenshot_as(eyes_element_to_check, :png)
112
+ )
113
+ )
11
114
  end
12
115
  end
@@ -13,10 +13,6 @@ module Applitools::Appium
13
13
  alias_method :super_current_scroll_position, :current_scroll_position
14
14
  include Applitools::Appium::Utils
15
15
  end
16
-
17
- Applitools::Selenium::Eyes.class_eval do
18
- include Applitools::Appium::Eyes
19
- end
20
16
  end
21
17
  end
22
18
  end
@@ -8,10 +8,6 @@ module Applitools::Appium
8
8
  prepend Applitools::Appium::Utils
9
9
  extend self
10
10
  end
11
-
12
- Applitools::Selenium::Eyes.class_eval do
13
- prepend Applitools::Appium::Eyes
14
- end
15
11
  end
16
12
  end
17
13
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Applitools
4
+ module Appium
5
+ class RegionProvider
6
+ attr_accessor :driver, :eye_region, :coordinate_type
7
+
8
+ def initialize(driver, eye_region)
9
+ self.driver = driver
10
+ self.eye_region = eye_region
11
+ end
12
+
13
+ def region
14
+ return Applitools::Region::EMPTY if
15
+ [::Selenium::WebDriver::Element, Applitools::Selenium::Element].include? eye_region.class
16
+ region = driver.session_capabilities['viewportRect']
17
+ Applitools::Region.new(
18
+ region['left'],
19
+ region['top'],
20
+ region['width'],
21
+ region['height']
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Applitools
4
+ module Appium
5
+ class Screenshot < Applitools::EyesScreenshot
6
+ def sub_screenshot(region, _coordinate_type, _throw_if_clipped = false, _force_nil_if_clipped = false)
7
+ self.class.new(
8
+ Applitools::Screenshot.from_image(
9
+ image.crop(region.x, region.y, region.width, region.height)
10
+ )
11
+ )
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Applitools
4
+ module Appium
5
+ class Target
6
+ include Applitools::FluentInterface
7
+
8
+ attr_accessor :region_to_check, :options
9
+
10
+ class << self
11
+ def window
12
+ new
13
+ end
14
+
15
+ def region(*args)
16
+ new.region(*args)
17
+ end
18
+ end
19
+
20
+ def initialize
21
+ self.region_to_check = proc { Applitools::Region::EMPTY }
22
+ self.options = {}
23
+ end
24
+
25
+ def region(*args)
26
+ self.region_to_check = case args.first
27
+ when ::Selenium::WebDriver::Element
28
+ proc { args.first }
29
+ else
30
+ proc do |driver|
31
+ driver.find_element(*args)
32
+ end
33
+ end
34
+ self
35
+ end
36
+
37
+ def finalize
38
+ self
39
+ end
40
+ end
41
+ end
42
+ end
@@ -3,19 +3,18 @@
3
3
  module Applitools::Appium
4
4
  module Utils
5
5
  # true if test is running on mobile device
6
- def mobile_device?
7
- return nil unless defined?(Appium::Driver)
8
- return $driver if $driver && $driver.is_a?(Appium::Driver)
6
+ def mobile_device?(driver)
7
+ defined?(Appium::Driver) && driver.respond_to?(:appium_driver) && driver.appium_driver
9
8
  end
10
9
 
11
10
  # true if test is running on Android device
12
11
  def android?(driver)
13
- driver.respond_to?(:appium_device) && driver.appium_device == :android
12
+ driver.respond_to?(:device_is_android?) && driver.device_is_android?
14
13
  end
15
14
 
16
15
  # true if test is running on iOS device
17
16
  def ios?(driver)
18
- driver.respond_to?(:appium_device) && driver.appium_device == :ios
17
+ driver.respond_to?(:device_is_ios?) && driver.device_is_ios?
19
18
  end
20
19
 
21
20
  # @param [Applitools::Selenium::Driver] driver
@@ -23,17 +22,14 @@ module Applitools::Appium
23
22
  driver.respond_to?(:caps) && driver.caps[:platformVersion]
24
23
  end
25
24
 
26
- # def current_position
27
- # result = nil
28
- # begin
29
- # logger.info 'current_position()'
30
- # result = Applitools::Utils::EyesSeleniumUtils.current_scroll_position(executor)
31
- # logger.info "Current position: #{result}"
32
- # rescue Applitools::EyesDriverOperationException
33
- # result = Applitools::Location::TOP_LEFT
34
- # end
35
- # result
36
- # end
25
+ # @param [Applitools::Selenium::Driver] executor
26
+ def device_pixel_ratio(executor)
27
+ if executor.respond_to? :session_capabilities
28
+ session_info = executor.session_capabilities
29
+ return session_info['pixelRatio'].to_f if session_info['pixelRatio']
30
+ end
31
+ Applitools::Selenium::Eyes::UNKNOWN_DEVICE_PIXEL_RATIO
32
+ end
37
33
 
38
34
  def current_scroll_position(driver)
39
35
  super
@@ -34,6 +34,12 @@ module Applitools
34
34
  " instance of #{klass}, but got #{param.class.name} instead"
35
35
  end
36
36
 
37
+ def one_of?(param, param_name, klasses)
38
+ return true if klasses.detect { |a| param.is_a? a }
39
+ raise Applitools::EyesIllegalArgument.new "Expected #{param_name} to be" \
40
+ " instance of one of this classes: [#{klass}], but got #{param.class.name} instead"
41
+ end
42
+
37
43
  def raise_argument_error(error)
38
44
  raise Applitools::EyesIllegalArgument.new error
39
45
  end
@@ -166,7 +166,7 @@ module Applitools::Utils
166
166
  MAX_DIFF = 3
167
167
 
168
168
  # true if test is running on mobile device
169
- def mobile_device?
169
+ def mobile_device?(_driver)
170
170
  nil
171
171
  end
172
172
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Applitools
4
- VERSION = '3.14.5'.freeze
4
+ VERSION = '3.14.6'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eyes_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.14.5
4
+ version: 3.14.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-19 00:00:00.000000000 Z
11
+ date: 2019-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oily_png
@@ -134,9 +134,13 @@ files:
134
134
  - ext/eyes_core/extconf.rb
135
135
  - ext/eyes_core/eyes_core.c
136
136
  - ext/eyes_core/eyes_core.h
137
+ - lib/applitools/appium/driver.rb
137
138
  - lib/applitools/appium/eyes.rb
138
139
  - lib/applitools/appium/initialize_1.9.rb
139
140
  - lib/applitools/appium/initialize_2.0.rb
141
+ - lib/applitools/appium/region_provider.rb
142
+ - lib/applitools/appium/screenshot.rb
143
+ - lib/applitools/appium/target.rb
140
144
  - lib/applitools/appium/utils.rb
141
145
  - lib/applitools/calabash/calabash_element.rb
142
146
  - lib/applitools/calabash/calabash_screenshot_provider.rb