testcentricity_web 3.2.16 → 3.2.21

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: 365b55689ded4886c7c52ca8ccb95e8bce18f6c33b6d08fc6872c26b88c2a7e7
4
- data.tar.gz: 534bce4c71c825e0ba51548b180982428ca8d315f58d62752907203271907ce1
3
+ metadata.gz: aa65a9fd864b32c3b3b83f570ae9a6990d6b2072b75935fcf8489e26ff5cb759
4
+ data.tar.gz: da08a618537d5dc3930c3c5740d5a05a73dab8a017ad497cec4aa154956d162d
5
5
  SHA512:
6
- metadata.gz: 5010441fe14bc169b4f8b51ace3fbed1ace9320cf7882d7529e274640ac327032b704b3cea1e9a64eb25e1966f4a5105070f48c2d8fbb94adb4c4752243e8442
7
- data.tar.gz: 75d127eeddce7949fe2d09f265e25d811a9a6f5789632f9ecbe8dc7eef04d78bfe14216188742f208920887a9b64fa96ef29427dbc548a9fb11c3c6bbfc8d6dc
6
+ metadata.gz: 2d6968587d9580dea196021b2b4631b690393b4300883c3e036a5df215ae8f679e1f51bdda1c38f2aa7a221f374ee0bdc400fe7f9a7db4e31a8bcac9675b84ef
7
+ data.tar.gz: a6ff4c34c5260f4bd8dbaef959635ff79723587e2de0498255a749593778536e867264e8fab13e97dfcf315b9fca4cc711e1d77c1feb277738d2defcba8db305
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.21] - 04-FEB-2021
6
+
7
+ ### Changed
8
+ * `UIElement.hover_at` method now accepts an optional `visible` parameter to allow hovering over UI elements that are not
9
+ visible.
10
+
11
+ ## [3.2.20] - 21-JAN-2021
12
+
13
+ ### Changed
14
+ * `UIElement.hover` method now accepts an optional `visible` parameter to allow hovering over UI elements that are not
15
+ visible.
16
+
17
+ ## [3.2.19] - 05-JAN-2021
18
+
19
+ ### Fixed
20
+ * `SelectList.choose_option` and `SelectList.get_options` methods now wait up to 5 seconds for list drop menu to appear.
21
+
22
+ ## [3.2.18] - 12-AUG-2020
23
+
24
+ ### Fixed
25
+ * Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to correctly handle `:row`, `:column`,
26
+ `:cell`, `:item`, and `:attribute` properties.
27
+
28
+ ## [3.2.17] - 19-JUNE-2020
29
+
30
+ ### Changed
31
+ * Updated `Table.define_table_elements` method to accept value for `:row_header` element.
32
+ * Updated `Table.get_row_count`, `Table.get_column_count`, and `Table.get_table_cell_locator` methods to support tables
33
+ with row headers in row #1.
34
+
4
35
  ## [3.2.16] - 13-MAY-2020
5
36
 
6
37
  ### Changed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- testcentricity_web (3.2.16)
4
+ testcentricity_web (3.2.21)
5
5
  appium_lib
6
6
  browserstack-local
7
7
  capybara (>= 3.1, < 4)
@@ -25,7 +25,7 @@ GEM
25
25
  appium_lib_core (~> 3.3)
26
26
  nokogiri (~> 1.8, >= 1.8.1)
27
27
  tomlrb (~> 1.1)
28
- appium_lib_core (3.7.0)
28
+ appium_lib_core (3.10.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.32.1)
36
+ capybara (3.32.2)
37
37
  addressable
38
38
  mini_mime (>= 0.1.3)
39
39
  nokogiri (~> 1.8)
@@ -51,13 +51,13 @@ 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.11.0)
54
+ faker (2.12.0)
55
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.12.2)
60
- i18n (1.8.2)
59
+ ffi (1.13.1)
60
+ i18n (1.8.3)
61
61
  concurrent-ruby (~> 1.0)
62
62
  ice_nine (0.11.2)
63
63
  mini_mime (1.0.2)
@@ -67,12 +67,12 @@ GEM
67
67
  os (1.1.0)
68
68
  power_assert (1.2.0)
69
69
  public_suffix (4.0.5)
70
- rack (2.2.2)
70
+ rack (2.2.3)
71
71
  rack-test (1.1.0)
72
72
  rack (>= 1.0, < 3)
73
73
  rake (13.0.1)
74
74
  redcarpet (3.5.0)
75
- regexp_parser (1.7.0)
75
+ regexp_parser (1.7.1)
76
76
  ruby-ole (1.2.12.2)
77
77
  rubyzip (2.3.0)
78
78
  selenium-webdriver (3.142.7)
@@ -80,7 +80,7 @@ GEM
80
80
  rubyzip (>= 1.2.2)
81
81
  spreadsheet (1.1.7)
82
82
  ruby-ole (>= 1.0)
83
- test-unit (3.3.5)
83
+ test-unit (3.3.6)
84
84
  power_assert
85
85
  thread_safe (0.3.6)
86
86
  tomlrb (1.3.0)
@@ -89,13 +89,13 @@ GEM
89
89
  coercible (~> 1.0)
90
90
  descendants_tracker (~> 0.0, >= 0.0.3)
91
91
  equalizer (~> 0.0, >= 0.0.9)
92
- webdrivers (4.3.0)
92
+ webdrivers (4.4.1)
93
93
  nokogiri (~> 1.6)
94
94
  rubyzip (>= 1.3.0)
95
95
  selenium-webdriver (>= 3.0, < 4.0)
96
- websocket-driver (0.7.1)
96
+ websocket-driver (0.7.2)
97
97
  websocket-extensions (>= 0.1.0)
98
- websocket-extensions (0.1.4)
98
+ websocket-extensions (0.1.5)
99
99
  xpath (3.2.0)
100
100
  nokogiri (~> 1.8)
101
101
 
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
@@ -778,7 +778,7 @@ a `/downloads` folder at the same level as the `/config` and `/features` folders
778
778
 
779
779
  When running tests in multiple concurrent threads using the `parallel_tests` gem, a new folder will be created within the `/downloads` folder for each
780
780
  test thread. This is to ensure that files downloaded in each test thread are isolated from tests running in other parallel threads. An example of the
781
- `/downloads` folder structure for 4 paralle threads is depicted below:
781
+ `/downloads` folder structure for 4 parallel threads is depicted below:
782
782
 
783
783
  my_automation_project
784
784
  ├── config
@@ -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
@@ -1,3 +1,3 @@
1
1
  module TestCentricityWeb
2
- VERSION = '3.2.16'
2
+ VERSION = '3.2.21'
3
3
  end
@@ -209,7 +209,7 @@ module TestCentricity
209
209
  ui_object.content_editable?
210
210
  else
211
211
  if property.is_a?(Hash)
212
- property.each do |key, value|
212
+ property.map do |key, value|
213
213
  case key
214
214
  when :cell
215
215
  ui_object.get_table_cell(value[0].to_i, value[1].to_i)
@@ -68,7 +68,7 @@ module TestCentricity
68
68
 
69
69
  unless @options_list.nil?
70
70
  find_component(@options_list, 'drop menu')
71
- raise "Could not find option #{option} to choose" unless first(:css, @list_item, minimum: 0, wait: 2)
71
+ raise "Could not find option #{option} to choose" unless first(:css, @list_item, minimum: 0, wait: 5)
72
72
 
73
73
  if option.is_a?(Array)
74
74
  option.each do |item|
@@ -344,7 +344,7 @@ module TestCentricity
344
344
  element = @base_object.find(:css, component, minimum: 0, wait: 1)
345
345
  rescue
346
346
  begin
347
- element = page.find(:css, component, minimum: 0, wait: 1)
347
+ element = page.find(:css, component, minimum: 0, wait: 5)
348
348
  rescue
349
349
  raise "List #{component_name} (#{component}) for selectlist named '#{@name}' (#{locator}) not found"
350
350
  end
@@ -7,6 +7,7 @@ module TestCentricity
7
7
  attr_accessor :table_header
8
8
  attr_accessor :header_row
9
9
  attr_accessor :header_column
10
+ attr_accessor :row_header
10
11
  attr_accessor :tree_expand
11
12
  attr_accessor :tree_collapse
12
13
 
@@ -21,7 +22,8 @@ module TestCentricity
21
22
  table_column: 'td',
22
23
  table_header: 'thead',
23
24
  header_row: 'tr',
24
- header_column: 'th'
25
+ header_column: 'th',
26
+ row_header: nil
25
27
  }
26
28
 
27
29
  case @locator_type
@@ -52,6 +54,8 @@ module TestCentricity
52
54
  @header_row = value
53
55
  when :header_column
54
56
  @header_column = value
57
+ when :row_header
58
+ @row_header = value
55
59
  when :tree_expand
56
60
  @tree_expand = value
57
61
  when :tree_collapse
@@ -70,20 +74,18 @@ module TestCentricity
70
74
  #
71
75
  def get_row_count
72
76
  wait_until_exists(5)
73
- case @locator_type
74
- when :xpath
75
- if @table_section.nil?
76
- page.all(:xpath, "#{@locator}/#{@table_body}/#{@table_row}", visible: :all).count
77
- else
78
- page.all(:xpath, "#{@locator}/#{@table_body}/#{@table_section}", visible: :all).count
79
- end
80
- when :css
81
- if @table_section.nil?
82
- page.all(:css, "#{@locator} > #{@table_body} > #{@table_row}", visible: :all).count
83
- else
84
- page.all(:css, "#{@locator} > #{@table_body} > #{@table_section}", visible: :all).count
85
- end
86
- end
77
+ delimiter = case @locator_type
78
+ when :xpath
79
+ "/"
80
+ when :css
81
+ " > "
82
+ end
83
+ path = if @table_section.nil?
84
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_row}"
85
+ else
86
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_section}"
87
+ end
88
+ page.all(@locator_type, path, visible: :all).count
87
89
  end
88
90
 
89
91
  # Wait until the table's row count equals the specified value, or until the specified wait time has expired. If the wait
@@ -138,33 +140,48 @@ module TestCentricity
138
140
  row_count = get_row_count
139
141
  case @locator_type
140
142
  when :xpath
141
- if row_count.zero?
142
- page.all(:xpath, "#{@locator}/#{@table_header}/#{@header_row}/#{@header_column}", visible: :all).count
143
- else
144
- if @table_section.nil?
145
- row_count == 1 ?
146
- page.all(:xpath, "#{@locator}/#{@table_body}/#{@table_row}/#{@table_column}", visible: :all).count :
147
- page.all(:xpath, "#{@locator}/#{@table_body}/#{@table_row}[2]/#{@table_column}", visible: :all).count
148
- else
149
- row_count == 1 ?
150
- page.all(:xpath, "#{@locator}/#{@table_body}/#{@table_section}/#{@table_row}/#{@table_column}", visible: :all).count :
151
- page.all(:xpath, "#{@locator}/#{@table_body}/#{@table_section}[2]/#{@table_row}/#{@table_column}", visible: :all).count
152
- end
153
- end
143
+ delimiter = "/"
144
+ index = "[2]"
154
145
  when :css
155
- if row_count.zero?
156
- page.all(:css, "#{@locator} > #{@table_header} > #{@header_row} > #{@header_column}", visible: :all).count
157
- else
158
- if @table_section.nil?
159
- row_count == 1 ?
160
- page.all(:css, "#{@locator} > #{@table_body} > #{@table_row} > #{@table_column}", visible: :all).count :
161
- page.all(:css, "#{@locator} > #{@table_body} > #{@table_row}:nth-of-type(2) > #{@table_column}", visible: :all).count
162
- else
163
- row_count == 1 ?
164
- page.all(:css, "#{@locator} > #{@table_body} > #{@table_section} > #{@table_row} > #{@table_column}", visible: :all).count :
165
- page.all(:css, "#{@locator} > #{@table_body} > #{@table_section}:nth-of-type(2) > #{@table_row} > #{@table_column}", visible: :all).count
166
- end
167
- end
146
+ delimiter = " > "
147
+ index = ":nth-of-type(2)"
148
+ end
149
+ path = if row_count.zero?
150
+ "#{@locator}#{delimiter}#{@table_header}#{delimiter}#{@header_row}#{delimiter}#{@header_column}"
151
+ else
152
+ if @table_section.nil?
153
+ if row_count == 1
154
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_row}#{delimiter}#{@table_column}"
155
+ else
156
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_row}#{index}#{delimiter}#{@table_column}"
157
+ end
158
+ else
159
+ if row_count == 1
160
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_section}#{delimiter}#{@table_row}#{delimiter}#{@table_column}"
161
+ else
162
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_section}#{index}#{delimiter}#{@table_row}#{delimiter}#{@table_column}"
163
+ end
164
+ end
165
+ end
166
+ if @row_header.nil?
167
+ page.all(@locator_type, path, visible: :all).count
168
+ else
169
+ cols = page.all(@locator_type, path, visible: :all).count
170
+
171
+ path = if @table_section.nil?
172
+ if row_count == 1
173
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_row}#{delimiter}#{@row_header}"
174
+ else
175
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_row}#{index}#{delimiter}#{@row_header}"
176
+ end
177
+ else
178
+ if row_count == 1
179
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_section}#{delimiter}#{@table_row}#{delimiter}#{@row_header}"
180
+ else
181
+ "#{@locator}#{delimiter}#{@table_body}#{delimiter}#{@table_section}#{index}#{delimiter}#{@table_row}#{delimiter}#{@row_header}"
182
+ end
183
+ end
184
+ cols + page.all(@locator_type, path, visible: :all).count
168
185
  end
169
186
  end
170
187
 
@@ -615,7 +632,15 @@ module TestCentricity
615
632
  row_spec = "#{@locator}/#{@table_body}/#{@table_section}"
616
633
  row_spec = "#{row_spec}[#{row}]/#{@table_row}[1]"
617
634
  end
618
- column_spec = "/#{@table_column}[#{column}]"
635
+ column_spec = if @row_header.nil?
636
+ "/#{@table_column}[#{column}]"
637
+ else
638
+ if column == 1
639
+ "/#{@row_header}"
640
+ else
641
+ "/#{@table_column}[#{column - 1}]"
642
+ end
643
+ end
619
644
  when :css
620
645
  if @table_section.nil?
621
646
  row_spec = "#{@locator} > #{@table_body} > #{@table_row}"
@@ -624,7 +649,16 @@ module TestCentricity
624
649
  row_spec = "#{@locator} > #{@table_body} > #{@table_section}"
625
650
  row_spec = "#{row_spec}:nth-of-type(#{row}) > #{@table_row}:nth-of-type(1)"
626
651
  end
627
- column_spec = " > #{@table_column}:nth-of-type(#{column})"
652
+
653
+ column_spec = if @row_header.nil?
654
+ " > #{@table_column}:nth-of-type(#{column})"
655
+ else
656
+ if column == 1
657
+ " > #{@row_header}"
658
+ else
659
+ " > #{@table_column}:nth-of-type(#{column - 1})"
660
+ end
661
+ end
628
662
  end
629
663
  "#{row_spec}#{column_spec}"
630
664
  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.16
4
+ version: 3.2.21
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: 2020-05-13 00:00:00.000000000 Z
11
+ date: 2021-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler