testcentricity 2.3.16.1 → 2.3.17
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/Gemfile.lock +1 -1
- data/README.md +5 -0
- data/lib/testcentricity/app_core/appium_connect_helper.rb +4 -10
- data/lib/testcentricity/app_core/appium_server.rb +0 -0
- data/lib/testcentricity/app_core/screen_objects_helper.rb +7 -45
- data/lib/testcentricity/app_core/screen_sections_helper.rb +10 -48
- data/lib/testcentricity/app_elements/alert.rb +0 -0
- data/lib/testcentricity/app_elements/app_element_helper.rb +33 -3
- data/lib/testcentricity/app_elements/checkbox.rb +21 -5
- data/lib/testcentricity/app_elements/image.rb +0 -0
- data/lib/testcentricity/app_elements/list.rb +11 -1
- data/lib/testcentricity/app_elements/switch.rb +0 -0
- data/lib/testcentricity/exception_queue_helper.rb +44 -0
- data/lib/testcentricity/version.rb +1 -1
- data/lib/testcentricity/web_core/page_objects_helper.rb +2 -43
- data/lib/testcentricity/web_core/page_sections_helper.rb +2 -43
- data/lib/testcentricity/web_elements/list.rb +11 -1
- data/lib/testcentricity/web_elements/ui_elements_helper.rb +28 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 254dae3895ab2f916930ce27ec170ae272e8aa53
|
4
|
+
data.tar.gz: 1c34b8a232896f140423225c73e97f9be2a1603a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a0e9e601a675a2c3118c8bd4840bf7c1957e415203e5eca4a57d623a8e74671d7a7820f6280ac4e2d72fec999ce4e523fbc3bb9dc61faaedbd26587a3bc2b55
|
7
|
+
data.tar.gz: 4bb9432870f15132fca627333747c7da429b38b924252946c11531ba8764f64050547ecb3764b525e0cc74d04f63b4fd0f5dbb433d013a9560590f7a4ad0afc6
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -28,6 +28,11 @@ hosted instances of Chrome, Firefox, Safari, and IE web browsers.
|
|
28
28
|
|
29
29
|
|
30
30
|
## What's New
|
31
|
+
###Version 2.3.17
|
32
|
+
|
33
|
+
* Added `List.wait_until_item_count_is` and `List.wait_until_item_count_changes` methods.
|
34
|
+
* `UIElement.wait_until_value_is` and `List.wait_until_item_count_is` methods now accept comparison hash.
|
35
|
+
|
31
36
|
###Version 2.3.16
|
32
37
|
|
33
38
|
* Added `PageSection.double_click`, `PageObject.right_click`, and `PageObject.send_keys` methods.
|
@@ -18,11 +18,7 @@ module TestCentricity
|
|
18
18
|
Environ.device_name = ENV['APP_DEVICE']
|
19
19
|
Environ.device_os = ENV['APP_PLATFORM_NAME']
|
20
20
|
Environ.device_orientation = ENV['ORIENTATION'] if ENV['ORIENTATION']
|
21
|
-
|
22
|
-
Environ.device = :device
|
23
|
-
else
|
24
|
-
Environ.device = :simulator
|
25
|
-
end
|
21
|
+
ENV['UDID'] ? Environ.device = :device : Environ.device = :simulator
|
26
22
|
end
|
27
23
|
@running = false
|
28
24
|
end
|
@@ -60,11 +56,9 @@ module TestCentricity
|
|
60
56
|
if Environ.is_android?
|
61
57
|
capabilities[:app] = Environ.current.android_apk_path
|
62
58
|
elsif Environ.is_ios?
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
capabilities[:app] = Environ.current.ios_app_path
|
67
|
-
end
|
59
|
+
Environ.is_device? ?
|
60
|
+
capabilities[:app] = Environ.current.ios_ipa_path :
|
61
|
+
capabilities[:app] = Environ.current.ios_app_path
|
68
62
|
end
|
69
63
|
end
|
70
64
|
|
File without changes
|
@@ -109,8 +109,8 @@ module TestCentricity
|
|
109
109
|
class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::AppAlert.new("#{element_name}", self, #{locator}, :page);end))
|
110
110
|
end
|
111
111
|
|
112
|
-
def self.section(section_name, class_name)
|
113
|
-
class_eval(%(def #{section_name};@#{section_name} ||= #{class_name}.new("#{section_name}", self, :page);end))
|
112
|
+
def self.section(section_name, class_name, locator = 0)
|
113
|
+
class_eval(%(def #{section_name};@#{section_name} ||= #{class_name}.new("#{section_name}", self, #{locator}, :page);end))
|
114
114
|
end
|
115
115
|
|
116
116
|
def self.sections(section_hash)
|
@@ -183,6 +183,8 @@ module TestCentricity
|
|
183
183
|
puts "#{ui_object.get_name} - #{property} = #{state}" if ENV['DEBUG']
|
184
184
|
|
185
185
|
case property
|
186
|
+
when :class
|
187
|
+
actual = ui_object.get_attribute(:class)
|
186
188
|
when :exists
|
187
189
|
actual = ui_object.exists?
|
188
190
|
when :enabled
|
@@ -222,49 +224,8 @@ module TestCentricity
|
|
222
224
|
when :y
|
223
225
|
actual = ui_object.y_loc
|
224
226
|
end
|
225
|
-
|
226
|
-
|
227
|
-
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
228
|
-
state.each do |key, value|
|
229
|
-
case key
|
230
|
-
when :lt, :less_than
|
231
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be less than #{value} but found '#{actual}'") unless actual < value
|
232
|
-
when :lt_eq, :less_than_or_equal
|
233
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be less than or equal to #{value} but found '#{actual}'") unless actual <= value
|
234
|
-
when :gt, :greater_than
|
235
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be greater than #{value} but found '#{actual}'") unless actual > value
|
236
|
-
when :gt_eq, :greater_than_or_equal
|
237
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be greater than or equal to #{value} but found '#{actual}'") unless actual >= value
|
238
|
-
when :starts_with
|
239
|
-
ExceptionQueue.enqueue_exception("#{error_msg} start with '#{value}' but found '#{actual}'") unless actual.start_with?(value)
|
240
|
-
when :ends_with
|
241
|
-
ExceptionQueue.enqueue_exception("#{error_msg} end with '#{value}' but found '#{actual}'") unless actual.end_with?(value)
|
242
|
-
when :contains
|
243
|
-
ExceptionQueue.enqueue_exception("#{error_msg} contain '#{value}' but found '#{actual}'") unless actual.include?(value)
|
244
|
-
when :not_contains, :does_not_contain
|
245
|
-
ExceptionQueue.enqueue_exception("#{error_msg} not contain '#{value}' but found '#{actual}'") if actual.include?(value)
|
246
|
-
when :not_equal
|
247
|
-
ExceptionQueue.enqueue_exception("#{error_msg} not equal '#{value}' but found '#{actual}'") if actual == value
|
248
|
-
when :like, :is_like
|
249
|
-
actual_like = actual.delete("\n")
|
250
|
-
actual_like = actual_like.delete("\r")
|
251
|
-
actual_like = actual_like.delete("\t")
|
252
|
-
actual_like = actual_like.delete(' ')
|
253
|
-
actual_like = actual_like.downcase
|
254
|
-
expected = value.delete("\n")
|
255
|
-
expected = expected.delete("\r")
|
256
|
-
expected = expected.delete("\t")
|
257
|
-
expected = expected.delete(' ')
|
258
|
-
expected = expected.downcase
|
259
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be like '#{value}' but found '#{actual}'") unless actual_like.include?(expected)
|
260
|
-
when :translate
|
261
|
-
expected = I18n.t(value)
|
262
|
-
ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) translated #{property} property")
|
263
|
-
end
|
264
|
-
end
|
265
|
-
else
|
266
|
-
ExceptionQueue.enqueue_assert_equal(state, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property")
|
267
|
-
end
|
227
|
+
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
228
|
+
ExceptionQueue.enqueue_comparison(state, actual, error_msg)
|
268
229
|
end
|
269
230
|
end
|
270
231
|
rescue ObjectNotFoundError => e
|
@@ -286,6 +247,7 @@ module TestCentricity
|
|
286
247
|
when :checkbox
|
287
248
|
data_field.set_checkbox_state(data_param.to_bool)
|
288
249
|
when :textfield
|
250
|
+
data_field.clear
|
289
251
|
data_field.set("#{data_param}\t")
|
290
252
|
end
|
291
253
|
end
|
@@ -10,17 +10,17 @@ module TestCentricity
|
|
10
10
|
attr_accessor :parent_list
|
11
11
|
attr_accessor :list_index
|
12
12
|
|
13
|
-
def initialize(name, parent, context)
|
13
|
+
def initialize(name, parent, locator, context)
|
14
14
|
@name = name
|
15
15
|
@parent = parent
|
16
|
+
@locator = locator
|
16
17
|
@context = context
|
17
18
|
@parent_list = nil
|
18
19
|
@list_index = nil
|
19
|
-
@locator = nil
|
20
20
|
end
|
21
21
|
|
22
22
|
def get_locator
|
23
|
-
@locator = section_locator
|
23
|
+
@locator = section_locator if @locator.zero? && defined?(section_locator)
|
24
24
|
locators = []
|
25
25
|
if @context == :section && !@parent.nil?
|
26
26
|
locators.push(@parent.get_locator)
|
@@ -170,8 +170,8 @@ module TestCentricity
|
|
170
170
|
class_eval(%(def #{element_name};@#{element_name} ||= TestCentricity::AppAlert.new("#{element_name}", self, #{locator}, :page);end))
|
171
171
|
end
|
172
172
|
|
173
|
-
def self.section(section_name, class_name)
|
174
|
-
class_eval(%(def #{section_name};@#{section_name} ||= #{class_name}.new("#{section_name}", self, :section);end))
|
173
|
+
def self.section(section_name, class_name, locator = 0)
|
174
|
+
class_eval(%(def #{section_name};@#{section_name} ||= #{class_name}.new("#{section_name}", self, #{locator}, :section);end))
|
175
175
|
end
|
176
176
|
|
177
177
|
def self.sections(section_hash)
|
@@ -301,6 +301,8 @@ module TestCentricity
|
|
301
301
|
puts "#{ui_object.get_name} - #{property} = #{state}" if ENV['DEBUG']
|
302
302
|
|
303
303
|
case property
|
304
|
+
when :class
|
305
|
+
actual = ui_object.get_attribute(:class)
|
304
306
|
when :exists
|
305
307
|
actual = ui_object.exists?
|
306
308
|
when :enabled
|
@@ -340,49 +342,8 @@ module TestCentricity
|
|
340
342
|
when :y
|
341
343
|
actual = ui_object.y_loc
|
342
344
|
end
|
343
|
-
|
344
|
-
|
345
|
-
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
346
|
-
state.each do |key, value|
|
347
|
-
case key
|
348
|
-
when :lt, :less_than
|
349
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be less than #{value} but found '#{actual}'") unless actual < value
|
350
|
-
when :lt_eq, :less_than_or_equal
|
351
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be less than or equal to #{value} but found '#{actual}'") unless actual <= value
|
352
|
-
when :gt, :greater_than
|
353
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be greater than #{value} but found '#{actual}'") unless actual > value
|
354
|
-
when :gt_eq, :greater_than_or_equal
|
355
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be greater than or equal to #{value} but found '#{actual}'") unless actual >= value
|
356
|
-
when :starts_with
|
357
|
-
ExceptionQueue.enqueue_exception("#{error_msg} start with '#{value}' but found '#{actual}'") unless actual.start_with?(value)
|
358
|
-
when :ends_with
|
359
|
-
ExceptionQueue.enqueue_exception("#{error_msg} end with '#{value}' but found '#{actual}'") unless actual.end_with?(value)
|
360
|
-
when :contains
|
361
|
-
ExceptionQueue.enqueue_exception("#{error_msg} contain '#{value}' but found '#{actual}'") unless actual.include?(value)
|
362
|
-
when :not_contains, :does_not_contain
|
363
|
-
ExceptionQueue.enqueue_exception("#{error_msg} not contain '#{value}' but found '#{actual}'") if actual.include?(value)
|
364
|
-
when :not_equal
|
365
|
-
ExceptionQueue.enqueue_exception("#{error_msg} not equal '#{value}' but found '#{actual}'") if actual == value
|
366
|
-
when :like, :is_like
|
367
|
-
actual_like = actual.delete("\n")
|
368
|
-
actual_like = actual_like.delete("\r")
|
369
|
-
actual_like = actual_like.delete("\t")
|
370
|
-
actual_like = actual_like.delete(' ')
|
371
|
-
actual_like = actual_like.downcase
|
372
|
-
expected = value.delete("\n")
|
373
|
-
expected = expected.delete("\r")
|
374
|
-
expected = expected.delete("\t")
|
375
|
-
expected = expected.delete(' ')
|
376
|
-
expected = expected.downcase
|
377
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be like '#{value}' but found '#{actual}'") unless actual_like.include?(expected)
|
378
|
-
when :translate
|
379
|
-
expected = I18n.t(value)
|
380
|
-
ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) translated #{property} property")
|
381
|
-
end
|
382
|
-
end
|
383
|
-
else
|
384
|
-
ExceptionQueue.enqueue_assert_equal(state, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property")
|
385
|
-
end
|
345
|
+
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
346
|
+
ExceptionQueue.enqueue_comparison(state, actual, error_msg)
|
386
347
|
end
|
387
348
|
end
|
388
349
|
rescue ObjectNotFoundError => e
|
@@ -404,6 +365,7 @@ module TestCentricity
|
|
404
365
|
when :checkbox
|
405
366
|
data_field.set_checkbox_state(data_param.to_bool)
|
406
367
|
when :textfield
|
368
|
+
data_field.clear
|
407
369
|
data_field.set("#{data_param}\t")
|
408
370
|
end
|
409
371
|
end
|
File without changes
|
@@ -55,7 +55,11 @@ module TestCentricity
|
|
55
55
|
object_not_found_exception(obj)
|
56
56
|
if value.is_a?(Array)
|
57
57
|
obj.send_keys(value[0])
|
58
|
-
|
58
|
+
if value[1].is_a?(Integer)
|
59
|
+
press_keycode(value[1])
|
60
|
+
else
|
61
|
+
obj.send_keys(value[1])
|
62
|
+
end
|
59
63
|
elsif value.is_a?(String)
|
60
64
|
obj.send_keys(value)
|
61
65
|
end
|
@@ -218,14 +222,17 @@ module TestCentricity
|
|
218
222
|
# Wait until the object's value equals the specified value, or until the specified wait time has expired. If the wait
|
219
223
|
# time is nil, then the wait time will be Environ.default_max_wait_time.
|
220
224
|
#
|
225
|
+
# @param value [String or Hash] value expected or comparison hash
|
221
226
|
# @param seconds [Integer or Float] wait time in seconds
|
222
227
|
# @example
|
223
|
-
# card_authorized_label.wait_until_value_is(
|
228
|
+
# card_authorized_label.wait_until_value_is('Card authorized', 5)
|
229
|
+
# or
|
230
|
+
# total_weight_field.wait_until_value_is({ :greater_than => '250' }, 5)
|
224
231
|
#
|
225
232
|
def wait_until_value_is(value, seconds = nil)
|
226
233
|
timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
|
227
234
|
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
|
228
|
-
wait.until { get_value
|
235
|
+
wait.until { compare(value, get_value) }
|
229
236
|
rescue
|
230
237
|
raise "Value of UI #{object_ref_message} failed to equal '#{value}' after #{timeout} seconds" unless get_value == value
|
231
238
|
end
|
@@ -337,5 +344,28 @@ module TestCentricity
|
|
337
344
|
def object_ref_message
|
338
345
|
"object '#{@name}' (#{get_locator})"
|
339
346
|
end
|
347
|
+
|
348
|
+
def compare(expected, actual)
|
349
|
+
if expected.is_a?(Hash)
|
350
|
+
result = false
|
351
|
+
expected.each do |key, value|
|
352
|
+
case key
|
353
|
+
when :lt, :less_than
|
354
|
+
result = actual < value
|
355
|
+
when :lt_eq, :less_than_or_equal
|
356
|
+
result = actual <= value
|
357
|
+
when :gt, :greater_than
|
358
|
+
result = actual > value
|
359
|
+
when :gt_eq, :greater_than_or_equal
|
360
|
+
result = actual >= value
|
361
|
+
when :not_equal
|
362
|
+
result = actual != value
|
363
|
+
end
|
364
|
+
end
|
365
|
+
else
|
366
|
+
result = expected == actual
|
367
|
+
end
|
368
|
+
result
|
369
|
+
end
|
340
370
|
end
|
341
371
|
end
|
@@ -2,7 +2,7 @@ module TestCentricity
|
|
2
2
|
class AppCheckBox < AppUIElement
|
3
3
|
def initialize(name, parent, locator, context)
|
4
4
|
super
|
5
|
-
@type
|
5
|
+
@type = :checkbox
|
6
6
|
end
|
7
7
|
|
8
8
|
def checked?
|
@@ -11,16 +11,32 @@ module TestCentricity
|
|
11
11
|
obj.attribute('checked') == 'true'
|
12
12
|
end
|
13
13
|
|
14
|
+
# Set the check state of a checkbox object.
|
15
|
+
#
|
16
|
+
# @example
|
17
|
+
# remember_me_checkbox.check
|
18
|
+
#
|
14
19
|
def check
|
15
|
-
|
16
|
-
object_not_found_exception(obj)
|
17
|
-
obj.click unless obj.attribute('checked') == 'true'
|
20
|
+
set_checkbox_state(true)
|
18
21
|
end
|
19
22
|
|
23
|
+
# Uncheck a checkbox object.
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# remember_me_checkbox.uncheck
|
27
|
+
#
|
20
28
|
def uncheck
|
29
|
+
set_checkbox_state(false)
|
30
|
+
end
|
31
|
+
|
32
|
+
def set_checkbox_state(state)
|
21
33
|
obj = element
|
22
34
|
object_not_found_exception(obj)
|
23
|
-
|
35
|
+
if state
|
36
|
+
obj.click unless obj.attribute('checked') == 'true'
|
37
|
+
else
|
38
|
+
obj.click if obj.attribute('checked') == 'true'
|
39
|
+
end
|
24
40
|
end
|
25
41
|
end
|
26
42
|
end
|
File without changes
|
@@ -24,10 +24,20 @@ module TestCentricity
|
|
24
24
|
|
25
25
|
end
|
26
26
|
|
27
|
+
# Wait until the list's item_count equals the specified value, or until the specified wait time has expired. If the wait
|
28
|
+
# time is nil, then the wait time will be Environ.default_max_wait_time.
|
29
|
+
#
|
30
|
+
# @param value [Integer or Hash] value expected or comparison hash
|
31
|
+
# @param seconds [Integer or Float] wait time in seconds
|
32
|
+
# @example
|
33
|
+
# search_results_list.wait_until_item_count_is(10, 15)
|
34
|
+
# or
|
35
|
+
# search_results_list.wait_until_item_count_is({ :greater_than_or_equal => 1 }, 5)
|
36
|
+
#
|
27
37
|
def wait_until_item_count_is(value, seconds = nil)
|
28
38
|
timeout = seconds.nil? ? Environ.default_max_wait_time : seconds
|
29
39
|
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
|
30
|
-
wait.until { get_item_count
|
40
|
+
wait.until { compare(value, get_item_count) }
|
31
41
|
rescue
|
32
42
|
raise "Value of List #{object_ref_message} failed to equal '#{value}' after #{timeout} seconds" unless get_item_count == value
|
33
43
|
end
|
File without changes
|
@@ -28,6 +28,50 @@ module TestCentricity
|
|
28
28
|
@error_queue = nil
|
29
29
|
end
|
30
30
|
|
31
|
+
def self.enqueue_comparison(state, actual, error_msg)
|
32
|
+
if state.is_a?(Hash) && state.length == 1
|
33
|
+
state.each do |key, value|
|
34
|
+
case key
|
35
|
+
when :lt, :less_than
|
36
|
+
enqueue_exception("#{error_msg} be less than #{value} but found '#{actual}'") unless actual < value
|
37
|
+
when :lt_eq, :less_than_or_equal
|
38
|
+
enqueue_exception("#{error_msg} be less than or equal to #{value} but found '#{actual}'") unless actual <= value
|
39
|
+
when :gt, :greater_than
|
40
|
+
enqueue_exception("#{error_msg} be greater than #{value} but found '#{actual}'") unless actual > value
|
41
|
+
when :gt_eq, :greater_than_or_equal
|
42
|
+
enqueue_exception("#{error_msg} be greater than or equal to #{value} but found '#{actual}'") unless actual >= value
|
43
|
+
when :starts_with
|
44
|
+
enqueue_exception("#{error_msg} start with '#{value}' but found '#{actual}'") unless actual.start_with?(value)
|
45
|
+
when :ends_with
|
46
|
+
enqueue_exception("#{error_msg} end with '#{value}' but found '#{actual}'") unless actual.end_with?(value)
|
47
|
+
when :contains
|
48
|
+
enqueue_exception("#{error_msg} contain '#{value}' but found '#{actual}'") unless actual.include?(value)
|
49
|
+
when :not_contains, :does_not_contain
|
50
|
+
enqueue_exception("#{error_msg} not contain '#{value}' but found '#{actual}'") if actual.include?(value)
|
51
|
+
when :not_equal
|
52
|
+
enqueue_exception("#{error_msg} not equal '#{value}' but found '#{actual}'") if actual == value
|
53
|
+
when :like, :is_like
|
54
|
+
actual_like = actual.delete("\n")
|
55
|
+
actual_like = actual_like.delete("\r")
|
56
|
+
actual_like = actual_like.delete("\t")
|
57
|
+
actual_like = actual_like.delete(' ')
|
58
|
+
actual_like = actual_like.downcase
|
59
|
+
expected = value.delete("\n")
|
60
|
+
expected = expected.delete("\r")
|
61
|
+
expected = expected.delete("\t")
|
62
|
+
expected = expected.delete(' ')
|
63
|
+
expected = expected.downcase
|
64
|
+
enqueue_exception("#{error_msg} be like '#{value}' but found '#{actual}'") unless actual_like.include?(expected)
|
65
|
+
when :translate
|
66
|
+
expected = I18n.t(value)
|
67
|
+
enqueue_assert_equal(expected, actual, error_msg)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
else
|
71
|
+
enqueue_assert_equal(state, actual, error_msg)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
31
75
|
private
|
32
76
|
|
33
77
|
def self.enqueue(message)
|
@@ -595,49 +595,8 @@ module TestCentricity
|
|
595
595
|
end
|
596
596
|
end
|
597
597
|
end
|
598
|
-
|
599
|
-
|
600
|
-
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
601
|
-
state.each do |key, value|
|
602
|
-
case key
|
603
|
-
when :lt, :less_than
|
604
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be less than #{value} but found '#{actual}'") unless actual < value
|
605
|
-
when :lt_eq, :less_than_or_equal
|
606
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be less than or equal to #{value} but found '#{actual}'") unless actual <= value
|
607
|
-
when :gt, :greater_than
|
608
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be greater than #{value} but found '#{actual}'") unless actual > value
|
609
|
-
when :gt_eq, :greater_than_or_equal
|
610
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be greater than or equal to #{value} but found '#{actual}'") unless actual >= value
|
611
|
-
when :starts_with
|
612
|
-
ExceptionQueue.enqueue_exception("#{error_msg} start with '#{value}' but found '#{actual}'") unless actual.start_with?(value)
|
613
|
-
when :ends_with
|
614
|
-
ExceptionQueue.enqueue_exception("#{error_msg} end with '#{value}' but found '#{actual}'") unless actual.end_with?(value)
|
615
|
-
when :contains
|
616
|
-
ExceptionQueue.enqueue_exception("#{error_msg} contain '#{value}' but found '#{actual}'") unless actual.include?(value)
|
617
|
-
when :not_contains, :does_not_contain
|
618
|
-
ExceptionQueue.enqueue_exception("#{error_msg} not contain '#{value}' but found '#{actual}'") if actual.include?(value)
|
619
|
-
when :not_equal
|
620
|
-
ExceptionQueue.enqueue_exception("#{error_msg} not equal '#{value}' but found '#{actual}'") if actual == value
|
621
|
-
when :like, :is_like
|
622
|
-
actual_like = actual.delete("\n")
|
623
|
-
actual_like = actual_like.delete("\r")
|
624
|
-
actual_like = actual_like.delete("\t")
|
625
|
-
actual_like = actual_like.delete(' ')
|
626
|
-
actual_like = actual_like.downcase
|
627
|
-
expected = value.delete("\n")
|
628
|
-
expected = expected.delete("\r")
|
629
|
-
expected = expected.delete("\t")
|
630
|
-
expected = expected.delete(' ')
|
631
|
-
expected = expected.downcase
|
632
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be like '#{value}' but found '#{actual}'") unless actual_like.include?(expected)
|
633
|
-
when :translate
|
634
|
-
expected = I18n.t(value)
|
635
|
-
ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) translated #{property} property")
|
636
|
-
end
|
637
|
-
end
|
638
|
-
else
|
639
|
-
ExceptionQueue.enqueue_assert_equal(state, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property")
|
640
|
-
end
|
598
|
+
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
599
|
+
ExceptionQueue.enqueue_comparison(state, actual, error_msg)
|
641
600
|
end
|
642
601
|
end
|
643
602
|
rescue ObjectNotFoundError => e
|
@@ -787,49 +787,8 @@ module TestCentricity
|
|
787
787
|
end
|
788
788
|
end
|
789
789
|
end
|
790
|
-
|
791
|
-
|
792
|
-
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
793
|
-
state.each do |key, value|
|
794
|
-
case key
|
795
|
-
when :lt, :less_than
|
796
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be less than #{value} but found '#{actual}'") unless actual < value
|
797
|
-
when :lt_eq, :less_than_or_equal
|
798
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be less than or equal to #{value} but found '#{actual}'") unless actual <= value
|
799
|
-
when :gt, :greater_than
|
800
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be greater than #{value} but found '#{actual}'") unless actual > value
|
801
|
-
when :gt_eq, :greater_than_or_equal
|
802
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be greater than or equal to #{value} but found '#{actual}'") unless actual >= value
|
803
|
-
when :starts_with
|
804
|
-
ExceptionQueue.enqueue_exception("#{error_msg} start with '#{value}' but found '#{actual}'") unless actual.start_with?(value)
|
805
|
-
when :ends_with
|
806
|
-
ExceptionQueue.enqueue_exception("#{error_msg} end with '#{value}' but found '#{actual}'") unless actual.end_with?(value)
|
807
|
-
when :contains
|
808
|
-
ExceptionQueue.enqueue_exception("#{error_msg} contain '#{value}' but found '#{actual}'") unless actual.include?(value)
|
809
|
-
when :not_contains, :does_not_contain
|
810
|
-
ExceptionQueue.enqueue_exception("#{error_msg} not contain '#{value}' but found '#{actual}'") if actual.include?(value)
|
811
|
-
when :not_equal
|
812
|
-
ExceptionQueue.enqueue_exception("#{error_msg} not equal '#{value}' but found '#{actual}'") if actual == value
|
813
|
-
when :like, :is_like
|
814
|
-
actual_like = actual.delete("\n")
|
815
|
-
actual_like = actual_like.delete("\r")
|
816
|
-
actual_like = actual_like.delete("\t")
|
817
|
-
actual_like = actual_like.delete(' ')
|
818
|
-
actual_like = actual_like.downcase
|
819
|
-
expected = value.delete("\n")
|
820
|
-
expected = expected.delete("\r")
|
821
|
-
expected = expected.delete("\t")
|
822
|
-
expected = expected.delete(' ')
|
823
|
-
expected = expected.downcase
|
824
|
-
ExceptionQueue.enqueue_exception("#{error_msg} be like '#{value}' but found '#{actual}'") unless actual_like.include?(expected)
|
825
|
-
when :translate
|
826
|
-
expected = I18n.t(value)
|
827
|
-
ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) translated #{property} property")
|
828
|
-
end
|
829
|
-
end
|
830
|
-
else
|
831
|
-
ExceptionQueue.enqueue_assert_equal(state, actual, "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property")
|
832
|
-
end
|
790
|
+
error_msg = "Expected UI object '#{ui_object.get_name}' (#{ui_object.get_locator}) #{property} property to"
|
791
|
+
ExceptionQueue.enqueue_comparison(state, actual, error_msg)
|
833
792
|
end
|
834
793
|
end
|
835
794
|
rescue ObjectNotFoundError => e
|
@@ -70,10 +70,20 @@ module TestCentricity
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
+
# Wait until the list's item_count equals the specified value, or until the specified wait time has expired. If the wait
|
74
|
+
# time is nil, then the wait time will be Capybara.default_max_wait_time.
|
75
|
+
#
|
76
|
+
# @param value [Integer or Hash] value expected or comparison hash
|
77
|
+
# @param seconds [Integer or Float] wait time in seconds
|
78
|
+
# @example
|
79
|
+
# search_results_list.wait_until_item_count_is(10, 15)
|
80
|
+
# or
|
81
|
+
# search_results_list.wait_until_item_count_is({ :greater_than_or_equal => 1 }, 5)
|
82
|
+
#
|
73
83
|
def wait_until_item_count_is(value, seconds = nil)
|
74
84
|
timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
|
75
85
|
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
|
76
|
-
wait.until { get_item_count
|
86
|
+
wait.until { compare(value, get_item_count) }
|
77
87
|
rescue
|
78
88
|
raise "Value of List #{object_ref_message} failed to equal '#{value}' after #{timeout} seconds" unless get_item_count == value
|
79
89
|
end
|
@@ -301,14 +301,17 @@ module TestCentricity
|
|
301
301
|
# Wait until the object's value equals the specified value, or until the specified wait time has expired. If the wait
|
302
302
|
# time is nil, then the wait time will be Capybara.default_max_wait_time.
|
303
303
|
#
|
304
|
+
# @param value [String or Hash] value expected or comparison hash
|
304
305
|
# @param seconds [Integer or Float] wait time in seconds
|
305
306
|
# @example
|
306
|
-
# card_authorized_label.wait_until_value_is(
|
307
|
+
# card_authorized_label.wait_until_value_is('Card authorized', 5)
|
308
|
+
# or
|
309
|
+
# total_weight_field.wait_until_value_is({ :greater_than => '250' }, 5)
|
307
310
|
#
|
308
311
|
def wait_until_value_is(value, seconds = nil)
|
309
312
|
timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
|
310
313
|
wait = Selenium::WebDriver::Wait.new(timeout: timeout)
|
311
|
-
wait.until { get_value
|
314
|
+
wait.until { compare(value, get_value) }
|
312
315
|
rescue
|
313
316
|
raise "Value of UI #{object_ref_message} failed to equal '#{value}' after #{timeout} seconds" unless get_value == value
|
314
317
|
end
|
@@ -502,5 +505,28 @@ module TestCentricity
|
|
502
505
|
def object_ref_message
|
503
506
|
"object '#{get_name}' (#{get_locator})"
|
504
507
|
end
|
508
|
+
|
509
|
+
def compare(expected, actual)
|
510
|
+
if expected.is_a?(Hash)
|
511
|
+
result = false
|
512
|
+
expected.each do |key, value|
|
513
|
+
case key
|
514
|
+
when :lt, :less_than
|
515
|
+
result = actual < value
|
516
|
+
when :lt_eq, :less_than_or_equal
|
517
|
+
result = actual <= value
|
518
|
+
when :gt, :greater_than
|
519
|
+
result = actual > value
|
520
|
+
when :gt_eq, :greater_than_or_equal
|
521
|
+
result = actual >= value
|
522
|
+
when :not_equal
|
523
|
+
result = actual != value
|
524
|
+
end
|
525
|
+
end
|
526
|
+
else
|
527
|
+
result = expected == actual
|
528
|
+
end
|
529
|
+
result
|
530
|
+
end
|
505
531
|
end
|
506
532
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: testcentricity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.17
|
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: 2018-03-
|
11
|
+
date: 2018-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|