eyes_selenium 3.11.3 → 3.12.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/lib/applitools/selenium/css_translate_position_provider.rb +1 -0
- data/lib/applitools/selenium/eyes.rb +43 -12
- data/lib/applitools/selenium/eyes_full_page_screenshot.rb +47 -0
- data/lib/applitools/selenium/eyes_web_driver_screenshot.rb +10 -4
- data/lib/applitools/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1eddd248aaa225506bab9d893b31a5d60b672d1e
|
4
|
+
data.tar.gz: 5e1db39922d01f6a2d1240631c7c8c6b8a2777c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb020ee6d60bc119e4762dec14ee5c370dc1101f4788c65f379d112a44dff544a04a744047278494a51a723fd964b9526fda0ca3b376df8e07b2a38b575065b4
|
7
|
+
data.tar.gz: 494d2cabeebaedf23f3e87a681da7bae543735abbee395e7417288f27aa80e87eafa1a7dc509e894f67a2b10fb25805f073162a6c71f63d8d18dfd541af314df
|
@@ -103,6 +103,7 @@ module Applitools::Selenium
|
|
103
103
|
self.disable_horizontal_scrolling = false
|
104
104
|
self.disable_vertical_scrolling = false
|
105
105
|
self.explicit_entire_size = nil
|
106
|
+
self.force_driver_resolution_as_viewport_size = false
|
106
107
|
end
|
107
108
|
|
108
109
|
# Starts a test
|
@@ -131,6 +132,8 @@ module Applitools::Selenium
|
|
131
132
|
end
|
132
133
|
|
133
134
|
@driver = self.class.eyes_driver(driver, self)
|
135
|
+
perform_driver_specific_settings(driver)
|
136
|
+
|
134
137
|
self.device_pixel_ratio = UNKNOWN_DEVICE_PIXEL_RATIO
|
135
138
|
self.position_provider = self.class.position_provider(
|
136
139
|
stitch_mode, driver, disable_horizontal_scrolling, disable_vertical_scrolling, explicit_entire_size
|
@@ -142,10 +145,24 @@ module Applitools::Selenium
|
|
142
145
|
)
|
143
146
|
end
|
144
147
|
|
145
|
-
open_base
|
148
|
+
open_base(options) do
|
149
|
+
self.viewport_size = nil if force_driver_resolution_as_viewport_size
|
150
|
+
ensure_running_session
|
151
|
+
end
|
146
152
|
@driver
|
147
153
|
end
|
148
154
|
|
155
|
+
def perform_driver_specific_settings(driver)
|
156
|
+
modifier = driver.class.to_s.downcase.gsub(/::/, '_')
|
157
|
+
method_name = "perform_driver_settings_for_#{modifier}"
|
158
|
+
send(method_name) if respond_to? method_name
|
159
|
+
end
|
160
|
+
|
161
|
+
def perform_driver_settings_for_appium_driver
|
162
|
+
self.region_visibility_strategy = NopRegionVisibilityStrategy.new
|
163
|
+
self.force_driver_resolution_as_viewport_size = true
|
164
|
+
end
|
165
|
+
|
149
166
|
# Sets the stitch mode.
|
150
167
|
#
|
151
168
|
# @param [Hash] value The desired type of stitching (:SCROLL is default).
|
@@ -211,16 +228,15 @@ module Applitools::Selenium
|
|
211
228
|
original_overflow = nil
|
212
229
|
original_position_provider = position_provider
|
213
230
|
original_force_full_page_screenshot = force_full_page_screenshot
|
214
|
-
|
215
231
|
eyes_element = nil
|
216
232
|
timeout = target.options[:timeout] || USE_DEFAULT_MATCH_TIMEOUT
|
217
|
-
|
218
233
|
self.eyes_screenshot_factory = lambda do |image|
|
219
234
|
Applitools::Selenium::EyesWebDriverScreenshot.new(
|
220
235
|
image, driver: driver, force_offset: position_provider.force_offset
|
221
236
|
)
|
222
237
|
end
|
223
238
|
|
239
|
+
# rubocop:disable BlockLength
|
224
240
|
check_in_frame target_frames: target.frames do
|
225
241
|
begin
|
226
242
|
match_data = Applitools::MatchWindowData.new
|
@@ -228,8 +244,11 @@ module Applitools::Selenium
|
|
228
244
|
update_default_settings(match_data)
|
229
245
|
match_data.read_target(target, driver)
|
230
246
|
eyes_element = target.region_to_check.call(driver)
|
231
|
-
|
232
|
-
|
247
|
+
|
248
|
+
unless force_full_page_screenshot
|
249
|
+
region_visibility_strategy.move_to_region original_position_provider,
|
250
|
+
Applitools::Location.new(eyes_element.location.x.to_i, eyes_element.location.y.to_i)
|
251
|
+
end
|
233
252
|
|
234
253
|
check_window = false
|
235
254
|
if !target.frames.empty? && eyes_element.is_a?(Applitools::Region)
|
@@ -241,8 +260,17 @@ module Applitools::Selenium
|
|
241
260
|
# check_element
|
242
261
|
logger.info 'check_region(' \
|
243
262
|
"#{Applitools::Region.from_location_size(eyes_element.location, eyes_element.size)})"
|
263
|
+
|
264
|
+
use_coordinates =
|
265
|
+
if position_provider.is_a?(Applitools::Selenium::CssTranslatePositionProvider) &&
|
266
|
+
driver.frame_chain.empty?
|
267
|
+
Applitools::EyesScreenshot::COORDINATE_TYPES[:context_as_is]
|
268
|
+
else
|
269
|
+
target.coordinate_type
|
270
|
+
end
|
271
|
+
|
244
272
|
region_provider = Applitools::RegionProvider.new(
|
245
|
-
region_for_element(eyes_element),
|
273
|
+
region_for_element(eyes_element), use_coordinates
|
246
274
|
)
|
247
275
|
else
|
248
276
|
# check_window
|
@@ -263,6 +291,8 @@ module Applitools::Selenium
|
|
263
291
|
eyes_element.overflow = 'hidden'
|
264
292
|
end
|
265
293
|
|
294
|
+
region_provider = Applitools::RegionProvider.new(region_provider.region, target.coordinate_type)
|
295
|
+
|
266
296
|
self.region_to_check = region_provider
|
267
297
|
|
268
298
|
region_provider = Applitools::RegionProvider.new(
|
@@ -282,6 +312,7 @@ module Applitools::Selenium
|
|
282
312
|
self.region_to_check = nil
|
283
313
|
region_visibility_strategy.return_to_original_position position_provider
|
284
314
|
end
|
315
|
+
# rubocop:enable BlockLength
|
285
316
|
end
|
286
317
|
end
|
287
318
|
|
@@ -475,7 +506,7 @@ module Applitools::Selenium
|
|
475
506
|
|
476
507
|
attr_accessor :check_frame_or_element, :region_to_check, :dont_get_title,
|
477
508
|
:device_pixel_ratio, :position_provider, :scale_provider, :tag_for_debug,
|
478
|
-
:region_visibility_strategy, :eyes_screenshot_factory
|
509
|
+
:region_visibility_strategy, :eyes_screenshot_factory, :force_driver_resolution_as_viewport_size
|
479
510
|
|
480
511
|
def capture_screenshot
|
481
512
|
image_provider = Applitools::Selenium::TakesScreenshotImageProvider.new driver,
|
@@ -547,7 +578,7 @@ module Applitools::Selenium
|
|
547
578
|
logger.info 'Done switching!'
|
548
579
|
end
|
549
580
|
logger.info 'Creating EyesWebDriver screenshot instance..'
|
550
|
-
ewd_screenshot = Applitools::Selenium::
|
581
|
+
ewd_screenshot = Applitools::Selenium::EyesFullPageScreenshot.new(full_page_image)
|
551
582
|
logger.info 'Done creating EyesWebDriver screenshot instance!'
|
552
583
|
ewd_screenshot
|
553
584
|
else
|
@@ -567,16 +598,16 @@ module Applitools::Selenium
|
|
567
598
|
end
|
568
599
|
end
|
569
600
|
|
570
|
-
def vp_size=(value)
|
571
|
-
raise Applitools::EyesNotOpenException.new 'set_viewport_size: Eyes not open!' unless open?
|
601
|
+
def vp_size=(value, skip_check_if_open = false)
|
602
|
+
raise Applitools::EyesNotOpenException.new 'set_viewport_size: Eyes not open!' unless skip_check_if_open || open?
|
572
603
|
original_frame = driver.frame_chain
|
573
604
|
driver.switch_to.default_content
|
574
605
|
begin
|
575
606
|
Applitools::Utils::EyesSeleniumUtils.set_viewport_size driver, value
|
576
607
|
rescue => e
|
577
|
-
logger.error e.class
|
608
|
+
logger.error e.class.to_s
|
578
609
|
logger.error e.message
|
579
|
-
raise Applitools::TestFailedError.new
|
610
|
+
raise Applitools::TestFailedError.new "#{e.class} - #{e.message}"
|
580
611
|
ensure
|
581
612
|
driver.switch_to.frames(frame_chain: original_frame)
|
582
613
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Applitools::Selenium
|
2
|
+
class EyesFullPageScreenshot < Applitools::EyesScreenshot
|
3
|
+
def initialize(*args)
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def sub_screenshot(region, coordinate_type, throw_if_clipped = false, force_nil_if_clipped = false)
|
8
|
+
logger.info "get_subscreenshot(#{region}, #{coordinate_type}, #{throw_if_clipped})"
|
9
|
+
Applitools::ArgumentGuard.not_nil region, 'region'
|
10
|
+
Applitools::ArgumentGuard.not_nil coordinate_type, 'coordinate_type'
|
11
|
+
|
12
|
+
as_is_subscreenshot_region = intersected_region(
|
13
|
+
region, coordinate_type,
|
14
|
+
Applitools::EyesScreenshot::COORDINATE_TYPES[:screenshot_as_is]
|
15
|
+
)
|
16
|
+
|
17
|
+
if as_is_subscreenshot_region.empty? || (throw_if_clipped && as_is_subscreenshot_region.size != region.size)
|
18
|
+
return nil if force_nil_if_clipped
|
19
|
+
raise Applitools::OutOfBoundsException.new "Region #{region} (#{coordinate_type}) is out" \
|
20
|
+
" of screenshot bounds [#{frame_window}]"
|
21
|
+
end
|
22
|
+
|
23
|
+
sub_screenshot_image = Applitools::Screenshot.from_image(
|
24
|
+
image.crop(
|
25
|
+
as_is_subscreenshot_region.left,
|
26
|
+
as_is_subscreenshot_region.top, as_is_subscreenshot_region.width,
|
27
|
+
as_is_subscreenshot_region.height
|
28
|
+
)
|
29
|
+
)
|
30
|
+
result = self.class.new sub_screenshot_image
|
31
|
+
logger.info 'Done!'
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
def intersected_region(region, _original_coordinate_types, _result_coordinate_types)
|
36
|
+
region.intersect Applitools::Region.new(0, 0, image.width, image.height)
|
37
|
+
end
|
38
|
+
|
39
|
+
def convert_location(location, _from, _to)
|
40
|
+
location
|
41
|
+
end
|
42
|
+
|
43
|
+
def location_in_screenshot(location, _coordinate_type)
|
44
|
+
location
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -219,6 +219,13 @@ module Applitools::Selenium
|
|
219
219
|
else
|
220
220
|
raise Applitools::EyesCoordinateTypeConversionException.new "Can't convert coordinates from #{from} to #{to}"
|
221
221
|
end
|
222
|
+
when Applitools::EyesScreenshot::COORDINATE_TYPES[:context_as_is]
|
223
|
+
case to
|
224
|
+
when Applitools::EyesScreenshot::COORDINATE_TYPES[:screenshot_as_is]
|
225
|
+
result.offset_negative(frame_location_in_screenshot).offset(force_offset)
|
226
|
+
else
|
227
|
+
raise Applitools::EyesCoordinateTypeConversionException.new "Can't convert coordinates from #{from} to #{to}"
|
228
|
+
end
|
222
229
|
else
|
223
230
|
raise Applitools::EyesCoordinateTypeConversionException.new "Can't convert coordinates from #{from} to #{to}"
|
224
231
|
end
|
@@ -244,12 +251,11 @@ module Applitools::Selenium
|
|
244
251
|
region, original_coordinate_types, Applitools::EyesScreenshot::COORDINATE_TYPES[:screenshot_as_is]
|
245
252
|
)
|
246
253
|
case original_coordinate_types
|
247
|
-
when Applitools::EyesScreenshot::COORDINATE_TYPES[:
|
248
|
-
|
249
|
-
when Applitools::EyesScreenshot::COORDINATE_TYPES[:context_relative]
|
254
|
+
when Applitools::EyesScreenshot::COORDINATE_TYPES[:context_relative],
|
255
|
+
Applitools::EyesScreenshot::COORDINATE_TYPES[:context_as_is]
|
250
256
|
intersected_region.intersect frame_window
|
251
257
|
when Applitools::EyesScreenshot::COORDINATE_TYPES[:screenshot_as_is]
|
252
|
-
intersected_region.intersect
|
258
|
+
intersected_region.intersect(Applitools::Region.new(0, 0, image.width, image.height))
|
253
259
|
else
|
254
260
|
raise Applitools::EyesCoordinateTypeConversionException.new(
|
255
261
|
"Unknown coordinates type: #{original_coordinate_types}"
|
data/lib/applitools/version.rb
CHANGED
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: 3.
|
4
|
+
version: 3.12.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: 2017-
|
11
|
+
date: 2017-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eyes_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.
|
19
|
+
version: 3.12.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.
|
26
|
+
version: 3.12.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: selenium-webdriver
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/applitools/selenium/element.rb
|
87
87
|
- lib/applitools/selenium/element_position_provider.rb
|
88
88
|
- lib/applitools/selenium/eyes.rb
|
89
|
+
- lib/applitools/selenium/eyes_full_page_screenshot.rb
|
89
90
|
- lib/applitools/selenium/eyes_target_locator.rb
|
90
91
|
- lib/applitools/selenium/eyes_web_driver_screenshot.rb
|
91
92
|
- lib/applitools/selenium/frame.rb
|