testcentricity_web 3.2.20 → 3.2.25

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
  SHA256:
3
- metadata.gz: 06df79fffc76a0f986855b9df2da06a9f4e894625fe6863f2502eddc6002c723
4
- data.tar.gz: 0ceace5caaf65a8e87f56ef064c6e2b2d8ca8af11ec6dc8a96151aa8488d254c
3
+ metadata.gz: 49868a5ac9a36308a250e4682750a7450c94f0bd297d8103d25170fbd067491e
4
+ data.tar.gz: bd80b70984d2646cf6d510be7517d9a2e5d353df69c30f367c89bfba7d29e011
5
5
  SHA512:
6
- metadata.gz: 8a054bb3d399e07ecde209201e519bf3084245d21f56f071ab5e3f903ed66fe4e395c39995a504799ae8b0285fa8d44ac90516f518d3183c0aee67416e344caa
7
- data.tar.gz: a38820009129e8d7951114fedeb380ed881096a06722a8f909c47aa5e9e0189fdb4af086928a143145b7a7aa6e6e63344937d1f93c07147eb242a89e64f00684
6
+ metadata.gz: bb6029661e87b7528125a06dce284b149f09f538c31c24a2835c55f36b7f38a2699c7cd8c9b4768205496b409a2d7b7210ce5e99bdb5a7173c2677343af3def7
7
+ data.tar.gz: 384e430102526d15a43c35e2bcab9ff11df24497cb342767aacd4527694e06c1053d20ceb69d298841499932aefbca3945d528dfb10871a6b7e70e3268cf415b
data/CHANGELOG.md CHANGED
@@ -1,6 +1,37 @@
1
1
  # CHANGELOG
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+
5
+ ## [3.2.25] - 11-MAR-2021
6
+
7
+ ### Added
8
+ * Added `String.titlecase` method.
9
+
10
+ ## [3.2.23] - 11-FEB-2021
11
+
12
+ ### Changed
13
+ * Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to allow `:translate_upcase`,
14
+ `:translate_downcase`, `:translate_capitalize`, and `:translate_titlecase` conversions to fall back to `:en` default
15
+ locale if translated strings are missing from the current locale specified in `I18n.locale`.
16
+
17
+ ## [3.2.22] - 09-FEB-2021
18
+
19
+ ### Fixed
20
+ * Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to correctly handle `:translate_upcase`,
21
+ `:translate_downcase`, `:translate_capitalize`, and `:translate_titlecase` conversions for Arrays of `String`.
22
+
23
+ ## [3.2.21] - 04-FEB-2021
24
+
25
+ ### Changed
26
+ * `UIElement.hover_at` method now accepts an optional `visible` parameter to allow hovering over UI elements that are not
27
+ visible.
28
+
29
+ ## [3.2.20] - 21-JAN-2021
30
+
31
+ ### Changed
32
+ * `UIElement.hover` method now accepts an optional `visible` parameter to allow hovering over UI elements that are not
33
+ visible.
34
+
4
35
  ## [3.2.19] - 05-JAN-2021
5
36
 
6
37
  ### Fixed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- testcentricity_web (3.2.19)
4
+ testcentricity_web (3.2.25)
5
5
  appium_lib
6
6
  browserstack-local
7
7
  capybara (>= 3.1, < 4)
@@ -21,58 +21,60 @@ GEM
21
21
  specs:
22
22
  addressable (2.7.0)
23
23
  public_suffix (>= 2.0.2, < 5.0)
24
- appium_lib (10.6.0)
25
- appium_lib_core (~> 3.3)
24
+ appium_lib (11.2.0)
25
+ appium_lib_core (~> 4.1)
26
26
  nokogiri (~> 1.8, >= 1.8.1)
27
27
  tomlrb (~> 1.1)
28
- appium_lib_core (3.10.0)
29
- faye-websocket (~> 0.10.0)
28
+ appium_lib_core (4.4.1)
29
+ faye-websocket (~> 0.11.0)
30
30
  selenium-webdriver (~> 3.14, >= 3.14.1)
31
31
  axiom-types (0.1.1)
32
32
  descendants_tracker (~> 0.0.4)
33
33
  ice_nine (~> 0.11.0)
34
34
  thread_safe (~> 0.3, >= 0.3.1)
35
35
  browserstack-local (1.3.0)
36
- capybara (3.32.2)
36
+ capybara (3.35.3)
37
37
  addressable
38
38
  mini_mime (>= 0.1.3)
39
39
  nokogiri (~> 1.8)
40
40
  rack (>= 1.6.0)
41
41
  rack-test (>= 0.6.3)
42
- regexp_parser (~> 1.5)
42
+ regexp_parser (>= 1.5, < 3.0)
43
43
  xpath (~> 3.2)
44
44
  childprocess (0.9.0)
45
45
  ffi (~> 1.0, >= 1.0.11)
46
46
  chronic (0.10.2)
47
47
  coercible (1.0.0)
48
48
  descendants_tracker (~> 0.0.1)
49
- concurrent-ruby (1.1.6)
49
+ concurrent-ruby (1.1.8)
50
50
  descendants_tracker (0.0.4)
51
51
  thread_safe (~> 0.3, >= 0.3.1)
52
52
  equalizer (0.0.11)
53
53
  eventmachine (1.2.7)
54
- faker (2.12.0)
54
+ faker (2.16.0)
55
55
  i18n (>= 1.6, < 2)
56
- faye-websocket (0.10.9)
56
+ faye-websocket (0.11.0)
57
57
  eventmachine (>= 0.12.0)
58
58
  websocket-driver (>= 0.5.1)
59
- ffi (1.13.1)
60
- i18n (1.8.3)
59
+ ffi (1.15.0)
60
+ i18n (1.8.9)
61
61
  concurrent-ruby (~> 1.0)
62
62
  ice_nine (0.11.2)
63
63
  mini_mime (1.0.2)
64
- mini_portile2 (2.4.0)
65
- nokogiri (1.10.9)
66
- mini_portile2 (~> 2.4.0)
67
- os (1.1.0)
68
- power_assert (1.2.0)
69
- public_suffix (4.0.5)
64
+ mini_portile2 (2.5.0)
65
+ nokogiri (1.11.2)
66
+ mini_portile2 (~> 2.5.0)
67
+ racc (~> 1.4)
68
+ os (1.1.1)
69
+ power_assert (2.0.0)
70
+ public_suffix (4.0.6)
71
+ racc (1.5.2)
70
72
  rack (2.2.3)
71
73
  rack-test (1.1.0)
72
74
  rack (>= 1.0, < 3)
73
75
  rake (13.0.1)
74
76
  redcarpet (3.5.0)
75
- regexp_parser (1.7.1)
77
+ regexp_parser (2.1.1)
76
78
  ruby-ole (1.2.12.2)
77
79
  rubyzip (2.3.0)
78
80
  selenium-webdriver (3.142.7)
@@ -80,7 +82,7 @@ GEM
80
82
  rubyzip (>= 1.2.2)
81
83
  spreadsheet (1.1.7)
82
84
  ruby-ole (>= 1.0)
83
- test-unit (3.3.6)
85
+ test-unit (3.4.0)
84
86
  power_assert
85
87
  thread_safe (0.3.6)
86
88
  tomlrb (1.3.0)
@@ -89,11 +91,11 @@ GEM
89
91
  coercible (~> 1.0)
90
92
  descendants_tracker (~> 0.0, >= 0.0.3)
91
93
  equalizer (~> 0.0, >= 0.0.9)
92
- webdrivers (4.4.1)
94
+ webdrivers (4.6.0)
93
95
  nokogiri (~> 1.6)
94
96
  rubyzip (>= 1.3.0)
95
97
  selenium-webdriver (>= 3.0, < 4.0)
96
- websocket-driver (0.7.2)
98
+ websocket-driver (0.7.3)
97
99
  websocket-extensions (>= 0.1.0)
98
100
  websocket-extensions (0.1.5)
99
101
  xpath (3.2.0)
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014-2020, Tony Mrozinski
1
+ Copyright (c) 2014-2021, Tony Mrozinski
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
data/README.md CHANGED
@@ -1673,7 +1673,7 @@ landscape orientation running on the BrowserStack service:
1673
1673
 
1674
1674
  ## Copyright and License
1675
1675
 
1676
- TestCentricity™ Framework is Copyright (c) 2014-2020, Tony Mrozinski.
1676
+ TestCentricity™ Framework is Copyright (c) 2014-2021, Tony Mrozinski.
1677
1677
  All rights reserved.
1678
1678
 
1679
1679
  Redistribution and use in source and binary forms, with or without
@@ -36,11 +36,14 @@ module TestCentricity
36
36
  attr_accessor :device_name
37
37
  attr_accessor :device_type
38
38
  attr_accessor :device_os
39
+ attr_accessor :device_os_version
39
40
  attr_accessor :device_orientation
40
41
  attr_accessor :platform
41
42
  attr_accessor :driver
42
43
  attr_accessor :grid
43
44
  attr_accessor :tunneling
45
+ attr_accessor :locale
46
+ attr_accessor :language
44
47
 
45
48
  attr_accessor :parallel
46
49
  attr_accessor :process_num
@@ -58,8 +61,12 @@ module TestCentricity
58
61
  attr_accessor :user_id
59
62
  attr_accessor :password
60
63
  attr_accessor :append
64
+ attr_accessor :app_id
65
+ attr_accessor :api_key
61
66
  attr_accessor :option1
62
67
  attr_accessor :option2
68
+ attr_accessor :option3
69
+ attr_accessor :option4
63
70
  attr_accessor :dns
64
71
  attr_accessor :db_username
65
72
  attr_accessor :db_password
@@ -71,12 +78,18 @@ module TestCentricity
71
78
  @user_id = data['USER_ID']
72
79
  @password = data['PASSWORD']
73
80
  @append = data['APPEND']
81
+ @app_id = data['APP_ID']
82
+ @api_key = data['API_KEY']
74
83
  @option1 = data['OPTIONAL_1']
75
84
  @option2 = data['OPTIONAL_2']
85
+ @option3 = data['OPTIONAL_3']
86
+ @option4 = data['OPTIONAL_4']
76
87
  @dns = data['DNS']
77
88
  @db_username = data['DB_USERNAME']
78
89
  @db_password = data['DB_PASSWORD']
79
90
  @a11y_standard = ENV['ACCESSIBILITY_STANDARD'] || 'best-practice'
91
+ @locale = ENV['LOCALE'] || 'en'
92
+ @language = ENV['LANGUAGE'] || 'English'
80
93
 
81
94
  super
82
95
  end
@@ -205,6 +218,14 @@ module TestCentricity
205
218
  @device_os
206
219
  end
207
220
 
221
+ def self.device_os_version=(version)
222
+ @device_os_version = version
223
+ end
224
+
225
+ def self.device_os_version
226
+ @device_os_version
227
+ end
228
+
208
229
  def self.is_ios?
209
230
  @device_os == :ios
210
231
  end
@@ -245,6 +266,22 @@ module TestCentricity
245
266
  @tunneling
246
267
  end
247
268
 
269
+ def self.language=(language)
270
+ @language = language
271
+ end
272
+
273
+ def self.language
274
+ @language
275
+ end
276
+
277
+ def self.locale=(locale)
278
+ @locale = locale
279
+ end
280
+
281
+ def self.locale
282
+ @locale
283
+ end
284
+
248
285
  def self.platform=(platform)
249
286
  @platform = platform
250
287
  end
@@ -305,13 +342,13 @@ module TestCentricity
305
342
  report_header = "\n<b><u>TEST ENVIRONMENT</u>:</b> #{ENV['TEST_ENVIRONMENT']}\n"\
306
343
  " <b>Browser:</b>\t #{Environ.browser.capitalize}\n"
307
344
  report_header = "#{report_header} <b>Device:</b>\t\t #{Environ.device_name}\n" if Environ.device_name
308
- report_header = "#{report_header} <b>Device OS:</b>\t #{Environ.device_os}\n" if Environ.device_os
345
+ report_header = "#{report_header} <b>Device OS:</b>\t #{Environ.device_os} #{Environ.device_os_version}\n" if Environ.device_os
309
346
  report_header = "#{report_header} <b>Device type:</b>\t #{Environ.device_type}\n" if Environ.device_type
310
347
  report_header = "#{report_header} <b>Driver:</b>\t\t #{Environ.driver}\n" if Environ.driver
311
348
  report_header = "#{report_header} <b>Grid:</b>\t\t #{Environ.grid}\n" if Environ.grid
312
349
  report_header = "#{report_header} <b>OS:</b>\t\t\t #{Environ.os}\n" if Environ.os
313
- report_header = "#{report_header} <b>Locale:</b>\t\t #{ENV['LOCALE']}\n" if ENV['LOCALE']
314
- report_header = "#{report_header} <b>Language:</b>\t #{ENV['LANGUAGE']}\n" if ENV['LANGUAGE']
350
+ report_header = "#{report_header} <b>Locale:</b>\t\t #{Environ.locale}\n" if Environ.locale
351
+ report_header = "#{report_header} <b>Language:</b>\t #{Environ.language}\n" if Environ.language
315
352
  report_header = "#{report_header} <b>Country:</b>\t #{ENV['COUNTRY']}\n" if ENV['COUNTRY']
316
353
  report_header = "#{report_header} <b>WCAG Accessibility Standard:</b>\t #{ENV['ACCESSIBILITY_STANDARD']}\n" if ENV['ACCESSIBILITY_STANDARD']
317
354
  "#{report_header}\n\n"
@@ -76,20 +76,31 @@ module TestCentricity
76
76
  expected = expected.downcase
77
77
  enqueue_exception("#{error_msg} be like '#{value}' but found '#{actual}'") unless actual_like.include?(expected)
78
78
  when :translate
79
- expected = I18n.t(value)
79
+ expected = translate(value)
80
80
  enqueue_assert_equal(expected, actual, error_msg)
81
81
  when :translate_upcase
82
- expected = I18n.t(value).upcase
82
+ expected = translate(value)
83
+ expected = expected.is_a?(Array) ? expected.map(&:upcase) : expected.upcase
83
84
  enqueue_assert_equal(expected, actual, error_msg)
84
85
  when :translate_downcase
85
- expected = I18n.t(value).downcase
86
+ expected = translate(value)
87
+ expected = expected.is_a?(Array) ? expected.map(&:downcase) : expected.downcase
86
88
  enqueue_assert_equal(expected, actual, error_msg)
87
89
  when :translate_capitalize
88
- expected = I18n.t(value).capitalize
90
+ expected = translate(value)
91
+ expected = expected.is_a?(Array) ? expected.map(&:capitalize) : expected.capitalize
89
92
  enqueue_assert_equal(expected, actual, error_msg)
90
93
  when :translate_titlecase
91
- expected = I18n.t(value)
92
- expected = "#{expected.split.each{ |expected| expected.capitalize! }.join(' ')}"
94
+ expected = translate(value)
95
+ expected = if expected.is_a?(Array)
96
+ result = []
97
+ expected.each do |item|
98
+ result.push("#{item.split.each{ |item| item.capitalize! }.join(' ')}")
99
+ end
100
+ result
101
+ else
102
+ "#{expected.split.each{ |expected| expected.capitalize! }.join(' ')}"
103
+ end
93
104
  enqueue_assert_equal(expected, actual, error_msg)
94
105
  end
95
106
  end
@@ -126,6 +137,29 @@ module TestCentricity
126
137
  screen_shot = {path: path, filename: filename}
127
138
  Environ.save_screen_shot(screen_shot)
128
139
  end
140
+
141
+ def self.translate(*args, **opts)
142
+ opts[:locale] ||= I18n.locale
143
+ opts[:raise] = true
144
+ I18n.translate(*args, **opts)
145
+ rescue I18n::MissingTranslationData => err
146
+ puts err
147
+ opts[:locale] = :en
148
+
149
+ # fallback to en if the translation is missing. If the translation isn't
150
+ # in en, then raise again.
151
+ disable_enforce_available_locales do
152
+ I18n.translate(*args, **opts)
153
+ end
154
+ end
155
+
156
+ def self.disable_enforce_available_locales
157
+ saved_enforce_available_locales = I18n.enforce_available_locales
158
+ I18n.enforce_available_locales = false
159
+ yield
160
+ ensure
161
+ I18n.enforce_available_locales = saved_enforce_available_locales
162
+ end
129
163
  end
130
164
 
131
165
 
@@ -34,6 +34,10 @@ class String
34
34
  end
35
35
  end
36
36
 
37
+ def titlecase
38
+ "#{self.split.each{ |text| text.capitalize! }.join(' ')}"
39
+ end
40
+
37
41
  def is_int?
38
42
  Integer(self) && true rescue false
39
43
  end
@@ -1,3 +1,3 @@
1
1
  module TestCentricityWeb
2
- VERSION = '3.2.20'
2
+ VERSION = '3.2.25'
3
3
  end
@@ -127,18 +127,19 @@ module TestCentricity
127
127
  def self.initialize_appium
128
128
  Environ.platform = :mobile
129
129
  Environ.device_name = ENV['APP_DEVICE']
130
- Environ.device_os = ENV['APP_PLATFORM_NAME']
130
+ Environ.device_os = ENV['APP_PLATFORM_NAME'].downcase.to_sym
131
131
  Environ.device_type = ENV['DEVICE_TYPE'] if ENV['DEVICE_TYPE']
132
+ Environ.device_os_version = ENV['APP_VERSION']
132
133
  Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
133
134
  Capybara.default_driver = :appium
134
135
  endpoint = 'http://localhost:4723/wd/hub'
135
136
  desired_capabilities = {
136
- platformName: ENV['APP_PLATFORM_NAME'],
137
- platformVersion: ENV['APP_VERSION'],
137
+ platformName: Environ.device_os,
138
+ platformVersion: Environ.device_os_version,
138
139
  browserName: ENV['APP_BROWSER'],
139
- deviceName: ENV['APP_DEVICE']
140
+ deviceName: Environ.device_name
140
141
  }
141
- desired_capabilities[:avd] = ENV['APP_DEVICE'] if ENV['APP_PLATFORM_NAME'].downcase.to_sym == :android
142
+ desired_capabilities[:avd] = ENV['APP_DEVICE'] if Environ.device_os == :android
142
143
  desired_capabilities[:automationName] = ENV['AUTOMATION_ENGINE'] if ENV['AUTOMATION_ENGINE']
143
144
  if ENV['UDID']
144
145
  Environ.device = :device
@@ -148,30 +149,45 @@ module TestCentricity
148
149
  desired_capabilities[:xcodeSigningId] = ENV['TEAM_NAME'] if ENV['TEAM_NAME']
149
150
  else
150
151
  Environ.device = :simulator
151
- desired_capabilities[:orientation] = ENV['ORIENTATION'].upcase if ENV['ORIENTATION']
152
+ desired_capabilities[:orientation] = Environ.device_orientation.upcase if Environ.device_orientation
152
153
  if Environ.device_os == :ios
153
- desired_capabilities[:language] = ENV['LANGUAGE'] if ENV['LANGUAGE']
154
- desired_capabilities[:locale] = ENV['LOCALE'].gsub('-', '_') if ENV['LOCALE']
154
+ desired_capabilities[:language] = Environ.language if Environ.language
155
+ desired_capabilities[:locale] = Environ.locale.gsub('-', '_') if Environ.locale
155
156
  end
156
157
  end
157
158
  desired_capabilities[:safariIgnoreFraudWarning] = ENV['APP_IGNORE_FRAUD_WARNING'] if ENV['APP_IGNORE_FRAUD_WARNING']
158
159
  desired_capabilities[:safariInitialUrl] = ENV['APP_INITIAL_URL'] if ENV['APP_INITIAL_URL']
159
160
  desired_capabilities[:safariAllowPopups] = ENV['APP_ALLOW_POPUPS'] if ENV['APP_ALLOW_POPUPS']
161
+
162
+ desired_capabilities[:autoAcceptAlerts] = ENV['AUTO_ACCEPT_ALERTS'] if ENV['AUTO_ACCEPT_ALERTS']
163
+ desired_capabilities[:autoDismissAlerts] = ENV['AUTO_DISMISS_ALERTS'] if ENV['AUTO_DISMISS_ALERTS']
164
+ desired_capabilities[:isHeadless] = ENV['HEADLESS'] if ENV['HEADLESS']
165
+
160
166
  desired_capabilities[:newCommandTimeout] = ENV['NEW_COMMAND_TIMEOUT'] if ENV['NEW_COMMAND_TIMEOUT']
161
167
  desired_capabilities[:noReset] = ENV['APP_NO_RESET'] if ENV['APP_NO_RESET']
162
168
  desired_capabilities[:fullReset] = ENV['APP_FULL_RESET'] if ENV['APP_FULL_RESET']
163
169
  desired_capabilities[:webkitDebugProxyPort] = ENV['WEBKIT_DEBUG_PROXY_PORT'] if ENV['WEBKIT_DEBUG_PROXY_PORT']
164
170
  desired_capabilities[:webDriverAgentUrl] = ENV['WEBDRIVER_AGENT_URL'] if ENV['WEBDRIVER_AGENT_URL']
165
- desired_capabilities[:wdaLocalPort] = ENV['WDA_LOCAL_PORT'] if ENV['WDA_LOCAL_PORT']
166
171
  desired_capabilities[:usePrebuiltWDA] = ENV['USE_PREBUILT_WDA'] if ENV['USE_PREBUILT_WDA']
167
172
  desired_capabilities[:useNewWDA] = ENV['USE_NEW_WDA'] if ENV['USE_NEW_WDA']
168
173
  desired_capabilities[:chromedriverExecutable] = ENV['CHROMEDRIVER_EXECUTABLE'] if ENV['CHROMEDRIVER_EXECUTABLE']
174
+ # set wdaLocalPort (iOS) or systemPort (Android) if PARALLEL_PORT is true
175
+ if ENV['PARALLEL'] && ENV['PARALLEL_PORT']
176
+ if Environ.device_os == :ios
177
+ desired_capabilities[:wdaLocalPort] = 8100 + ENV['TEST_ENV_NUMBER'].to_i
178
+ else
179
+ desired_capabilities[:systemPort] = 8200 + ENV['TEST_ENV_NUMBER'].to_i
180
+ end
181
+ else
182
+ desired_capabilities[:wdaLocalPort] = ENV['WDA_LOCAL_PORT'] if ENV['WDA_LOCAL_PORT']
183
+ desired_capabilities[:systemPort] = ENV['SYSTEM_PORT'] if ENV['SYSTEM_PORT']
184
+ end
169
185
 
170
186
  Capybara.register_driver :appium do |app|
171
187
  appium_lib_options = { server_url: endpoint }
172
188
  all_options = {
173
- appium_lib: appium_lib_options,
174
- caps: desired_capabilities
189
+ appium_lib: appium_lib_options,
190
+ caps: desired_capabilities
175
191
  }
176
192
  Appium::Capybara::Driver.new app, all_options
177
193
  end
@@ -528,11 +528,17 @@ module TestCentricity
528
528
 
529
529
  # Hover the cursor over an object
530
530
  #
531
+ # @param visible [Boolean, Symbol] Only find elements with the specified visibility:
532
+ # * true - only finds visible elements.
533
+ # * false - finds invisible _and_ visible elements.
534
+ # * :all - same as false; finds visible and invisible elements.
535
+ # * :hidden - only finds invisible elements.
536
+ # * :visible - same as true; only finds visible elements.
531
537
  # @example
532
538
  # basket_link.hover
533
539
  #
534
- def hover
535
- obj, type = find_element
540
+ def hover(visible = true)
541
+ obj, type = find_element(visible)
536
542
  object_not_found_exception(obj, type)
537
543
  obj.hover
538
544
  end
@@ -541,11 +547,17 @@ module TestCentricity
541
547
  #
542
548
  # @param x [Integer] X offset
543
549
  # @param y [Integer] Y offset
550
+ # @param visible [Boolean, Symbol] Only find elements with the specified visibility:
551
+ # * true - only finds visible elements.
552
+ # * false - finds invisible _and_ visible elements.
553
+ # * :all - same as false; finds visible and invisible elements.
554
+ # * :hidden - only finds invisible elements.
555
+ # * :visible - same as true; only finds visible elements.
544
556
  # @example
545
557
  # timeline_bar.hover_at(100, 5)
546
558
  #
547
- def hover_at(x, y)
548
- obj, = find_element
559
+ def hover_at(x, y, visible = true)
560
+ obj, = find_element(visible)
549
561
  raise "UI #{object_ref_message} not found" unless obj
550
562
  obj.hover_at(x, y)
551
563
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testcentricity_web
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.20
4
+ version: 3.2.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - A.J. Mrozinski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-05 00:00:00.000000000 Z
11
+ date: 2021-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler