eyes_selenium 3.11.3 → 3.12.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|