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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48fa942ab484ac166a79b5c113e8abc724898dc7
4
- data.tar.gz: e4706b111471ff17a6b4b9814ea028fde0102a3f
3
+ metadata.gz: 1eddd248aaa225506bab9d893b31a5d60b672d1e
4
+ data.tar.gz: 5e1db39922d01f6a2d1240631c7c8c6b8a2777c2
5
5
  SHA512:
6
- metadata.gz: c5e081ea883a93be0153d8cdb74dbb088d8bab32410884329488f547250b64ea9edd507e10ee8e4b655d4e87ed2ccfc9ee400b3fd46f4d3df10440af9c92ee3d
7
- data.tar.gz: 31f787b185858b3a6dad0038187cfc1b1a264b4b4c12ee4c5d09806bc149e21f4f7b15756891dd44a864ca11c8144f7662aca89cce02e7e5e0e3ac1f938da17d
6
+ metadata.gz: bb020ee6d60bc119e4762dec14ee5c370dc1101f4788c65f379d112a44dff544a04a744047278494a51a723fd964b9526fda0ca3b376df8e07b2a38b575065b4
7
+ data.tar.gz: 494d2cabeebaedf23f3e87a681da7bae543735abbee395e7417288f27aa80e87eafa1a7dc509e894f67a2b10fb25805f073162a6c71f63d8d18dfd541af314df
@@ -54,6 +54,7 @@ module Applitools::Selenium
54
54
 
55
55
  def force_offset
56
56
  Applitools::Location.from_any_attribute last_state_position
57
+ # Applitools::Location::TOP_LEFT
57
58
  end
58
59
 
59
60
  alias scroll_to position=
@@ -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 options
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
- region_visibility_strategy.move_to_region original_position_provider,
232
- Applitools::Location.new(eyes_element.location.x.to_i, eyes_element.location.y.to_i)
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), target.coordinate_type
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::EyesWebDriverScreenshot.new full_page_image, driver: driver
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 'Failed to set viewport size!'
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[:context_as_is]
248
- nil
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 Applitools::Region.new(0, 0, image.width, image.height)
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}"
@@ -1,3 +1,3 @@
1
1
  module Applitools
2
- VERSION = '3.11.3'.freeze
2
+ VERSION = '3.12.0'.freeze
3
3
  end
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.11.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-08-13 00:00:00.000000000 Z
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.11.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.11.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