eyes_core 4.6.3 → 6.0.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/CHANGELOG.md +504 -0
- data/Rakefile +35 -0
- data/eyes_core.gemspec +60 -0
- data/lib/applitools/core/batch_info.rb +2 -0
- data/lib/applitools/core/classic_runner.rb +1 -3
- data/lib/applitools/core/eyes_base.rb +110 -22
- data/lib/applitools/core/eyes_base_configuration.rb +9 -1
- data/lib/applitools/core/eyes_runner.rb +3 -2
- data/lib/applitools/core/test_result_summary.rb +7 -7
- data/lib/applitools/core/test_results.rb +19 -3
- data/lib/applitools/core/universal_eyes_checks.rb +2 -1
- data/lib/applitools/core/universal_eyes_open.rb +5 -1
- data/lib/applitools/eyes_core/version.rb +10 -0
- data/lib/applitools/universal_sdk/universal_client.rb +26 -10
- data/lib/applitools/universal_sdk/universal_eyes.rb +5 -0
- data/lib/applitools/universal_sdk/universal_eyes_config.rb +10 -9
- data/lib/applitools/universal_sdk/universal_eyes_manager.rb +1 -1
- data/lib/eyes_core.rb +1 -3
- metadata +14 -58
- data/ext/eyes_core/extconf.rb +0 -5
- data/ext/eyes_core/eyes_core.c +0 -252
- data/ext/eyes_core/eyes_core.h +0 -28
- data/lib/applitools/appium/android_region_provider.rb +0 -32
- data/lib/applitools/appium/android_screenshot.rb +0 -21
- data/lib/applitools/appium/driver.rb +0 -12
- data/lib/applitools/appium/eyes.rb +0 -189
- data/lib/applitools/appium/ios_region_provider.rb +0 -25
- data/lib/applitools/appium/ios_screenshot.rb +0 -10
- data/lib/applitools/appium/region_provider.rb +0 -51
- data/lib/applitools/appium/screenshot.rb +0 -30
- data/lib/applitools/appium/target.rb +0 -240
- data/lib/applitools/appium/utils.rb +0 -64
- data/lib/applitools/calabash/calabash_element.rb +0 -64
- data/lib/applitools/calabash/calabash_screenshot_provider.rb +0 -83
- data/lib/applitools/calabash/environment_detector.rb +0 -25
- data/lib/applitools/calabash/eyes.rb +0 -194
- data/lib/applitools/calabash/eyes_calabash_android_screenshot.rb +0 -68
- data/lib/applitools/calabash/eyes_calabash_ios_screenshot.rb +0 -30
- data/lib/applitools/calabash/eyes_calabash_screenshot.rb +0 -80
- data/lib/applitools/calabash/eyes_hooks.rb +0 -51
- data/lib/applitools/calabash/eyes_settings.rb +0 -45
- data/lib/applitools/calabash/full_page_capture_algorithm/android_scroll_view.rb +0 -95
- data/lib/applitools/calabash/full_page_capture_algorithm/base.rb +0 -51
- data/lib/applitools/calabash/full_page_capture_algorithm/ios_ui_table_view.rb +0 -150
- data/lib/applitools/calabash/full_page_capture_algorithm.rb +0 -26
- data/lib/applitools/calabash/os_versions.rb +0 -25
- data/lib/applitools/calabash/rspec_matchers.rb +0 -25
- data/lib/applitools/calabash/steps/android_eyes_session.rb +0 -37
- data/lib/applitools/calabash/steps/android_matchers.rb +0 -36
- data/lib/applitools/calabash/steps/eyes_session.rb +0 -42
- data/lib/applitools/calabash/steps/eyes_settings.rb +0 -59
- data/lib/applitools/calabash/steps/ios_eyes_session.rb +0 -15
- data/lib/applitools/calabash/steps/ios_matchers.rb +0 -17
- data/lib/applitools/calabash/steps/matchers.rb +0 -71
- data/lib/applitools/calabash/target.rb +0 -69
- data/lib/applitools/calabash/utils.rb +0 -74
- data/lib/applitools/calabash_steps.rb +0 -16
- data/lib/applitools/capybara/capybara_settings.rb +0 -25
- data/lib/applitools/capybara/driver.rb +0 -39
- data/lib/applitools/rspec/target_matcher.rb +0 -25
- data/lib/applitools/universal_sdk/executable_finder.rb +0 -57
- data/lib/applitools/universal_sdk/universal_server_control.rb +0 -79
- data/lib/applitools/version.rb +0 -8
- data/lib/eyes_consts.rb +0 -4
- data/lib/eyes_rspec.rb +0 -4
@@ -1,194 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
|
3
|
-
module Applitools
|
4
|
-
module Calabash
|
5
|
-
class Eyes < Applitools::EyesBase
|
6
|
-
attr_accessor :device_pixel_ratio, :full_page_capture_algorithm, :base_agent_id, :title,
|
7
|
-
:debug_screenshots, :debug_screenshot_provider, :tag_for_debug
|
8
|
-
attr_reader :context
|
9
|
-
|
10
|
-
def initialize(server_url = Applitools::Connectivity::ServerConnector::DEFAULT_SERVER_URL)
|
11
|
-
super
|
12
|
-
self.runner = Applitools::ClassicRunner.new
|
13
|
-
self.base_agent_id = "eyes.calabash.ruby/#{Applitools::VERSION}".freeze
|
14
|
-
self.debug_screenshots = false
|
15
|
-
self.debug_screenshot_provider = Applitools::DebugScreenshotProvider.new
|
16
|
-
.tag_access { tag_for_debug }
|
17
|
-
.debug_flag_access { debug_screenshots }
|
18
|
-
end
|
19
|
-
|
20
|
-
def open(options = {})
|
21
|
-
Applitools::ArgumentGuard.hash options, 'open(options)', [:app_name, :test_name]
|
22
|
-
open_base options
|
23
|
-
end
|
24
|
-
|
25
|
-
def check(*args)
|
26
|
-
args.compact!
|
27
|
-
case (first_arg = args.shift)
|
28
|
-
when String
|
29
|
-
name = first_arg
|
30
|
-
target = args.shift
|
31
|
-
when Applitools::Selenium::Target
|
32
|
-
target = first_arg
|
33
|
-
when Hash
|
34
|
-
target = first_arg[:target]
|
35
|
-
name = first_arg[:name] || first_arg[:tag]
|
36
|
-
end
|
37
|
-
|
38
|
-
self.tag_for_debug = get_tag_for_debug(name)
|
39
|
-
check_it(name, target, Applitools::MatchWindowData.new(default_match_settings))
|
40
|
-
end
|
41
|
-
|
42
|
-
def inferred_environment
|
43
|
-
return @inferred_environment unless @inferred_environment.nil?
|
44
|
-
return unless device_pixel_ratio
|
45
|
-
"device pixel ratio: #{device_pixel_ratio}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def add_context(value)
|
49
|
-
@context = value
|
50
|
-
end
|
51
|
-
|
52
|
-
def remove_context
|
53
|
-
@context = nil
|
54
|
-
end
|
55
|
-
|
56
|
-
def capture_screenshot
|
57
|
-
return screenshot_provider.capture_screenshot(debug_suffix: tag_for_debug) unless full_page_capture_algorithm
|
58
|
-
full_page_capture_algorithm.get_stitched_region
|
59
|
-
end
|
60
|
-
|
61
|
-
def screenshot_provider
|
62
|
-
env = Applitools::Calabash::EnvironmentDetector.current_environment
|
63
|
-
case env
|
64
|
-
when :android
|
65
|
-
Applitools::Calabash::AndroidScreenshotProvider.instance.with_density(device_pixel_ratio)
|
66
|
-
.using_context(context)
|
67
|
-
.with_debug_screenshot_provider(debug_screenshot_provider)
|
68
|
-
when :ios
|
69
|
-
Applitools::Calabash::IosScreenshotProvider.instance.with_density(device_pixel_ratio)
|
70
|
-
.using_context(context)
|
71
|
-
.with_debug_screenshot_provider(debug_screenshot_provider)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def check_it(name, target, match_window_data)
|
76
|
-
Applitools::ArgumentGuard.not_nil(name, 'name')
|
77
|
-
|
78
|
-
logger.info 'Full element requested' if target.options[:stitch_content]
|
79
|
-
|
80
|
-
self.full_page_capture_algorithm = target.options[:stitch_content] &&
|
81
|
-
get_full_page_capture_algorithm(target.region_to_check)
|
82
|
-
|
83
|
-
region_provider = if full_page_capture_algorithm
|
84
|
-
entire_screenshot_region
|
85
|
-
else
|
86
|
-
get_region_provider(target)
|
87
|
-
end
|
88
|
-
|
89
|
-
match_window_data.tag = name
|
90
|
-
match_window_data.read_target(target, nil)
|
91
|
-
|
92
|
-
self.viewport_size = Applitools::Calabash::EyesSettings.instance.viewport_size if viewport_size.nil?
|
93
|
-
|
94
|
-
if match_window_data.is_a? Applitools::MatchSingleCheckData
|
95
|
-
return check_single_base(
|
96
|
-
region_provider,
|
97
|
-
target.options[:timeout] || Applitools::EyesBase::USE_DEFAULT_TIMEOUT,
|
98
|
-
match_window_data
|
99
|
-
)
|
100
|
-
end
|
101
|
-
|
102
|
-
check_window_base(
|
103
|
-
region_provider,
|
104
|
-
target.options[:timeout] || Applitools::EyesBase::USE_DEFAULT_TIMEOUT,
|
105
|
-
match_window_data
|
106
|
-
)
|
107
|
-
end
|
108
|
-
|
109
|
-
def get_region_provider(target)
|
110
|
-
if (region_to_check = target.region_to_check).nil?
|
111
|
-
entire_screenshot_region
|
112
|
-
else
|
113
|
-
region_for_element(region_to_check)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def get_app_output_with_screenshot(*args)
|
118
|
-
result = super(*args, &:scale_it!)
|
119
|
-
self.screenshot_url = nil
|
120
|
-
result
|
121
|
-
end
|
122
|
-
|
123
|
-
def entire_screenshot_region
|
124
|
-
Object.new.tap do |prov|
|
125
|
-
prov.instance_eval do
|
126
|
-
define_singleton_method :region do
|
127
|
-
Applitools::Region::EMPTY
|
128
|
-
end
|
129
|
-
|
130
|
-
define_singleton_method :coordinate_type do
|
131
|
-
nil
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
def region_for_element(region_to_check)
|
138
|
-
Object.new.tap do |prov|
|
139
|
-
prov.instance_eval do
|
140
|
-
define_singleton_method :region do
|
141
|
-
case region_to_check
|
142
|
-
when Applitools::Calabash::CalabashElement
|
143
|
-
region_to_check.region
|
144
|
-
when Applitools::Region
|
145
|
-
region_to_check
|
146
|
-
else
|
147
|
-
raise Applitools::EyesError, "Incompatible region type: #{region_to_check.class}"
|
148
|
-
end
|
149
|
-
# region_to_check.respond_to?(:region) ? region_to_check.region : region_to_check
|
150
|
-
end
|
151
|
-
define_singleton_method :coordinate_type do
|
152
|
-
Applitools::Calabash::EyesCalabashScreenshot::DRIVER
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
def vp_size
|
159
|
-
viewport_size
|
160
|
-
end
|
161
|
-
|
162
|
-
def vp_size=(value, skip_check_if_open = false)
|
163
|
-
unless skip_check_if_open || open?
|
164
|
-
raise Applitools::EyesNotOpenException.new 'set_viewport_size: Eyes not open!'
|
165
|
-
end
|
166
|
-
Applitools::ArgumentGuard.not_nil 'value', value
|
167
|
-
@viewport_size = Applitools::RectangleSize.for value
|
168
|
-
end
|
169
|
-
|
170
|
-
alias get_viewport_size vp_size
|
171
|
-
alias set_viewport_size vp_size=
|
172
|
-
|
173
|
-
def get_full_page_capture_algorithm(element)
|
174
|
-
logger.info "Trying to get full page capture algorithm for element #{element}..."
|
175
|
-
environment = Applitools::Calabash::EnvironmentDetector.current_environment
|
176
|
-
element_class = Applitools::Calabash::Utils.send("grub_#{environment}_class_name", context, element).first
|
177
|
-
logger.info "Trying to get FullPageCaptureAlgorithm for #{element_class}..."
|
178
|
-
algo = Applitools::Calabash::FullPageCaptureAlgorithm.get_algorithm_class(environment, element_class)
|
179
|
-
if algo
|
180
|
-
logger.info "Using #{algo}"
|
181
|
-
algo = algo.new(screenshot_provider, element, debug_screenshot_provider: debug_screenshot_provider)
|
182
|
-
else
|
183
|
-
logger.info "FullPageCaptureAlgorithm for #{element_class} not found. Continue with :check_region instead"
|
184
|
-
end
|
185
|
-
algo
|
186
|
-
end
|
187
|
-
|
188
|
-
def get_tag_for_debug(name)
|
189
|
-
return "#{app_name} #{test_name}" if name.empty?
|
190
|
-
"#{app_name} #{test_name} - #{name}"
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'eyes_calabash_screenshot'
|
4
|
-
module Applitools
|
5
|
-
module Calabash
|
6
|
-
class EyesCalabashAndroidScreenshot < ::Applitools::Calabash::EyesCalabashScreenshot
|
7
|
-
extend Forwardable
|
8
|
-
def_delegators 'Applitools::EyesLogger', :logger
|
9
|
-
|
10
|
-
ANDROID_DENSITY = {
|
11
|
-
120 => 0.75,
|
12
|
-
160 => 1,
|
13
|
-
213 => 1.33,
|
14
|
-
240 => 1.5,
|
15
|
-
320 => 2,
|
16
|
-
480 => 3,
|
17
|
-
560 => 3.5,
|
18
|
-
640 => 4
|
19
|
-
}.freeze
|
20
|
-
|
21
|
-
DENSITY_DEFAULT = 160
|
22
|
-
|
23
|
-
class UnknownDeviceDensity < ::Applitools::EyesError; end
|
24
|
-
|
25
|
-
def initialize(*args)
|
26
|
-
options = if args.last.is_a? Hash
|
27
|
-
args.pop
|
28
|
-
else
|
29
|
-
{}
|
30
|
-
end
|
31
|
-
super(*args)
|
32
|
-
@scale_factor = nil
|
33
|
-
self.density = options[:density] if options[:density]
|
34
|
-
@scale_factor ||= options[:scale_factor]
|
35
|
-
@scale_factor = 1 unless @scale_factor
|
36
|
-
end
|
37
|
-
|
38
|
-
def convert_region_location(region, from, to)
|
39
|
-
case from
|
40
|
-
when DRIVER
|
41
|
-
case to
|
42
|
-
when SCREENSHOT_AS_IS
|
43
|
-
region
|
44
|
-
else
|
45
|
-
raise Applitools::EyesError, "from: #{from}, to: #{to}"
|
46
|
-
end
|
47
|
-
when CONTEXT_RELATIVE
|
48
|
-
case to
|
49
|
-
when SCREENSHOT_AS_IS
|
50
|
-
region.scale_it!(1.to_f / scale_factor) # !!!!!!
|
51
|
-
region
|
52
|
-
else
|
53
|
-
raise Applitools::EyesError, "from: #{from}, to: #{to}"
|
54
|
-
end
|
55
|
-
else
|
56
|
-
raise Applitools::EyesError, "from: #{from}, to: #{to}"
|
57
|
-
end
|
58
|
-
region
|
59
|
-
end
|
60
|
-
|
61
|
-
def density=(value)
|
62
|
-
logger.warn("Trying to set unknown device density - #{value}") unless
|
63
|
-
ANDROID_DENSITY.keys.include?(value.to_i)
|
64
|
-
@scale_factor = value.to_f / DENSITY_DEFAULT
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'eyes_calabash_screenshot'
|
4
|
-
module Applitools
|
5
|
-
module Calabash
|
6
|
-
class EyesCalabashIosScreenshot < Applitools::Calabash::EyesCalabashScreenshot
|
7
|
-
def convert_region_location(region, from, to)
|
8
|
-
case from
|
9
|
-
when DRIVER
|
10
|
-
case to
|
11
|
-
when SCREENSHOT_AS_IS
|
12
|
-
region.scale_it!(scale_factor)
|
13
|
-
else
|
14
|
-
raise Applitools::EyesError, "from: #{from}, to: #{to}"
|
15
|
-
end
|
16
|
-
when CONTEXT_RELATIVE
|
17
|
-
case to
|
18
|
-
when SCREENSHOT_AS_IS
|
19
|
-
region
|
20
|
-
else
|
21
|
-
raise Applitools::EyesError, "from: #{from}, to: #{to}"
|
22
|
-
end
|
23
|
-
else
|
24
|
-
raise Applitools::EyesError, "from: #{from}, to: #{to}"
|
25
|
-
end
|
26
|
-
region
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
|
3
|
-
module Applitools
|
4
|
-
module Calabash
|
5
|
-
class EyesCalabashScreenshot < Applitools::EyesScreenshot
|
6
|
-
SCREENSHOT_AS_IS = Applitools::EyesScreenshot::COORDINATE_TYPES[:screenshot_as_is].freeze
|
7
|
-
CONTEXT_RELATIVE = Applitools::EyesScreenshot::COORDINATE_TYPES[:context_relative].freeze
|
8
|
-
DRIVER = 'DRIVER'.freeze
|
9
|
-
|
10
|
-
attr_reader :scale_factor
|
11
|
-
|
12
|
-
def initialize(image, options = {})
|
13
|
-
super image
|
14
|
-
@scale_factor = options[:scale_factor] || 1
|
15
|
-
# return if (location = options[:location]).nil?
|
16
|
-
# Applitools::ArgumentGuard.is_a? location, 'options[:location]', Applitools::Location
|
17
|
-
# @bounds = Applitools::Region.new location.x, location.y, image.width, image.height
|
18
|
-
end
|
19
|
-
|
20
|
-
def sub_screenshot(region, coordinates_type, throw_if_clipped = false, force_nil_if_clipped = false)
|
21
|
-
Applitools::ArgumentGuard.not_nil region, 'region'
|
22
|
-
Applitools::ArgumentGuard.not_nil coordinates_type, 'coordinates_type'
|
23
|
-
|
24
|
-
sub_screen_region = intersected_region region, coordinates_type, SCREENSHOT_AS_IS
|
25
|
-
|
26
|
-
if sub_screen_region.empty? || (throw_if_clipped && !region.size_equals?(sub_screen_region))
|
27
|
-
return nil if force_nil_if_clipped
|
28
|
-
raise Applitools::OutOfBoundsException, "Region #{sub_screen_region} (#{coordinates_type}) is out of " \
|
29
|
-
" screenshot bounds #{bounds}"
|
30
|
-
end
|
31
|
-
|
32
|
-
sub_screenshot_image = Applitools::Screenshot.from_any_image(
|
33
|
-
image.crop(
|
34
|
-
sub_screen_region.left, sub_screen_region.top, sub_screen_region.width, sub_screen_region.height
|
35
|
-
).to_datastream.to_blob
|
36
|
-
)
|
37
|
-
|
38
|
-
self.class.new sub_screenshot_image, scale_factor: scale_factor
|
39
|
-
end
|
40
|
-
|
41
|
-
def location_in_screenshot(_location, _coordinates_type)
|
42
|
-
raise(
|
43
|
-
Applitools::EyesError,
|
44
|
-
'Call to :convert_location is prohibited for Applitools::Calabash::EyesCalabashScreenshot'
|
45
|
-
)
|
46
|
-
end
|
47
|
-
|
48
|
-
def intersected_region(region, from, to = CONTEXT_RELATIVE)
|
49
|
-
Applitools::ArgumentGuard.not_nil region, 'region'
|
50
|
-
Applitools::ArgumentGuard.not_nil from, 'coordinates Type (from)'
|
51
|
-
return Applitools::Region.new(0, 0, 0, 0) if region.empty?
|
52
|
-
intersected_region = convert_region_location region, from, to
|
53
|
-
intersected_region.intersect bounds
|
54
|
-
intersected_region
|
55
|
-
end
|
56
|
-
|
57
|
-
def convert_location(_location, _from, _to)
|
58
|
-
raise(
|
59
|
-
Applitools::EyesError,
|
60
|
-
'Call to :convert_location is prohibited for Applitools::Calabash::EyesCalabashScreenshot'
|
61
|
-
)
|
62
|
-
end
|
63
|
-
|
64
|
-
abstract_method :convert_region_location, false
|
65
|
-
|
66
|
-
def scale_it!
|
67
|
-
width = (image.width.to_f / scale_factor).to_i
|
68
|
-
height = (image.height.to_f / scale_factor).to_i
|
69
|
-
image.resample_bicubic!(width, height)
|
70
|
-
self
|
71
|
-
end
|
72
|
-
|
73
|
-
private
|
74
|
-
|
75
|
-
def bounds
|
76
|
-
@bounds ||= Applitools::Region.new(0, 0, image.width, image.height)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
if respond_to?(:Before)
|
4
|
-
Before('@eyes') do |scenario|
|
5
|
-
get_scenario_tags(scenario)
|
6
|
-
before_feature(scenario) if scenario.feature.children.first == scenario.source.last
|
7
|
-
end
|
8
|
-
|
9
|
-
Before('@eyes') do |scenario|
|
10
|
-
Applitools::Calabash::EyesSettings.instance.eyes.add_context(self)
|
11
|
-
step %(eyes test name is "#{@eyes_current_tags[:test_name] || scenario.name}")
|
12
|
-
step %(open eyes)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
if respond_to?(:After)
|
17
|
-
After('@eyes') do |scenario|
|
18
|
-
after_feature(scenario) if scenario.feature.children.last == scenario.source.last
|
19
|
-
end
|
20
|
-
|
21
|
-
After('@eyes') do |_scenario|
|
22
|
-
eyes = Applitools::Calabash::EyesSettings.instance.eyes
|
23
|
-
Applitools::Calabash::EyesSettings.instance.eyes.remove_context if eyes && eyes.open?
|
24
|
-
step %(terminate eyes session) if eyes && eyes.running_session?
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def before_feature(scenario)
|
29
|
-
@before_hook_scenario = scenario
|
30
|
-
eyes_settings = Applitools::Calabash::EyesSettings.instance
|
31
|
-
|
32
|
-
step %(eyes API key "#{@eyes_current_tags[:api_key] || ENV['APPLITOOLS_API_KEY']}") unless
|
33
|
-
eyes_settings.applitools_api_key
|
34
|
-
|
35
|
-
step %(eyes application name is "#{@eyes_current_tags[:app_name] || scenario.feature.name}")
|
36
|
-
|
37
|
-
step %(set it up) if eyes_settings.needs_setting_up
|
38
|
-
|
39
|
-
step %(create eyes)
|
40
|
-
end
|
41
|
-
|
42
|
-
def after_feature(_scenario) end
|
43
|
-
|
44
|
-
def get_scenario_tags(scenario)
|
45
|
-
@eyes_current_tags = {}
|
46
|
-
eyes_tag_name_regexp = /@eyes_(?<tag_name>[a-z,A-Z, \_]+) \"(?<value>.*)\"/
|
47
|
-
scenario.tags.each do |t|
|
48
|
-
match_data = t.name.match eyes_tag_name_regexp
|
49
|
-
@eyes_current_tags[match_data[:tag_name].to_sym] = match_data[:value] if match_data
|
50
|
-
end
|
51
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'singleton'
|
4
|
-
require 'securerandom'
|
5
|
-
module Applitools
|
6
|
-
module Calabash
|
7
|
-
class EyesSettings
|
8
|
-
attr_accessor :eyes, :applitools_api_key, :app_name, :test_name, :viewport_size
|
9
|
-
attr_accessor :tmp_dir, :screenshot_dir, :log_dir, :log_file
|
10
|
-
attr_accessor :needs_setting_up
|
11
|
-
|
12
|
-
include Singleton
|
13
|
-
|
14
|
-
def initialize
|
15
|
-
@tmp_dir = 'tmp'
|
16
|
-
@screenshot_dir = 'screenshots'
|
17
|
-
@log_dir = 'logs'
|
18
|
-
@log_file = 'applitools.log'
|
19
|
-
@needs_setting_up = true
|
20
|
-
end
|
21
|
-
|
22
|
-
def options_for_open
|
23
|
-
result = { app_name: app_name, test_name: test_name }
|
24
|
-
return result unless viewport_size
|
25
|
-
result.merge!(viewport_size: viewport_size)
|
26
|
-
end
|
27
|
-
|
28
|
-
def screenshot_prefix
|
29
|
-
File.join(Dir.getwd, tmp_dir, screenshot_dir, '')
|
30
|
-
end
|
31
|
-
|
32
|
-
def log_prefix
|
33
|
-
File.join(Dir.getwd, log_dir)
|
34
|
-
end
|
35
|
-
|
36
|
-
def screenshot_names
|
37
|
-
@names ||= Enumerator.new do |y|
|
38
|
-
loop do
|
39
|
-
y << { prefix: screenshot_prefix, name: "#{SecureRandom.uuid}.png" }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,95 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'base'
|
4
|
-
module Applitools
|
5
|
-
module Calabash
|
6
|
-
module FullPageCaptureAlgorithm
|
7
|
-
module CalabashAndroidScreenshot
|
8
|
-
def calabash_android_screenshot(screenshot, density)
|
9
|
-
Applitools::Calabash::EyesCalabashAndroidScreenshot.new(
|
10
|
-
screenshot, density: density
|
11
|
-
)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
class AndroidScrollView < Base
|
15
|
-
include CalabashAndroidScreenshot
|
16
|
-
def initialize(*args)
|
17
|
-
super
|
18
|
-
@entire_content = nil
|
19
|
-
@stitched_image = nil
|
20
|
-
@original_position = nil
|
21
|
-
end
|
22
|
-
|
23
|
-
def get_stitched_region(scroll_to_top = true)
|
24
|
-
create_entire_image
|
25
|
-
store_original_position
|
26
|
-
scroll_top if scroll_to_top
|
27
|
-
|
28
|
-
scroll_it! do |scrollable_element|
|
29
|
-
put_it_on_canvas!(
|
30
|
-
screenshot_provider.capture_screenshot.sub_screenshot(
|
31
|
-
eyes_window,
|
32
|
-
Applitools::Calabash::EyesCalabashScreenshot::DRIVER,
|
33
|
-
false,
|
34
|
-
false
|
35
|
-
).image.image,
|
36
|
-
element.location.offset_negative(scrollable_element.location)
|
37
|
-
)
|
38
|
-
end
|
39
|
-
|
40
|
-
restore_original_position
|
41
|
-
|
42
|
-
calabash_android_screenshot(
|
43
|
-
Applitools::Screenshot.from_image(stitched_image),
|
44
|
-
screenshot_provider.density
|
45
|
-
)
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def scrollable_element
|
51
|
-
child_query = "#{element.element_query} child * index:0"
|
52
|
-
Applitools::Calabash::Utils.get_android_element(context, child_query, 0)
|
53
|
-
end
|
54
|
-
|
55
|
-
def scroll_top
|
56
|
-
logger.info 'Scrolling up...'
|
57
|
-
context.query(element.element_query, scrollTo: [0, 0])
|
58
|
-
logger.info 'Done!'
|
59
|
-
end
|
60
|
-
|
61
|
-
def store_original_position
|
62
|
-
current_scrollable_element = scrollable_element
|
63
|
-
@original_position = Applitools::Location.new(current_scrollable_element.left, current_scrollable_element.top)
|
64
|
-
end
|
65
|
-
|
66
|
-
def restore_original_position
|
67
|
-
return unless @original_position
|
68
|
-
offset = @original_position.offset_negative(scrollable_element.location)
|
69
|
-
context.query(element.element_query, scrollBy: [-offset.x, -offset.y])
|
70
|
-
@original_position = nil
|
71
|
-
end
|
72
|
-
|
73
|
-
def scroll_it!
|
74
|
-
scroll_vertical = true
|
75
|
-
loop do
|
76
|
-
scrollable = scrollable_element if scroll_vertical
|
77
|
-
vertical_offset = element.location.offset_negative(scrollable.location).top
|
78
|
-
scroll_vertical = false if vertical_offset + 1 >= scrollable.height - element.height
|
79
|
-
yield(scrollable) if block_given?
|
80
|
-
context.query(element.element_query, scrollBy: [0, element.height]) if scroll_vertical
|
81
|
-
return unless scroll_vertical
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def entire_size
|
86
|
-
entire_content.size
|
87
|
-
end
|
88
|
-
|
89
|
-
def eyes_window
|
90
|
-
@eyes_window ||= Applitools::Region.from_location_size(element.location, element.size)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Applitools
|
4
|
-
module Calabash
|
5
|
-
module FullPageCaptureAlgorithm
|
6
|
-
class Base
|
7
|
-
extend Applitools::Helpers
|
8
|
-
extend Forwardable
|
9
|
-
def_delegators 'Applitools::EyesLogger', :logger, :log_handler, :log_handler=
|
10
|
-
|
11
|
-
attr_reader :context, :element, :screenshot_provider, :stitched_image, :debug_screenshot_provider
|
12
|
-
|
13
|
-
DEFAULT_SLEEP_INTERVAL = 1
|
14
|
-
|
15
|
-
def initialize(screenshot_provider, element, options = {})
|
16
|
-
Applitools::ArgumentGuard.is_a?(element, 'element', Applitools::Calabash::CalabashElement)
|
17
|
-
@screenshot_provider = screenshot_provider
|
18
|
-
@element = element
|
19
|
-
@context = screenshot_provider.context
|
20
|
-
return unless options[:debug_screenshot_provider]
|
21
|
-
Applitools::ArgumentGuard.is_a?(
|
22
|
-
options[:debug_screenshot_provider],
|
23
|
-
'options[:debug_screenshot_provider]',
|
24
|
-
Applitools::DebugScreenshotProvider
|
25
|
-
)
|
26
|
-
@debug_screenshot_provider = options[:debug_screenshot_provider]
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def create_entire_image
|
32
|
-
current_entire_size = entire_size
|
33
|
-
# @stitched_image = ::ChunkyPNG::Image.new(current_entire_size.width, current_entire_size.height)
|
34
|
-
end
|
35
|
-
|
36
|
-
def entire_content
|
37
|
-
@entire_content ||= scrollable_element
|
38
|
-
end
|
39
|
-
|
40
|
-
abstract_method(:entire_size, true)
|
41
|
-
abstract_method(:scrollable_element, true)
|
42
|
-
abstract_method(:eyes_window, true)
|
43
|
-
|
44
|
-
def put_it_on_canvas!(image, offset)
|
45
|
-
debug_screenshot_provider.save(image, "#{offset.x} x #{offset.y}") if debug_screenshot_provider
|
46
|
-
stitched_image.replace!(image, offset.x, offset.y)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|