eyes_core 3.14.5 → 3.14.6

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
  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