testcentricity_web 4.1.7 → 4.1.8
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/.simplecov +5 -1
- data/CHANGELOG.md +12 -1
- data/Gemfile.lock +1 -1
- data/README.md +3 -1
- data/Rakefile +29 -3
- data/config/cucumber.yml +11 -4
- data/config/test_data/LOCAL_data.json +15 -0
- data/config/test_data/LOCAL_data.xls +0 -0
- data/config/test_data/LOCAL_data.yml +11 -0
- data/config/test_data/data.json +13 -0
- data/config/test_data/data.yml +12 -4
- data/features/basic_form_page_css.feature +39 -0
- data/features/basic_form_page_xpath.feature +26 -0
- data/features/media_players.feature +4 -7
- data/features/step_definitions/generic_steps.rb.rb +65 -0
- data/features/support/data/form_data.rb +43 -0
- data/features/support/env.rb +3 -3
- data/features/support/hooks.rb +21 -1
- data/features/support/pages/base_test_page.rb +11 -0
- data/features/support/pages/{basic_css_test_page.rb → basic_css_form_page.rb} +3 -3
- data/features/support/pages/{basic_test_page.rb → basic_form_page.rb} +120 -24
- data/features/support/pages/{basic_xpath_test_page.rb → basic_xpath_form_page.rb} +3 -3
- data/features/support/pages/custom_controls_page.rb +2 -5
- data/features/support/pages/indexed_sections_page.rb +2 -5
- data/features/support/pages/media_test_page.rb +27 -14
- data/features/support/sections/header_nav.rb +11 -0
- data/features/support/world_data.rb +1 -1
- data/features/support/world_pages.rb +2 -2
- data/lib/testcentricity_web/appium_server.rb +5 -0
- data/lib/testcentricity_web/data_objects/data_objects_helper.rb +7 -0
- data/lib/testcentricity_web/data_objects/environment.rb +2 -0
- data/lib/testcentricity_web/data_objects/excel_helper.rb +60 -59
- data/lib/testcentricity_web/version.rb +1 -1
- data/lib/testcentricity_web/web_core/drag_drop_helper.rb +4 -0
- data/lib/testcentricity_web/web_core/page_objects_helper.rb +3 -1
- data/lib/testcentricity_web/web_core/webdriver_helper.rb +16 -0
- data/lib/testcentricity_web/web_elements/file_field.rb +9 -5
- data/lib/testcentricity_web/web_elements/image.rb +2 -1
- data/lib/testcentricity_web/web_elements/media.rb +1 -13
- data/lib/testcentricity_web/web_elements/ui_elements_helper.rb +20 -7
- data/lib/testcentricity_web/web_elements/video.rb +2 -2
- data/test_site/basic_test_page.html +1 -1
- data/test_site/media/count_and_bars.mp4 +0 -0
- data/test_site/media_page.html +2 -2
- metadata +18 -12
- data/features/basic_test_page_css.feature +0 -35
- data/features/basic_test_page_xpath.feature +0 -27
@@ -29,10 +29,12 @@ module TestCentricity
|
|
29
29
|
# set downloads folder path
|
30
30
|
@downloads_path = "#{Dir.pwd}/downloads"
|
31
31
|
if ENV['PARALLEL']
|
32
|
+
# :nocov:
|
32
33
|
Environ.parallel = true
|
33
34
|
Environ.process_num = ENV['TEST_ENV_NUMBER']
|
34
35
|
@downloads_path = "#{@downloads_path}/#{ENV['TEST_ENV_NUMBER']}"
|
35
36
|
Dir.mkdir(@downloads_path) unless Dir.exist?(@downloads_path)
|
37
|
+
# :nocov:
|
36
38
|
else
|
37
39
|
Environ.parallel = false
|
38
40
|
end
|
@@ -50,6 +52,7 @@ module TestCentricity
|
|
50
52
|
when :appium
|
51
53
|
initialize_appium
|
52
54
|
'Appium'
|
55
|
+
# :nocov:
|
53
56
|
when :browserstack
|
54
57
|
initialize_browserstack
|
55
58
|
'Browserstack cloud service'
|
@@ -62,6 +65,7 @@ module TestCentricity
|
|
62
65
|
when :testingbot
|
63
66
|
initialize_testingbot
|
64
67
|
'TestingBot cloud service'
|
68
|
+
# :nocov:
|
65
69
|
else
|
66
70
|
if ENV['SELENIUM'] == 'remote'
|
67
71
|
initialize_remote
|
@@ -91,11 +95,13 @@ module TestCentricity
|
|
91
95
|
def self.initialize_browser_size
|
92
96
|
# tile browser windows if running in multiple parallel threads and BROWSER_TILE environment variable is true
|
93
97
|
if ENV['PARALLEL'] && ENV['BROWSER_TILE']
|
98
|
+
# :nocov:
|
94
99
|
thread = ENV['TEST_ENV_NUMBER'].to_i
|
95
100
|
if thread > 1
|
96
101
|
Browsers.set_browser_window_position(100 * thread - 1, 100 * thread - 1)
|
97
102
|
sleep(1)
|
98
103
|
end
|
104
|
+
# :nocov:
|
99
105
|
else
|
100
106
|
Browsers.set_browser_window_position(10, 10)
|
101
107
|
sleep(1)
|
@@ -116,6 +122,7 @@ module TestCentricity
|
|
116
122
|
Environ.session_state = :running
|
117
123
|
end
|
118
124
|
|
125
|
+
# :nocov:
|
119
126
|
def self.close_tunnel
|
120
127
|
unless @bs_local.nil?
|
121
128
|
@bs_local.stop
|
@@ -126,6 +133,7 @@ module TestCentricity
|
|
126
133
|
end
|
127
134
|
end
|
128
135
|
end
|
136
|
+
# :nocov:
|
129
137
|
|
130
138
|
private
|
131
139
|
|
@@ -147,10 +155,12 @@ module TestCentricity
|
|
147
155
|
desired_capabilities[:avd] = ENV['APP_DEVICE'] if Environ.device_os == :android
|
148
156
|
desired_capabilities[:automationName] = ENV['AUTOMATION_ENGINE'] if ENV['AUTOMATION_ENGINE']
|
149
157
|
if ENV['UDID']
|
158
|
+
# :nocov:
|
150
159
|
Environ.device = :device
|
151
160
|
desired_capabilities[:udid] = ENV['UDID']
|
152
161
|
desired_capabilities[:xcodeOrgId] = ENV['TEAM_ID'] if ENV['TEAM_ID']
|
153
162
|
desired_capabilities[:xcodeSigningId] = ENV['TEAM_NAME'] if ENV['TEAM_NAME']
|
163
|
+
# :nocov:
|
154
164
|
else
|
155
165
|
Environ.device = :simulator
|
156
166
|
desired_capabilities[:orientation] = Environ.device_orientation.upcase if Environ.device_orientation
|
@@ -179,11 +189,13 @@ module TestCentricity
|
|
179
189
|
desired_capabilities[:chromedriverExecutable] = ENV['CHROMEDRIVER_EXECUTABLE'] if ENV['CHROMEDRIVER_EXECUTABLE']
|
180
190
|
# set wdaLocalPort (iOS) or systemPort (Android) if PARALLEL_PORT is true
|
181
191
|
if ENV['PARALLEL'] && ENV['PARALLEL_PORT']
|
192
|
+
# :nocov:
|
182
193
|
if Environ.device_os == :ios
|
183
194
|
desired_capabilities[:wdaLocalPort] = 8100 + ENV['TEST_ENV_NUMBER'].to_i
|
184
195
|
else
|
185
196
|
desired_capabilities[:systemPort] = 8200 + ENV['TEST_ENV_NUMBER'].to_i
|
186
197
|
end
|
198
|
+
# :nocov:
|
187
199
|
else
|
188
200
|
desired_capabilities[:wdaLocalPort] = ENV['WDA_LOCAL_PORT'] if ENV['WDA_LOCAL_PORT']
|
189
201
|
desired_capabilities[:systemPort] = ENV['SYSTEM_PORT'] if ENV['SYSTEM_PORT']
|
@@ -255,6 +267,7 @@ module TestCentricity
|
|
255
267
|
Capybara.default_driver = :selenium
|
256
268
|
end
|
257
269
|
|
270
|
+
# :nocov:
|
258
271
|
def self.initialize_browserstack
|
259
272
|
browser = ENV['BS_BROWSER']
|
260
273
|
Environ.grid = :browserstack
|
@@ -554,6 +567,7 @@ module TestCentricity
|
|
554
567
|
# configure file_detector for remote uploads if target is desktop web browser
|
555
568
|
config_file_uploads unless ENV['TB_PLATFORM']
|
556
569
|
end
|
570
|
+
# :nocov:
|
557
571
|
|
558
572
|
def self.chrome_edge_options(browser)
|
559
573
|
options = case browser
|
@@ -599,6 +613,7 @@ module TestCentricity
|
|
599
613
|
options
|
600
614
|
end
|
601
615
|
|
616
|
+
# :nocov:
|
602
617
|
def self.test_context_message
|
603
618
|
context_message = if ENV['TEST_CONTEXT']
|
604
619
|
"#{Environ.test_environment.to_s.upcase} - #{ENV['TEST_CONTEXT']}"
|
@@ -636,5 +651,6 @@ module TestCentricity
|
|
636
651
|
str if File.exist?(str)
|
637
652
|
end
|
638
653
|
end
|
654
|
+
# :nocov:
|
639
655
|
end
|
640
656
|
end
|
@@ -5,17 +5,19 @@ module TestCentricity
|
|
5
5
|
@type = :filefield
|
6
6
|
end
|
7
7
|
|
8
|
+
def file_upload(file_path)
|
9
|
+
obj, = find_element(visible = false)
|
10
|
+
obj.send_keys(file_path)
|
11
|
+
end
|
12
|
+
|
13
|
+
# :nocov:
|
14
|
+
|
8
15
|
def file_attach(file_path)
|
9
16
|
Capybara.ignore_hidden_elements = false
|
10
17
|
page.attach_file(@locator, file_path)
|
11
18
|
Capybara.ignore_hidden_elements = true
|
12
19
|
end
|
13
20
|
|
14
|
-
def file_upload(file_path)
|
15
|
-
obj, = find_element(visible = false)
|
16
|
-
obj.send_keys(file_path)
|
17
|
-
end
|
18
|
-
|
19
21
|
def drop_files(files)
|
20
22
|
js_script = 'fileList = Array();'
|
21
23
|
files.count.times do |i|
|
@@ -41,5 +43,7 @@ module TestCentricity
|
|
41
43
|
# trigger the fake drop event
|
42
44
|
page.execute_script(js_script)
|
43
45
|
end
|
46
|
+
|
47
|
+
# :nocov:
|
44
48
|
end
|
45
49
|
end
|
@@ -14,7 +14,8 @@ module TestCentricity
|
|
14
14
|
def loaded?
|
15
15
|
obj, = find_element
|
16
16
|
object_not_found_exception(obj, nil)
|
17
|
-
obj.native.attribute('complete')
|
17
|
+
state = obj.native.attribute('complete')
|
18
|
+
state.boolean? ? state : state == 'true'
|
18
19
|
end
|
19
20
|
|
20
21
|
alias is_loaded? loaded?
|
@@ -195,7 +195,7 @@ module TestCentricity
|
|
195
195
|
wait.until { ready_state == value }
|
196
196
|
rescue StandardError
|
197
197
|
if post_exception
|
198
|
-
raise "Ready state of
|
198
|
+
raise "Ready state of media #{object_ref_message} failed to equal '#{value}' after #{timeout} seconds" unless get_value == value
|
199
199
|
else
|
200
200
|
ready_state == value
|
201
201
|
end
|
@@ -293,18 +293,6 @@ module TestCentricity
|
|
293
293
|
page.execute_script('arguments[0].volume = arguments[1]', obj, value)
|
294
294
|
end
|
295
295
|
|
296
|
-
# Return media crossorigin property
|
297
|
-
#
|
298
|
-
# @return crossorigin value
|
299
|
-
# @example
|
300
|
-
# with_creds = media_player.crossorigin == 'use-credentials'
|
301
|
-
#
|
302
|
-
def crossorigin
|
303
|
-
obj, = find_element
|
304
|
-
object_not_found_exception(obj, @type)
|
305
|
-
obj.native.attribute('crossorigin')
|
306
|
-
end
|
307
|
-
|
308
296
|
# Return media preload property
|
309
297
|
#
|
310
298
|
# @return preload value
|
@@ -168,7 +168,7 @@ module TestCentricity
|
|
168
168
|
def scroll_to(position)
|
169
169
|
obj, type = find_element
|
170
170
|
object_not_found_exception(obj, type)
|
171
|
-
|
171
|
+
page.scroll_to(obj, align: position)
|
172
172
|
end
|
173
173
|
|
174
174
|
def set(value)
|
@@ -521,12 +521,13 @@ module TestCentricity
|
|
521
521
|
def get_value(visible = true)
|
522
522
|
obj, type = find_element(visible)
|
523
523
|
object_not_found_exception(obj, type)
|
524
|
-
case obj.tag_name.downcase
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
524
|
+
text = case obj.tag_name.downcase
|
525
|
+
when 'input', 'select', 'textarea'
|
526
|
+
obj.value
|
527
|
+
else
|
528
|
+
obj.text
|
529
|
+
end
|
530
|
+
text.gsub(/[[:space:]]+/, ' ').strip
|
530
531
|
end
|
531
532
|
|
532
533
|
alias get_caption get_value
|
@@ -998,6 +999,18 @@ module TestCentricity
|
|
998
999
|
state.boolean? ? state : state == 'true'
|
999
1000
|
end
|
1000
1001
|
|
1002
|
+
# Return crossorigin property
|
1003
|
+
#
|
1004
|
+
# @return crossorigin value
|
1005
|
+
# @example
|
1006
|
+
# with_creds = media_player.crossorigin == 'use-credentials'
|
1007
|
+
#
|
1008
|
+
def crossorigin
|
1009
|
+
obj, = find_element
|
1010
|
+
object_not_found_exception(obj, @type)
|
1011
|
+
obj.native.attribute('crossorigin')
|
1012
|
+
end
|
1013
|
+
|
1001
1014
|
def get_attribute(attrib)
|
1002
1015
|
obj, type = find_element(visible = false)
|
1003
1016
|
object_not_found_exception(obj, type)
|
@@ -14,7 +14,7 @@ module TestCentricity
|
|
14
14
|
def video_height
|
15
15
|
obj, = find_element
|
16
16
|
object_not_found_exception(obj, :video)
|
17
|
-
obj.native.attribute('videoHeight')
|
17
|
+
obj.native.attribute('videoHeight').to_i
|
18
18
|
end
|
19
19
|
|
20
20
|
# Return video Width property
|
@@ -26,7 +26,7 @@ module TestCentricity
|
|
26
26
|
def video_width
|
27
27
|
obj, = find_element
|
28
28
|
object_not_found_exception(obj, :video)
|
29
|
-
obj.native.attribute('videoWidth')
|
29
|
+
obj.native.attribute('videoWidth').to_i
|
30
30
|
end
|
31
31
|
|
32
32
|
# Return video poster property
|
Binary file
|
data/test_site/media_page.html
CHANGED
@@ -56,8 +56,8 @@
|
|
56
56
|
<tbody>
|
57
57
|
<tr>
|
58
58
|
<td>
|
59
|
-
<label id="
|
60
|
-
<video id="
|
59
|
+
<label id="video1">Video:</label>
|
60
|
+
<video id="video_player1" width="480" height="360" controls>
|
61
61
|
<source src="media/count_and_bars.mp4" type="video/mp4">
|
62
62
|
</video>
|
63
63
|
</td>
|
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: 4.1.
|
4
|
+
version: 4.1.8
|
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: 2022-03-
|
11
|
+
date: 2022-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -334,21 +334,25 @@ files:
|
|
334
334
|
- README.md
|
335
335
|
- Rakefile
|
336
336
|
- config/cucumber.yml
|
337
|
+
- config/test_data/LOCAL_data.json
|
338
|
+
- config/test_data/LOCAL_data.xls
|
339
|
+
- config/test_data/LOCAL_data.yml
|
337
340
|
- config/test_data/data.json
|
338
341
|
- config/test_data/data.xls
|
339
342
|
- config/test_data/data.yml
|
340
343
|
- docker-compose-v3.yml
|
341
|
-
- features/
|
342
|
-
- features/
|
344
|
+
- features/basic_form_page_css.feature
|
345
|
+
- features/basic_form_page_xpath.feature
|
343
346
|
- features/media_players.feature
|
344
347
|
- features/step_definitions/generic_steps.rb.rb
|
345
348
|
- features/step_definitions/media_steps.rb
|
349
|
+
- features/support/data/form_data.rb
|
346
350
|
- features/support/env.rb
|
347
351
|
- features/support/hooks.rb
|
348
352
|
- features/support/pages/base_test_page.rb
|
349
|
-
- features/support/pages/
|
350
|
-
- features/support/pages/
|
351
|
-
- features/support/pages/
|
353
|
+
- features/support/pages/basic_css_form_page.rb
|
354
|
+
- features/support/pages/basic_form_page.rb
|
355
|
+
- features/support/pages/basic_xpath_form_page.rb
|
352
356
|
- features/support/pages/custom_controls_page.rb
|
353
357
|
- features/support/pages/indexed_sections_page.rb
|
354
358
|
- features/support/pages/media_test_page.rb
|
@@ -398,6 +402,7 @@ files:
|
|
398
402
|
- test_site/media/MIB2.mp4
|
399
403
|
- test_site/media/MP4_small.mp4
|
400
404
|
- test_site/media/MPS_sample.mp3
|
405
|
+
- test_site/media/count_and_bars.mp4
|
401
406
|
- test_site/media_page.html
|
402
407
|
- testcentricity_web.gemspec
|
403
408
|
homepage: ''
|
@@ -426,17 +431,18 @@ specification_version: 4
|
|
426
431
|
summary: A Page Object and Data Object Model Framework for desktop and mobile web
|
427
432
|
testing
|
428
433
|
test_files:
|
429
|
-
- features/
|
430
|
-
- features/
|
434
|
+
- features/basic_form_page_css.feature
|
435
|
+
- features/basic_form_page_xpath.feature
|
431
436
|
- features/media_players.feature
|
432
437
|
- features/step_definitions/generic_steps.rb.rb
|
433
438
|
- features/step_definitions/media_steps.rb
|
439
|
+
- features/support/data/form_data.rb
|
434
440
|
- features/support/env.rb
|
435
441
|
- features/support/hooks.rb
|
436
442
|
- features/support/pages/base_test_page.rb
|
437
|
-
- features/support/pages/
|
438
|
-
- features/support/pages/
|
439
|
-
- features/support/pages/
|
443
|
+
- features/support/pages/basic_css_form_page.rb
|
444
|
+
- features/support/pages/basic_form_page.rb
|
445
|
+
- features/support/pages/basic_xpath_form_page.rb
|
440
446
|
- features/support/pages/custom_controls_page.rb
|
441
447
|
- features/support/pages/indexed_sections_page.rb
|
442
448
|
- features/support/pages/media_test_page.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
Feature: Basic HTML Test Page using CSS locators
|
2
|
-
In order to xxx
|
3
|
-
As a xxxx
|
4
|
-
I expect to xxxx
|
5
|
-
|
6
|
-
|
7
|
-
Background:
|
8
|
-
Given I am on the Basic CSS Test page
|
9
|
-
|
10
|
-
|
11
|
-
Scenario: xxxxx
|
12
|
-
Then I expect the Basic CSS Test page to be correctly displayed
|
13
|
-
|
14
|
-
|
15
|
-
@!mobile
|
16
|
-
Scenario: xxxxx
|
17
|
-
Then I expect the tab order to be correct
|
18
|
-
|
19
|
-
|
20
|
-
Scenario: xxxxx
|
21
|
-
When I populate the form fields
|
22
|
-
Then I expect the form fields to be correctly populated
|
23
|
-
When I cancel my changes
|
24
|
-
Then I expect the Basic CSS Test page to be correctly displayed
|
25
|
-
|
26
|
-
|
27
|
-
Scenario Outline: Verify functionality of navigation tabs
|
28
|
-
When I click the <target_page> navigation tab
|
29
|
-
Then I expect the <target_page> page to be correctly displayed
|
30
|
-
|
31
|
-
Examples:
|
32
|
-
|target_page |
|
33
|
-
|Media Test |
|
34
|
-
|Indexed Sections |
|
35
|
-
|Custom Controls |
|
@@ -1,27 +0,0 @@
|
|
1
|
-
@!grid
|
2
|
-
|
3
|
-
|
4
|
-
Feature: Basic HTML Test Page using Xpath locators
|
5
|
-
In order to xxx
|
6
|
-
As a xxxx
|
7
|
-
I expect to xxxx
|
8
|
-
|
9
|
-
|
10
|
-
Background:
|
11
|
-
Given I am on the Basic Xpath Test page
|
12
|
-
|
13
|
-
|
14
|
-
Scenario: xxxxx
|
15
|
-
Then I expect the Basic Xpath Test page to be correctly displayed
|
16
|
-
|
17
|
-
|
18
|
-
@!mobile
|
19
|
-
Scenario: xxxxx
|
20
|
-
Then I expect the tab order to be correct
|
21
|
-
|
22
|
-
|
23
|
-
Scenario: xxxxx
|
24
|
-
When I populate the form fields
|
25
|
-
Then I expect the form fields to be correctly populated
|
26
|
-
When I cancel my changes
|
27
|
-
Then I expect the Basic Xpath Test page to be correctly displayed
|