testcentricity_web 3.2.3 → 3.2.4

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
- SHA1:
3
- metadata.gz: b2284e5d9d6076d5c27019db7602b39cb828c368
4
- data.tar.gz: 92e97559eaf3d043a01e2c66e93b7edf45ef4bc2
2
+ SHA256:
3
+ metadata.gz: f9bdfaf5c58d665211ecd77601ea526762f1b4f80fa4e803487d44f5255c97ea
4
+ data.tar.gz: 10f8d07f59688ce9fd65e5a4872236b16660dce386c71272cbd30bcef13808d1
5
5
  SHA512:
6
- metadata.gz: 486a0f622f68df7e55192339e349e91be78a5c693713ff1def4ea721dade8fa64c8ca0759e4ce5ddc73364402aeaf03a0cde4a9d8a2ddc0a0a98e711c897e1f3
7
- data.tar.gz: 5d77ac898a308048cfc0afe9380c57ca268bbc657019567702ae9a12b33edcc715dfa20afd1a69cfdd44cc785557e3f8d6e0a28cab947910335082056e44b196
6
+ metadata.gz: cfd96ace3200351c8bc5a289428bd8404188e030d6345b8f53cfbdf3f32043c50fef1afa24dbfb4764d6b61085c0fc31b806649e2bace048228c01786bc8b9cc
7
+ data.tar.gz: 63d7c404e1c3a2115e0fc927f20af8a7cd46f5ea4f5931ae1e62e42a7717596f8f5d291c0cafbefb7a59832385a30de50494ffd904ab3ce3d7123ba6c2cb4446
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # CHANGELOG
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [3.2.4] - 16-JAN-2020
5
+
6
+ ### Added
7
+ * Added `Range` type `UIElement` to support interaction with and verification of HTML5 Input Range Slider Objects.
4
8
 
5
9
  ## [3.2.3] - 29-DEC-2019
6
10
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- testcentricity_web (3.2.3)
4
+ testcentricity_web (3.2.4)
5
5
  appium_lib
6
6
  browserstack-local
7
7
  capybara (>= 3.1, < 4)
@@ -10,22 +10,22 @@ PATH
10
10
  faker
11
11
  i18n
12
12
  os (~> 1.0)
13
- selenium-webdriver (>= 3.11.0, < 4.0)
13
+ selenium-webdriver
14
14
  spreadsheet (= 1.1.7)
15
15
  test-unit
16
16
  virtus
17
- webdrivers (~> 3.3)
17
+ webdrivers (~> 4.0)
18
18
 
19
19
  GEM
20
20
  remote: https://rubygems.org/
21
21
  specs:
22
22
  addressable (2.7.0)
23
23
  public_suffix (>= 2.0.2, < 5.0)
24
- appium_lib (10.4.1)
25
- appium_lib_core (~> 3.2)
24
+ appium_lib (10.5.0)
25
+ appium_lib_core (~> 3.3)
26
26
  nokogiri (~> 1.8, >= 1.8.1)
27
27
  tomlrb (~> 1.1)
28
- appium_lib_core (3.2.3)
28
+ appium_lib_core (3.5.0)
29
29
  faye-websocket (~> 0.10.0)
30
30
  selenium-webdriver (~> 3.14, >= 3.14.1)
31
31
  axiom-types (0.1.1)
@@ -33,7 +33,7 @@ GEM
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.28.0)
36
+ capybara (3.30.0)
37
37
  addressable
38
38
  mini_mime (>= 0.1.3)
39
39
  nokogiri (~> 1.8)
@@ -51,48 +51,48 @@ GEM
51
51
  thread_safe (~> 0.3, >= 0.3.1)
52
52
  equalizer (0.0.11)
53
53
  eventmachine (1.2.7)
54
- faker (2.6.0)
55
- i18n (>= 1.6, < 1.8)
54
+ faker (2.10.1)
55
+ i18n (>= 1.6, < 2)
56
56
  faye-websocket (0.10.9)
57
57
  eventmachine (>= 0.12.0)
58
58
  websocket-driver (>= 0.5.1)
59
- ffi (1.11.1)
60
- i18n (1.6.0)
59
+ ffi (1.12.1)
60
+ i18n (1.8.2)
61
61
  concurrent-ruby (~> 1.0)
62
62
  ice_nine (0.11.2)
63
63
  mini_mime (1.0.2)
64
64
  mini_portile2 (2.4.0)
65
- nokogiri (1.10.4)
65
+ nokogiri (1.10.7)
66
66
  mini_portile2 (~> 2.4.0)
67
67
  os (1.0.1)
68
68
  power_assert (1.1.5)
69
- public_suffix (4.0.1)
70
- rack (2.0.7)
69
+ public_suffix (4.0.3)
70
+ rack (2.1.1)
71
71
  rack-test (1.1.0)
72
72
  rack (>= 1.0, < 3)
73
- rake (12.3.2)
74
- redcarpet (3.4.0)
73
+ rake (13.0.1)
74
+ redcarpet (3.5.0)
75
75
  regexp_parser (1.6.0)
76
76
  ruby-ole (1.2.12.2)
77
- rubyzip (1.3.0)
78
- selenium-webdriver (3.142.6)
77
+ rubyzip (2.0.0)
78
+ selenium-webdriver (3.142.7)
79
79
  childprocess (>= 0.5, < 4.0)
80
80
  rubyzip (>= 1.2.2)
81
81
  spreadsheet (1.1.7)
82
82
  ruby-ole (>= 1.0)
83
- test-unit (3.3.4)
83
+ test-unit (3.3.5)
84
84
  power_assert
85
85
  thread_safe (0.3.6)
86
- tomlrb (1.2.8)
86
+ tomlrb (1.2.9)
87
87
  virtus (1.0.5)
88
88
  axiom-types (~> 0.1)
89
89
  coercible (~> 1.0)
90
90
  descendants_tracker (~> 0.0, >= 0.0.3)
91
91
  equalizer (~> 0.0, >= 0.0.9)
92
- webdrivers (3.9.4)
92
+ webdrivers (4.2.0)
93
93
  nokogiri (~> 1.6)
94
- rubyzip (~> 1.0)
95
- selenium-webdriver (~> 3.0)
94
+ rubyzip (>= 1.3.0)
95
+ selenium-webdriver (>= 3.0, < 4.0)
96
96
  websocket-driver (0.7.1)
97
97
  websocket-extensions (>= 0.1.0)
98
98
  websocket-extensions (0.1.4)
@@ -109,4 +109,4 @@ DEPENDENCIES
109
109
  testcentricity_web!
110
110
 
111
111
  BUNDLED WITH
112
- 2.0.1
112
+ 2.1.2
data/README.md CHANGED
@@ -419,6 +419,7 @@ Supported **UI Element** elementTypes and their declarations have the following
419
419
  selectlist :select_name, locator
420
420
  list :list_name, locator
421
421
  table :table_name, locator
422
+ range :range_name, locator
422
423
  image :image_name, locator
423
424
  video :video_name, locator
424
425
  audio :audio_name, locator
@@ -451,6 +452,8 @@ Supported **UI Element** elementTypes and their declarations have the following
451
452
  list_X_name: locator
452
453
  tables table_1_name: locator,
453
454
  table_X_name: locator
455
+ ranges range_1_name: locator,
456
+ range_X_name: locator
454
457
  images image_1_name: locator,
455
458
  image_X_name: locator
456
459
  videos video_1_name: locator,
@@ -504,6 +507,15 @@ With TestCentricity, all UI elements are based on the **UIElement** class, and i
504
507
  element.get_native_attribute(attrib)
505
508
  element.inspect
506
509
 
510
+ **Waiting methods:**
511
+
512
+ element.wait_until_exists(seconds)
513
+ element.wait_until_gone(seconds)
514
+ element.wait_until_visible(seconds)
515
+ element.wait_until_hidden(seconds)
516
+ element.wait_until_value_is(value, seconds)
517
+ element.wait_until_value_changes(seconds)
518
+
507
519
  **WAI-ARIA Object Accessibility (A11y) methods:**
508
520
 
509
521
  element.role
@@ -539,15 +551,6 @@ With TestCentricity, all UI elements are based on the **UIElement** class, and i
539
551
  element.aria_multiselectable?
540
552
  element.aria_busy?
541
553
 
542
- **Waiting methods:**
543
-
544
- element.wait_until_exists(seconds)
545
- element.wait_until_gone(seconds)
546
- element.wait_until_visible(seconds)
547
- element.wait_until_hidden(seconds)
548
- element.wait_until_value_is(value, seconds)
549
- element.wait_until_value_changes(seconds)
550
-
551
554
 
552
555
  ## Instantiating your Page Objects
553
556
 
@@ -31,6 +31,7 @@ require 'testcentricity_web/web_elements/select_list'
31
31
  require 'testcentricity_web/web_elements/list'
32
32
  require 'testcentricity_web/web_elements/table'
33
33
  require 'testcentricity_web/web_elements/textfield'
34
+ require 'testcentricity_web/web_elements/range'
34
35
  require 'testcentricity_web/web_elements/audio'
35
36
  require 'testcentricity_web/web_elements/video'
36
37
  require 'testcentricity_web/web_elements/cell_element'
@@ -33,4 +33,12 @@ class String
33
33
  new_date.strftime(date_time_format)
34
34
  end
35
35
  end
36
+
37
+ def is_int?
38
+ Integer(self) && true rescue false
39
+ end
40
+
41
+ def is_float?
42
+ Float(self) && true rescue false
43
+ end
36
44
  end
@@ -1,3 +1,3 @@
1
1
  module TestCentricityWeb
2
- VERSION = '3.2.3'
2
+ VERSION = '3.2.4'
3
3
  end
@@ -54,7 +54,7 @@ module TestCentricity
54
54
  # @param locator [String] CSS selector or XPath expression that uniquely identifies object
55
55
  # @example
56
56
  # textfield :user_id_field, "//input[@id='UserName']"
57
- # textfield :password_field, 'consumer_password'
57
+ # textfield :password_field, 'input#consumer_password'
58
58
  #
59
59
  def self.textfield(element_name, locator)
60
60
  define_page_element(element_name, TestCentricity::TextField, locator)
@@ -74,6 +74,29 @@ module TestCentricity
74
74
  element_hash.each(&method(:textfield))
75
75
  end
76
76
 
77
+ # Declare and instantiate a single range input UI Element for this page object.
78
+ #
79
+ # @param element_name [Symbol] name of range input object (as a symbol)
80
+ # @param locator [String] CSS selector or XPath expression that uniquely identifies object
81
+ # @example
82
+ # range :volume_level, "//input[@id='volume_slider']"
83
+ # range :points_slider, 'input#points'
84
+ #
85
+ def self.range(element_name, locator)
86
+ define_page_element(element_name, TestCentricity::Range, locator)
87
+ end
88
+
89
+ # Declare and instantiate a collection of range inputs for this page object.
90
+ #
91
+ # @param element_hash [Hash] names of ranges (as a symbol) and CSS selectors or XPath expressions that uniquely identifies the ranges
92
+ # @example
93
+ # ranges points_slider: 'input#points',
94
+ # risk_slider: 'input#risk_percentage'
95
+ #
96
+ def self.ranges(element_hash)
97
+ element_hash.each(&method(:range))
98
+ end
99
+
77
100
  # Declare and instantiate a single checkbox UI Element for this page object.
78
101
  #
79
102
  # @param element_name [Symbol] name of checkbox object (as a symbol)
@@ -228,7 +228,8 @@ module TestCentricity
228
228
  rescue ObjectNotFoundError => e
229
229
  ExceptionQueue.enqueue_exception(e.message)
230
230
  ensure
231
- ExceptionQueue.post_exceptions(fail_message)
231
+ error_msg = "#{fail_message}\nPage URL = #{URI.parse(current_url)}"
232
+ ExceptionQueue.post_exceptions(error_msg)
232
233
  end
233
234
 
234
235
  # Populate the specified UI elements on this page or section object with the associated data from a Hash passed as an
@@ -193,6 +193,29 @@ module TestCentricity
193
193
  element_hash.each(&method(:textfield))
194
194
  end
195
195
 
196
+ # Declare and instantiate a single range input UI Element for this page section.
197
+ #
198
+ # @param element_name [Symbol] name of range input object (as a symbol)
199
+ # @param locator [String] CSS selector or XPath expression that uniquely identifies object
200
+ # @example
201
+ # range :volume_level, "//input[@id='volume_slider']"
202
+ # range :points_slider, 'input#points'
203
+ #
204
+ def self.range(element_name, locator)
205
+ define_element(element_name, TestCentricity::Range, locator)
206
+ end
207
+
208
+ # Declare and instantiate a collection of range inputs for this page section.
209
+ #
210
+ # @param element_hash [Hash] names of ranges (as a symbol) and CSS selectors or XPath expressions that uniquely identifies the ranges
211
+ # @example
212
+ # ranges points_slider: 'input#points',
213
+ # risk_slider: 'input#risk_percentage'
214
+ #
215
+ def self.ranges(element_hash)
216
+ element_hash.each(&method(:range))
217
+ end
218
+
196
219
  # Declare and instantiate a single checkbox UI Element for this page section.
197
220
  #
198
221
  # @param element_name [Symbol] name of checkbox object (as a symbol)
@@ -0,0 +1,36 @@
1
+ module TestCentricity
2
+ class Range < TextField
3
+ def initialize(name, parent, locator, context)
4
+ super
5
+ @type = :range
6
+ end
7
+
8
+ # Set the value property of a range type input object.
9
+ #
10
+ # @param value [Integer]
11
+ # @example
12
+ # volume_level.value = 11
13
+ #
14
+ def value=(value)
15
+ obj, = find_element
16
+ object_not_found_exception(obj, nil)
17
+ page.execute_script('arguments[0].value = arguments[1]', obj, value)
18
+ obj.send_keys(:right)
19
+ end
20
+
21
+ def get_value(visible = true)
22
+ obj, type = find_element(visible)
23
+ object_not_found_exception(obj, type)
24
+ result = obj.value
25
+ unless result.blank?
26
+ if result.is_int?
27
+ result.to_i
28
+ elsif result.is_float?
29
+ result.to_f
30
+ else
31
+ result
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -52,7 +52,15 @@ module TestCentricity
52
52
  obj, = find_element
53
53
  object_not_found_exception(obj, nil)
54
54
  min = obj.native.attribute('min')
55
- min.to_i unless min.blank?
55
+ unless min.blank?
56
+ if min.is_int?
57
+ min.to_i
58
+ elsif min.is_float?
59
+ min.to_f
60
+ else
61
+ min
62
+ end
63
+ end
56
64
  end
57
65
 
58
66
  # Return max attribute of a number type text field.
@@ -65,7 +73,15 @@ module TestCentricity
65
73
  obj, = find_element
66
74
  object_not_found_exception(obj, nil)
67
75
  max = obj.native.attribute('max')
68
- max.to_i unless max.blank?
76
+ unless max.blank?
77
+ if max.is_int?
78
+ max.to_i
79
+ elsif max.is_float?
80
+ max.to_f
81
+ else
82
+ max
83
+ end
84
+ end
69
85
  end
70
86
 
71
87
  # Return step attribute of a number type text field.
@@ -78,7 +94,15 @@ module TestCentricity
78
94
  obj, = find_element
79
95
  object_not_found_exception(obj, nil)
80
96
  step = obj.native.attribute('step')
81
- step.to_i unless step.blank?
97
+ unless step.blank?
98
+ if step.is_int?
99
+ step.to_i
100
+ elsif step.is_float?
101
+ step.to_f
102
+ else
103
+ step
104
+ end
105
+ end
82
106
  end
83
107
 
84
108
  # Clear the contents of a text field
@@ -39,9 +39,9 @@ Gem::Specification.new do |spec|
39
39
  spec.add_runtime_dependency 'faker'
40
40
  spec.add_runtime_dependency 'i18n'
41
41
  spec.add_runtime_dependency 'os', '~> 1.0'
42
- spec.add_runtime_dependency 'selenium-webdriver', ['>= 3.11.0', '< 4.0']
42
+ spec.add_runtime_dependency 'selenium-webdriver'
43
43
  spec.add_runtime_dependency 'spreadsheet', '1.1.7'
44
44
  spec.add_runtime_dependency 'test-unit'
45
- spec.add_runtime_dependency 'webdrivers', '~> 3.3'
45
+ spec.add_runtime_dependency 'webdrivers', '~> 4.0'
46
46
  spec.add_runtime_dependency 'virtus'
47
47
  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.3
4
+ version: 3.2.4
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: 2019-12-29 00:00:00.000000000 Z
11
+ date: 2020-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -162,20 +162,14 @@ dependencies:
162
162
  requirements:
163
163
  - - ">="
164
164
  - !ruby/object:Gem::Version
165
- version: 3.11.0
166
- - - "<"
167
- - !ruby/object:Gem::Version
168
- version: '4.0'
165
+ version: '0'
169
166
  type: :runtime
170
167
  prerelease: false
171
168
  version_requirements: !ruby/object:Gem::Requirement
172
169
  requirements:
173
170
  - - ">="
174
171
  - !ruby/object:Gem::Version
175
- version: 3.11.0
176
- - - "<"
177
- - !ruby/object:Gem::Version
178
- version: '4.0'
172
+ version: '0'
179
173
  - !ruby/object:Gem::Dependency
180
174
  name: spreadsheet
181
175
  requirement: !ruby/object:Gem::Requirement
@@ -210,14 +204,14 @@ dependencies:
210
204
  requirements:
211
205
  - - "~>"
212
206
  - !ruby/object:Gem::Version
213
- version: '3.3'
207
+ version: '4.0'
214
208
  type: :runtime
215
209
  prerelease: false
216
210
  version_requirements: !ruby/object:Gem::Requirement
217
211
  requirements:
218
212
  - - "~>"
219
213
  - !ruby/object:Gem::Version
220
- version: '3.3'
214
+ version: '4.0'
221
215
  - !ruby/object:Gem::Dependency
222
216
  name: virtus
223
217
  requirement: !ruby/object:Gem::Requirement
@@ -296,6 +290,7 @@ files:
296
290
  - lib/testcentricity_web/web_elements/list_element.rb
297
291
  - lib/testcentricity_web/web_elements/list_radio.rb
298
292
  - lib/testcentricity_web/web_elements/radio.rb
293
+ - lib/testcentricity_web/web_elements/range.rb
299
294
  - lib/testcentricity_web/web_elements/select_list.rb
300
295
  - lib/testcentricity_web/web_elements/siebel_open_ui_helper.rb
301
296
  - lib/testcentricity_web/web_elements/table.rb
@@ -326,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
321
  requirements:
327
322
  - Capybara, Selenium-WebDriver
328
323
  rubyforge_project:
329
- rubygems_version: 2.6.14
324
+ rubygems_version: 2.7.9
330
325
  signing_key:
331
326
  specification_version: 4
332
327
  summary: A Page Object and Data Object Model Framework for desktop and mobile web