testcentricity_web 4.1.9 → 4.3.0

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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -1
  3. data/README.md +88 -48
  4. data/lib/testcentricity_web/browser_helper.rb +2 -1
  5. data/lib/testcentricity_web/data_objects/environment.rb +0 -1
  6. data/lib/testcentricity_web/version.rb +1 -1
  7. data/lib/testcentricity_web/web_core/page_objects_helper.rb +40 -3
  8. data/lib/testcentricity_web/web_core/webdriver_helper.rb +89 -80
  9. data/lib/testcentricity_web/web_elements/media.rb +108 -0
  10. data/lib/testcentricity_web/web_elements/textfield.rb +28 -0
  11. data/lib/testcentricity_web/web_elements/ui_elements_helper.rb +39 -1
  12. metadata +37 -181
  13. data/.gitignore +0 -39
  14. data/.idea/.name +0 -1
  15. data/.idea/encodings.xml +0 -6
  16. data/.idea/misc.xml +0 -4
  17. data/.idea/modules.xml +0 -8
  18. data/.idea/vcs.xml +0 -7
  19. data/.rspec +0 -4
  20. data/.rubocop.yml +0 -38
  21. data/.ruby-version +0 -1
  22. data/.simplecov +0 -9
  23. data/CODE_OF_CONDUCT.md +0 -13
  24. data/Gemfile +0 -6
  25. data/Rakefile +0 -115
  26. data/config/cucumber.yml +0 -171
  27. data/config/locales/en-US.yml +0 -56
  28. data/config/test_data/LOCAL_data.json +0 -15
  29. data/config/test_data/LOCAL_data.xls +0 -0
  30. data/config/test_data/LOCAL_data.yml +0 -11
  31. data/config/test_data/data.json +0 -25
  32. data/config/test_data/data.xls +0 -0
  33. data/config/test_data/data.yml +0 -20
  34. data/docker-compose.yml +0 -48
  35. data/features/basic_form_page_css.feature +0 -54
  36. data/features/basic_form_page_xpath.feature +0 -26
  37. data/features/custom_controls.feature +0 -29
  38. data/features/media_players.feature +0 -67
  39. data/features/step_definitions/generic_steps.rb.rb +0 -124
  40. data/features/step_definitions/media_steps.rb +0 -30
  41. data/features/support/data/form_data.rb +0 -43
  42. data/features/support/env.rb +0 -51
  43. data/features/support/hooks.rb +0 -270
  44. data/features/support/pages/base_test_page.rb +0 -22
  45. data/features/support/pages/basic_css_form_page.rb +0 -53
  46. data/features/support/pages/basic_form_page.rb +0 -429
  47. data/features/support/pages/basic_xpath_form_page.rb +0 -54
  48. data/features/support/pages/custom_controls_page.rb +0 -263
  49. data/features/support/pages/indexed_sections_page.rb +0 -57
  50. data/features/support/pages/media_test_page.rb +0 -207
  51. data/features/support/sections/header_nav.rb +0 -48
  52. data/features/support/sections/product_card.rb +0 -39
  53. data/features/support/world_data.rb +0 -12
  54. data/features/support/world_pages.rb +0 -18
  55. data/reports/.keep +0 -1
  56. data/spec/fixtures/page_object.rb +0 -22
  57. data/spec/fixtures/section_object.rb +0 -21
  58. data/spec/spec_helper.rb +0 -31
  59. data/spec/testcentricity_web/browser_spec.rb +0 -41
  60. data/spec/testcentricity_web/elements/audio_spec.rb +0 -68
  61. data/spec/testcentricity_web/elements/button_spec.rb +0 -18
  62. data/spec/testcentricity_web/elements/checkbox_spec.rb +0 -33
  63. data/spec/testcentricity_web/elements/file_field_spec.rb +0 -13
  64. data/spec/testcentricity_web/elements/image_spec.rb +0 -33
  65. data/spec/testcentricity_web/elements/label_spec.rb +0 -18
  66. data/spec/testcentricity_web/elements/link_spec.rb +0 -23
  67. data/spec/testcentricity_web/elements/list_spec.rb +0 -13
  68. data/spec/testcentricity_web/elements/radio_spec.rb +0 -28
  69. data/spec/testcentricity_web/elements/ui_element_spec.rb +0 -125
  70. data/spec/testcentricity_web/elements/video_spec.rb +0 -68
  71. data/spec/testcentricity_web/helper_specs/object_helpers_spec.rb +0 -39
  72. data/spec/testcentricity_web/helper_specs/string_helpers_spec.rb +0 -49
  73. data/spec/testcentricity_web/page_object_spec.rb +0 -90
  74. data/spec/testcentricity_web/section_object_spec.rb +0 -72
  75. data/spec/testcentricity_web/version_spec.rb +0 -7
  76. data/spec/testcentricity_web/webdriver_connect/grid_webdriver_spec.rb +0 -72
  77. data/spec/testcentricity_web/webdriver_connect/local_webdriver_spec.rb +0 -86
  78. data/spec/testcentricity_web/webdriver_connect/mobile_webdriver_spec.rb +0 -65
  79. data/test_site/basic_test_page.html +0 -290
  80. data/test_site/chosen-sprite.png +0 -0
  81. data/test_site/chosen-sprite@2x.png +0 -0
  82. data/test_site/chosen.css +0 -496
  83. data/test_site/chosen.jquery.js +0 -1359
  84. data/test_site/chosen.jquery.min.js +0 -3
  85. data/test_site/chosen.min.css +0 -11
  86. data/test_site/chosen.proto.js +0 -1399
  87. data/test_site/chosen.proto.min.js +0 -3
  88. data/test_site/composer.json +0 -36
  89. data/test_site/custom_controls_page.html +0 -629
  90. data/test_site/docsupport/chosen.png +0 -0
  91. data/test_site/docsupport/init.js +0 -11
  92. data/test_site/docsupport/init.proto.js +0 -16
  93. data/test_site/docsupport/jquery-1.12.4.min.js +0 -5
  94. data/test_site/docsupport/jquery-3.2.1.min.js +0 -4
  95. data/test_site/docsupport/oss-credit.png +0 -0
  96. data/test_site/docsupport/prism.css +0 -108
  97. data/test_site/docsupport/prism.js +0 -9
  98. data/test_site/docsupport/prototype-1.7.0.0.js +0 -6082
  99. data/test_site/docsupport/style.css +0 -219
  100. data/test_site/images/Blouse_Black.jpg +0 -0
  101. data/test_site/images/Granny.jpg +0 -0
  102. data/test_site/images/Printed_Dress.jpg +0 -0
  103. data/test_site/images/T-shirt.jpg +0 -0
  104. data/test_site/images/Wilder.jpg +0 -0
  105. data/test_site/images/You_Betcha.jpg +0 -0
  106. data/test_site/images/jeans3.jpg +0 -0
  107. data/test_site/indexed_sections_page.html +0 -215
  108. data/test_site/media/MIB2-subtitles-pt-BR.vtt +0 -49
  109. data/test_site/media/MIB2.mp4 +0 -0
  110. data/test_site/media/MP4_small.mp4 +0 -0
  111. data/test_site/media/MPS_sample.mp3 +0 -0
  112. data/test_site/media/bbc_scotland_report.mp3 +0 -0
  113. data/test_site/media/count_and_bars.mp4 +0 -0
  114. data/test_site/media_page.html +0 -86
  115. data/testcentricity_web.gemspec +0 -57
@@ -1,263 +0,0 @@
1
- # Page Object class definition for Custom Controls page with CSS locators
2
-
3
- class CustomControlsPage < BaseTestPage
4
- trait(:page_name) { 'Custom Controls' }
5
- trait(:page_locator) { 'div.custom-controls-page-body' }
6
- trait(:page_url) { '/custom_controls_page.html' }
7
- trait(:navigator) { header_nav.open_custom_controls_page }
8
- trait(:page_title) { 'Custom Controls Page'}
9
- trait(:divisions) {
10
- ['NFC EAST',
11
- 'NFC NORTH',
12
- 'NFC SOUTH',
13
- 'NFC WEST',
14
- 'AFC EAST',
15
- 'AFC NORTH',
16
- 'AFC SOUTH',
17
- 'AFC WEST']
18
- }
19
- trait(:teams) {
20
- ['Dallas Cowboys',
21
- 'New York Giants',
22
- 'Philadelphia Eagles',
23
- 'Washington Redskins',
24
- 'Chicago Bears',
25
- 'Detroit Lions',
26
- 'Green Bay Packers',
27
- 'Minnesota Vikings',
28
- 'Atlanta Falcons',
29
- 'Carolina Panthers',
30
- 'New Orleans Saints',
31
- 'Tampa Bay Buccaneers',
32
- 'Arizona Cardinals',
33
- 'St. Louis Rams',
34
- 'San Francisco 49ers',
35
- 'Seattle Seahawks',
36
- 'Buffalo Bills',
37
- 'Miami Dolphins',
38
- 'New England Patriots',
39
- 'New York Jets',
40
- 'Baltimore Ravens',
41
- 'Cincinnati Bengals',
42
- 'Cleveland Browns',
43
- 'Pittsburgh Steelers',
44
- 'Houston Texans',
45
- 'Indianapolis Colts',
46
- 'Jacksonville Jaguars',
47
- 'Tennessee Titans',
48
- 'Denver Broncos',
49
- 'Kansas City Chiefs',
50
- 'Oakland Raiders',
51
- 'San Diego Chargers']
52
- }
53
- trait(:countries) { ['United Kingdom', 'Tonga', 'Sweden', 'Peru', 'Belize', 'Mali', 'Ireland'] }
54
-
55
- # Custom Controls page UI elements
56
- selectlists country_select: 'div#country_chosen',
57
- team_select: 'div#team_chosen'
58
- checkboxes pork_check: "label[for='check1']",
59
- beef_check: "label[for='check2']",
60
- chicken_check: "label[for='check3']",
61
- shrimp_check: "label[for='check4']"
62
- radios mild_radio: "label[for='radio1']",
63
- spicey_radio: "label[for='radio2']",
64
- hot_radio: "label[for='radio3']",
65
- flaming_radio: "label[for='radio4']"
66
- tables custom_table: 'div#resp-table'
67
-
68
- attr_accessor :selected_country
69
- attr_accessor :selected_team
70
- attr_accessor :selected_checks
71
- attr_accessor :selected_radio
72
-
73
- def initialize
74
- super
75
- # define the custom list element components for the Country and Team Chosen selectlists
76
- list_spec = {
77
- selected_item: "li[class*='result-selected']",
78
- list_item: "li[class*='active-result']",
79
- text_field: 'input.chosen-search-input',
80
- options_list: 'ul.chosen-results',
81
- group_item: 'li.group-result',
82
- group_heading: 'li.group-result'
83
- }
84
- country_select.define_list_elements(list_spec)
85
- team_select.define_list_elements(list_spec)
86
- # define the custom element components for the checkboxes
87
- check_spec = { input: "input[type='checkbox']" }
88
- pork_check.define_custom_elements(check_spec)
89
- beef_check.define_custom_elements(check_spec)
90
- chicken_check.define_custom_elements(check_spec)
91
- shrimp_check.define_custom_elements(check_spec)
92
- # define the custom element components for the radios
93
- radio_spec = { input: "input[type='radio']" }
94
- mild_radio.define_custom_elements(radio_spec)
95
- spicey_radio.define_custom_elements(radio_spec)
96
- hot_radio.define_custom_elements(radio_spec)
97
- flaming_radio.define_custom_elements(radio_spec)
98
- # define the custom element components for the table
99
- table_spec = {
100
- table_body: 'div#resp-table-body',
101
- table_row: 'div.resp-table-row',
102
- table_column: 'div.table-body-cell',
103
- table_header: 'div#resp-table-header',
104
- header_column: 'div.table-header-cell'
105
- }
106
- custom_table.define_table_elements(table_spec)
107
- end
108
-
109
- def verify_page_ui
110
- super
111
-
112
- ui = {
113
- country_select => {
114
- exists: true,
115
- visible: true,
116
- enabled: true,
117
- optioncount: 251
118
- },
119
- team_select => {
120
- exists: true,
121
- visible: true,
122
- enabled: true,
123
- optioncount: 32,
124
- options: teams,
125
- groupcount: 8,
126
- group_headings: divisions
127
- },
128
- pork_check => {
129
- exists: true,
130
- visible: true,
131
- enabled: true,
132
- checked: true,
133
- caption: 'Pork'
134
- },
135
- beef_check => {
136
- exists: true,
137
- visible: true,
138
- enabled: true,
139
- checked: false,
140
- caption: 'Beef'
141
- },
142
- chicken_check => {
143
- exists: true,
144
- visible: true,
145
- enabled: true,
146
- checked: false,
147
- caption: 'Chicken'
148
- },
149
- shrimp_check => {
150
- exists: true,
151
- visible: true,
152
- enabled: true,
153
- checked: false,
154
- caption: 'Shrimp'
155
- },
156
- mild_radio => {
157
- exists: true,
158
- visible: true,
159
- enabled: true,
160
- selected: true,
161
- caption: 'Mild'
162
- },
163
- spicey_radio => {
164
- exists: true,
165
- visible: true,
166
- enabled: true,
167
- selected: false,
168
- caption: 'Spicey'
169
- },
170
- hot_radio => {
171
- exists: true,
172
- visible: true,
173
- enabled: true,
174
- selected: false,
175
- caption: 'Hot'
176
- },
177
- flaming_radio => {
178
- exists: true,
179
- visible: true,
180
- enabled: true,
181
- selected: false,
182
- caption: 'Flaming'
183
- },
184
- custom_table => {
185
- visible: true,
186
- columncount: 4,
187
- rowcount: 3,
188
- { row: 1 } => [['Cell 1–1', 'Cell 1–2', 'Cell 1–3', 'Cell 1–4']],
189
- { row: 2 } => [['Cell 2–1', 'Cell 2–2', 'Cell 2–3', 'Cell 2–4']],
190
- { row: 3 } => [['Cell 3–1', 'Cell 3–2', 'Cell 3–3', 'Cell 3–4']],
191
- { cell: [1, 3] } => ['Cell 1–3'],
192
- { cell: [2, 4] } => ['Cell 2–4'],
193
- { column: 3 } => [['Cell 1–3', 'Cell 2–3', 'Cell 3–3']]
194
- }
195
- }
196
- verify_ui_states(ui)
197
- team_select.verify_options(teams)
198
- end
199
-
200
- def populate_form
201
- @selected_country = countries.sample
202
- @selected_team = teams.sample
203
- @selected_checks = [:chicken, :shrimp]
204
- @selected_radio = 3
205
- fields = {
206
- country_select => @selected_country,
207
- team_select => @selected_team,
208
- pork_check => @selected_checks.include?(:pork),
209
- beef_check => @selected_checks.include?(:beef),
210
- chicken_check => @selected_checks.include?(:chicken),
211
- shrimp_check => @selected_checks.include?(:shrimp),
212
- mild_radio => @selected_radio == 1,
213
- spicey_radio => @selected_radio == 2,
214
- hot_radio => @selected_radio == 3,
215
- flaming_radio => @selected_radio == 4
216
- }
217
- populate_data_fields(fields)
218
- end
219
-
220
- def set_select_options
221
- @selected_country = countries.sample
222
- @selected_team = teams.sample
223
- country_select.set(@selected_country)
224
- team_select.set(@selected_team)
225
- end
226
-
227
- def verify_form_data
228
- ui = {
229
- country_select => { selected: @selected_country },
230
- team_select => { selected: @selected_team },
231
- pork_check => { checked: @selected_checks.include?(:pork) },
232
- beef_check => { checked: @selected_checks.include?(:beef) },
233
- chicken_check => { checked: @selected_checks.include?(:chicken) },
234
- shrimp_check => { checked: @selected_checks.include?(:shrimp) },
235
- mild_radio => { selected: @selected_radio == 1 },
236
- spicey_radio => { selected: @selected_radio == 2 },
237
- hot_radio => { selected: @selected_radio == 3 },
238
- flaming_radio => { selected: @selected_radio == 4 }
239
- }
240
- verify_ui_states(ui)
241
- end
242
-
243
- def choose_options_by(method)
244
- case method.downcase.to_sym
245
- when :index
246
- country_select.choose_option(index: 56)
247
- team_select.choose_option(index: 20)
248
- when :text
249
- country_select.choose_option('Costa Rica')
250
- team_select.choose_option('Seattle Seahawks')
251
- else
252
- raise "#{method} is not a valid selector"
253
- end
254
- end
255
-
256
- def verify_chosen_options
257
- ui = {
258
- country_select => { selected: 'Costa Rica' },
259
- team_select => { selected: 'Seattle Seahawks' }
260
- }
261
- verify_ui_states(ui)
262
- end
263
- end
@@ -1,57 +0,0 @@
1
- # Page Object class definition for Indexed Sections page with CSS locators
2
-
3
- class IndexedSectionsPage < BaseTestPage
4
- trait(:page_name) { 'Indexed Sections' }
5
- trait(:page_locator) { 'div.indexed-sections-page-body' }
6
- trait(:page_url) { '/indexed_sections_page.html' }
7
- trait(:navigator) { header_nav.open_indexed_sections_page }
8
- trait(:page_title) { 'Indexed Sections Page'}
9
-
10
- list :product_list, 'div#product_list'
11
- section :product_card, ProductCard
12
-
13
- def initialize
14
- super
15
- # define the list item element for the Product list object
16
- list_elements = { list_item: 'div.column' }
17
- product_list.define_list_elements(list_elements)
18
- # associate the Product Card indexed section object with the Product list object
19
- product_card.set_list_index(product_list)
20
- end
21
-
22
- def verify_page_ui
23
- super
24
-
25
- ui = {
26
- product_list => {
27
- exists: true,
28
- visible: true,
29
- itemcount: 4
30
- },
31
- product_card => { items: ['Tailored Jeans', 'Faded Short Sleeve T-shirts', 'Print Dress', 'Blouse'] }
32
- }
33
- verify_ui_states(ui)
34
- # verify contents of first product card
35
- product_card.set_list_index(product_list, 1)
36
- card_data = {
37
- product_name: 'Tailored Jeans',
38
- price: '$59.99',
39
- description: 'Some text about the jeans. Super slim and comfy lorem ipsum lorem jeansum. Lorem jeamsun denim lorem jeansum.',
40
- rating: 3,
41
- image_alt: 'Denim Jeans',
42
- image_src: 'images/jeans3.jpg'
43
- }
44
- product_card.verify_card(card_data)
45
- # verify contents of second product card
46
- product_card.set_list_index(product_list, 2)
47
- card_data = {
48
- product_name: 'Faded Short Sleeve T-shirts',
49
- price: '$19.99',
50
- description: "Faded short sleeve t-shirt with high neckline. Soft and stretchy material for a comfortable fit. Accessorize with a straw hat and you're ready for summer!",
51
- rating: 4,
52
- image_alt: 'Faded Short Sleeve T-shirts',
53
- image_src: 'images/T-shirt.jpg'
54
- }
55
- product_card.verify_card(card_data)
56
- end
57
- end
@@ -1,207 +0,0 @@
1
- # Page Object class definition for Media Test page with CSS locators
2
-
3
- class MediaTestPage < BaseTestPage
4
- trait(:page_name) { 'Media Test' }
5
- trait(:page_locator) { 'div.media-page-body' }
6
- trait(:page_url) { '/media_page.html' }
7
- trait(:navigator) { header_nav.open_media_page }
8
- trait(:page_title) { 'Media Page'}
9
-
10
- # Media Test page UI elements
11
- videos video_player_1: 'video#video_player1'
12
- audios audio_player: 'audio#audio_player'
13
-
14
- def verify_page_ui
15
- super
16
-
17
- preload = case
18
- when Environ.browser == :safari
19
- 'auto'
20
- when Environ.device_os == :ios && Environ.driver != :webdriver
21
- 'auto'
22
- when %i[firefox firefox_headless].include?(Environ.browser)
23
- ''
24
- else
25
- 'metadata'
26
- end
27
- video_player_1.wait_until_ready_state_is(4, 20)
28
- audio_player.wait_until_ready_state_is(4, 10)
29
- ui = {
30
- video_player_1 => {
31
- visible: true,
32
- paused: true,
33
- autoplay: false,
34
- loop: false,
35
- ended: false,
36
- controls: true,
37
- current_time: 0,
38
- ready_state: 4,
39
- default_playback_rate: 1,
40
- playback_rate: 1,
41
- seeking: false,
42
- default_muted: false,
43
- muted: false,
44
- volume: 1,
45
- preload: preload,
46
- poster: '',
47
- src: '',
48
- duration: 17.6
49
- },
50
- audio_player => {
51
- visible: true,
52
- paused: true,
53
- autoplay: false,
54
- loop: false,
55
- ended: false,
56
- controls: true,
57
- current_time: 0,
58
- ready_state: 4,
59
- default_playback_rate: 1,
60
- playback_rate: 1,
61
- seeking: false,
62
- default_muted: false,
63
- muted: false,
64
- volume: 1,
65
- preload: preload,
66
- src: ''
67
- }
68
- }
69
- verify_ui_states(ui)
70
- unless Environ.browser == :safari
71
- ui = { video_player_1 => {
72
- width: video_player_1.video_width,
73
- height: video_player_1.video_height
74
- }
75
- }
76
- verify_ui_states(ui)
77
- end
78
- end
79
-
80
- def perform_action(media_type, action)
81
- player = dispatch_player(media_type)
82
- case action.downcase.to_sym
83
- when :play
84
- player.play
85
- player.send_keys(:enter) if player.paused?
86
- player.click_at(25, 25) if player.paused?
87
- when :pause
88
- player.pause
89
- when :mute
90
- player.mute
91
- when :unmute
92
- player.unmute
93
- else
94
- raise "#{action} is not a valid selector"
95
- end
96
- sleep(2)
97
- end
98
-
99
- def verify_media_state(media_type, state)
100
- player = dispatch_player(media_type)
101
- duration = player.duration
102
- props = case state.downcase.to_sym
103
- when :playing
104
- {
105
- visible: true,
106
- paused: false,
107
- ended: false,
108
- current_time: { greater_than: 0 },
109
- seeking: false
110
- }
111
- when :paused
112
- {
113
- visible: true,
114
- paused: true,
115
- ended: false,
116
- current_time: { greater_than: 0 },
117
- seeking: false
118
- }
119
- when :ended
120
- {
121
- visible: true,
122
- paused: true,
123
- ended: true,
124
- current_time: duration,
125
- seeking: false
126
- }
127
- when :muted
128
- {
129
- visible: true,
130
- muted: true
131
- }
132
- when :unmuted
133
- {
134
- visible: true,
135
- muted: false
136
- }
137
- else
138
- raise "#{state} is not a valid selector"
139
- end
140
- verify_ui_states(player => props)
141
- end
142
-
143
- def set_playback_rate(media_type, rate)
144
- player = dispatch_player(media_type)
145
- player.playback_rate = rate.to_f
146
- reset_play(player)
147
- end
148
-
149
- def verify_playback_rate(media_type, rate)
150
- player = dispatch_player(media_type)
151
- ui = {
152
- player => {
153
- playback_rate: rate.to_f,
154
- visible: true,
155
- paused: false,
156
- seeking: false,
157
- current_time: { greater_than: 0 }
158
- }
159
- }
160
- verify_ui_states(ui)
161
- end
162
-
163
- def set_volume(media_type, volume)
164
- player = dispatch_player(media_type)
165
- player.volume = volume.to_f
166
- reset_play(player)
167
- end
168
-
169
- def verify_volume(media_type, volume)
170
- player = dispatch_player(media_type)
171
- ui = {
172
- player => {
173
- volume: volume.to_f,
174
- visible: true,
175
- muted: false,
176
- paused: false,
177
- seeking: false,
178
- current_time: { greater_than: 0 }
179
- }
180
- }
181
- verify_ui_states(ui)
182
- end
183
-
184
- private
185
-
186
- def dispatch_player(media_type)
187
- player = case media_type.downcase.to_sym
188
- when :video
189
- video_player_1
190
- when :audio
191
- audio_player
192
- else
193
- raise "#{media_type} is not a valid selector"
194
- end
195
- player.wait_until_ready_state_is(4, 20)
196
- player
197
- end
198
-
199
- def reset_play(player)
200
- player.pause
201
- player.current_time = 0
202
- player.play
203
- player.send_keys(:enter) if player.paused?
204
- player.click_at(25, 25) if player.paused?
205
- sleep(2)
206
- end
207
- end
@@ -1,48 +0,0 @@
1
- # Section Object class definition for Top Navigation Bar
2
-
3
- class NavHeader < TestCentricity::PageSection
4
- trait(:section_locator) { 'div#nav_bar' }
5
- trait(:section_name) { 'Top Navigation Bar' }
6
-
7
- # Top Navigation Bar UI elements
8
- links form_link: 'a#form_link',
9
- media_link: 'a#media_link',
10
- indexed_sections_link: 'a#indexed_sections_link',
11
- custom_controls_link: 'a#custom_controls_link'
12
-
13
- def open_form_page
14
- form_link.click
15
- end
16
-
17
- def open_media_page
18
- media_link.click
19
- end
20
-
21
- def open_indexed_sections_page
22
- indexed_sections_link.click
23
- end
24
-
25
- def open_custom_controls_page
26
- custom_controls_link.click
27
- end
28
-
29
- def verify_nav_bar
30
- self.wait_until_visible(5)
31
- ui = {
32
- self => {
33
- exists: true,
34
- visible: true,
35
- hidden: false,
36
- displayed: true,
37
- enabled: true,
38
- disabled: false,
39
- class: 'topnav'
40
- },
41
- form_link => { visible: true, caption: 'Basic HTML Form' },
42
- media_link => { visible: true, caption: 'Media' },
43
- indexed_sections_link => { visible: true, caption: 'Indexed Sections' },
44
- custom_controls_link => { visible: true, caption: 'Custom Controls' },
45
- }
46
- verify_ui_states(ui)
47
- end
48
- end
@@ -1,39 +0,0 @@
1
- # Section Object class definition for Product Card
2
-
3
- class ProductCard < TestCentricity::PageSection
4
- trait(:section_locator) { 'div.column' }
5
- trait(:section_name) { 'Product Card' }
6
-
7
- # Product Card UI elements
8
- image :product_image, "img[data-test-id='product_image']"
9
- labels name_label: "h1[data-test-id='product_name']",
10
- price_label: "p[data-test-id='price']",
11
- description_label: "p[data-test-id='description']"
12
- elements ratings: "div[data-test-id='rating']",
13
- checked_star: 'span.fa.fa-star.checked'
14
- button :add_to_cart_button, "button[data-test-id='add_to_cart']"
15
-
16
- def get_value
17
- name_label.get_caption
18
- end
19
-
20
- def verify_card(card_data)
21
- ui = {
22
- product_image => {
23
- visible: true,
24
- loaded: true,
25
- broken: false,
26
- src: { ends_with: card_data[:image_src] },
27
- alt: card_data[:image_alt]
28
- },
29
- name_label => { visible: true, caption: card_data[:product_name] },
30
- price_label => { visible: true, caption: card_data[:price] },
31
- description_label => { visible: true, caption: card_data[:description] },
32
- checked_star => { count: card_data[:rating] },
33
- add_to_cart_button => { visible: true, enabled: true, caption: 'Add to Cart' }
34
- }
35
- within(self.get_locator) do
36
- verify_ui_states(ui)
37
- end
38
- end
39
- end
@@ -1,12 +0,0 @@
1
- module WorldData
2
- #
3
- # data_objects method returns a hash table of your web app's data objects and associated data object classes to be instantiated
4
- # by the TestCentricity™ DataManager. Data Object class definitions are contained in the features/support/data folder.
5
- #
6
- def data_objects
7
- { form_data_source: FormDataSource }
8
- end
9
- end
10
-
11
-
12
- World(WorldData)
@@ -1,18 +0,0 @@
1
- module WorldPages
2
- #
3
- # page_objects method returns a hash table of your web app's page objects and associated page classes to be instantiated
4
- # by the TestCentricity™ PageManager. Page Object class definitions are contained in the features/support/pages folder.
5
- #
6
- def page_objects
7
- {
8
- basic_css_form_page: BasicCSSFormPage,
9
- basic_xpath_form_page: BasicXpathFormPage,
10
- media_test_page: MediaTestPage,
11
- indexed_sections_page: IndexedSectionsPage,
12
- custom_controls_page: CustomControlsPage
13
- }
14
- end
15
- end
16
-
17
-
18
- World(WorldPages)
data/reports/.keep DELETED
@@ -1 +0,0 @@
1
- Placeholder file to allow the reports folder to be saved to repository. This folder is required for Jenkins test jobs using the Cucumber Reporting plug-in.
@@ -1,22 +0,0 @@
1
- class TestPage < TestCentricity::PageObject
2
- trait(:page_name) { 'Basic Test Page' }
3
- trait(:page_url) { '/basic_test_page.html' }
4
- trait(:page_locator) { 'form#HTMLFormElements' }
5
-
6
- elements element1: 'div#element1'
7
- buttons button1: 'button#button1'
8
- textfields field1: 'input#field1'
9
- links link1: 'a#link1'
10
- ranges range1: 'input#range1'
11
- images image1: 'img#image1'
12
- radios radio1: 'input#radio1'
13
- checkboxes check1: 'input#check1'
14
- filefields file1: 'input#file1'
15
- labels label1: 'label#label1'
16
- tables table1: 'table#table1'
17
- selectlists select1: 'select#select1'
18
- lists list1: 'ul#list1'
19
- videos video1: 'video#video1'
20
- audios audio1: 'audio#audio1'
21
- sections section1: TestSection
22
- end
@@ -1,21 +0,0 @@
1
- class TestSection < TestCentricity::PageSection
2
- trait(:section_locator) { 'div#section' }
3
- trait(:section_name) { 'Basic Test Section' }
4
-
5
- elements element1: 'div#element1'
6
- buttons button1: 'button#button1'
7
- textfields field1: 'input#field1'
8
- links link1: 'a#link1'
9
- ranges range1: 'input#range1'
10
- images image1: 'img#image1'
11
- radios radio1: 'input#radio1'
12
- checkboxes check1: 'input#check1'
13
- filefields file1: 'input#file1'
14
- labels label1: 'label#label1'
15
- tables table1: 'table#table1'
16
- selectlists select1: 'select#select1'
17
- lists list1: 'ul#list1'
18
- videos video1: 'video#video1'
19
- audios audio1: 'audio#audio1'
20
- sections section2: TestSection
21
- end