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