testcentricity_web 4.1.6 → 4.1.7
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/CHANGELOG.md +19 -0
- data/Gemfile.lock +2 -2
- data/Rakefile +32 -9
- data/config/cucumber.yml +20 -7
- data/config/test_data/data.json +12 -0
- data/config/test_data/data.xls +0 -0
- data/config/test_data/data.yml +12 -0
- data/features/basic_test_page_css.feature +11 -0
- data/features/basic_test_page_xpath.feature +3 -0
- data/features/media_players.feature +87 -0
- data/features/step_definitions/generic_steps.rb.rb +7 -0
- data/features/step_definitions/media_steps.rb +30 -0
- data/features/support/env.rb +14 -7
- data/features/support/pages/base_test_page.rb +11 -0
- data/features/support/pages/basic_css_test_page.rb +8 -5
- data/features/support/pages/basic_test_page.rb +67 -8
- data/features/support/pages/basic_xpath_test_page.rb +8 -4
- data/features/support/pages/custom_controls_page.rb +16 -0
- data/features/support/pages/indexed_sections_page.rb +16 -0
- data/features/support/pages/media_test_page.rb +195 -0
- data/features/support/sections/header_nav.rb +28 -0
- data/features/support/world_data.rb +12 -0
- data/features/support/world_pages.rb +3 -0
- data/lib/testcentricity_web/data_objects/environment.rb +12 -0
- data/lib/testcentricity_web/version.rb +1 -1
- data/lib/testcentricity_web/web_core/page_object.rb +1 -8
- data/lib/testcentricity_web/web_elements/checkbox.rb +3 -4
- data/lib/testcentricity_web/web_elements/media.rb +50 -4
- data/lib/testcentricity_web/web_elements/radio.rb +5 -1
- data/test_site/basic_test_page.html +51 -1
- data/test_site/custom_controls_page.html +58 -0
- data/test_site/indexed_sections_page.html +58 -0
- data/test_site/media/MIB2-subtitles-pt-BR.vtt +49 -0
- data/test_site/media/MIB2.mp4 +0 -0
- data/test_site/media_page.html +60 -7
- metadata +25 -4
- data/features/support/pages/media_page.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58ddfdbcb8747347fcb06efdd2a888509fa904bd5541a0f3d4d303af6469552c
|
4
|
+
data.tar.gz: 14f9af8661d7e571d10f79e3d093cafa4e744388d5c1d6f9232e207fe5e82d6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 768e113468d0dfc68f01467bc4304f41903bff09f59db9f2c8dd013545c061523c7e0947669d1befadcf43b1187e57df3cb188d803b3d802d905c0c3467ce852
|
7
|
+
data.tar.gz: 3133dc1f23ff3a839c45e2c6424d152f6c85916497c00dd9a815113f2acb8225f45efab91ce9d7cb4ada454d33115649ad61f4073f109a7dec44e40891971043
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,25 @@
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
4
|
|
5
|
+
## [4.1.7] - 28-MAR-2022
|
6
|
+
|
7
|
+
### Fixed
|
8
|
+
* `CheckBox.set_checkbox_state` and `Radio.set_selected_state` work on iOS simulators again.
|
9
|
+
|
10
|
+
### Changes
|
11
|
+
* `Audio.playback_rate` and `Video.playback_rate` now return value as a `Float` instead of a `String`.
|
12
|
+
* `Audio.default_playback_rate` and `Video.default_playback_rate` now return value as a `Float` instead of a `String`.
|
13
|
+
* `Audio.current_time` and `Video.current_time` now return value as a `Float` rounded to two decimal places.
|
14
|
+
* `Audio.duration` and `Video.duration` now return value as a `Float` rounded to two decimal places.
|
15
|
+
|
16
|
+
### Added
|
17
|
+
* `Audio.mute` and `Video.mute` methods added.
|
18
|
+
* `Audio.unmute` and `Video.unmute` methods added.
|
19
|
+
* `Audio.playback_rate` and `Video.playback_rate` now accept a `Float` value as an input for setting the playback rate
|
20
|
+
of media.
|
21
|
+
* `Audio.volume` and `Video.volume` now accept a `Float` value between 0 and 1 as an input for setting the volume of media.
|
22
|
+
|
23
|
+
|
5
24
|
## [4.1.6] - 21-MAR-2022
|
6
25
|
|
7
26
|
### Fixed
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
testcentricity_web (4.1.
|
4
|
+
testcentricity_web (4.1.7)
|
5
5
|
appium_lib
|
6
6
|
browserstack-local
|
7
7
|
capybara (>= 3.1, < 4)
|
@@ -50,7 +50,7 @@ GEM
|
|
50
50
|
chronic (0.10.2)
|
51
51
|
coercible (1.0.0)
|
52
52
|
descendants_tracker (~> 0.0.1)
|
53
|
-
concurrent-ruby (1.1.
|
53
|
+
concurrent-ruby (1.1.10)
|
54
54
|
cucumber (7.1.0)
|
55
55
|
builder (~> 3.2, >= 3.2.4)
|
56
56
|
cucumber-core (~> 10.1, >= 10.1.0)
|
data/Rakefile
CHANGED
@@ -5,12 +5,12 @@ require 'rake'
|
|
5
5
|
|
6
6
|
|
7
7
|
namespace :features do
|
8
|
-
Cucumber::Rake::Task.new(:
|
9
|
-
t.profile = '
|
8
|
+
Cucumber::Rake::Task.new(:edge_local) do |t|
|
9
|
+
t.profile = 'edge_local'
|
10
10
|
end
|
11
11
|
|
12
|
-
Cucumber::Rake::Task.new(:
|
13
|
-
t.profile = '
|
12
|
+
Cucumber::Rake::Task.new(:chrome_local) do |t|
|
13
|
+
t.profile = 'chrome_local'
|
14
14
|
end
|
15
15
|
|
16
16
|
Cucumber::Rake::Task.new(:edge_headless) do |t|
|
@@ -21,17 +21,40 @@ namespace :features do
|
|
21
21
|
t.profile = 'chrome_headless'
|
22
22
|
end
|
23
23
|
|
24
|
-
Cucumber::Rake::Task.new(:
|
25
|
-
t.profile = '
|
24
|
+
Cucumber::Rake::Task.new(:safari_local) do |t|
|
25
|
+
t.profile = 'safari_local'
|
26
26
|
end
|
27
27
|
|
28
|
-
Cucumber::Rake::Task.new(:
|
29
|
-
t.profile = '
|
28
|
+
Cucumber::Rake::Task.new(:firefox_local) do |t|
|
29
|
+
t.profile = 'firefox_local'
|
30
30
|
end
|
31
31
|
|
32
32
|
Cucumber::Rake::Task.new(:firefox_headless) do |t|
|
33
33
|
t.profile = 'firefox_headless'
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
Cucumber::Rake::Task.new(:edge_grid) do |t|
|
37
|
+
t.profile = 'edge_grid'
|
38
|
+
end
|
39
|
+
|
40
|
+
Cucumber::Rake::Task.new(:chrome_grid) do |t|
|
41
|
+
t.profile = 'chrome_grid'
|
42
|
+
end
|
43
|
+
|
44
|
+
Cucumber::Rake::Task.new(:firefox_grid) do |t|
|
45
|
+
t.profile = 'firefox_grid'
|
46
|
+
end
|
47
|
+
|
48
|
+
Cucumber::Rake::Task.new(:ios_remote) do |t|
|
49
|
+
t.profile = 'ios_remote'
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
task :required => [:edge_local, :edge_headless, :chrome_local, :chrome_headless, :safari_local]
|
54
|
+
|
55
|
+
task :grid => [:edge_grid, :chrome_grid]
|
56
|
+
|
57
|
+
task :mobile => [:ios_remote]
|
58
|
+
|
59
|
+
task :all => [:edge_local, :edge_headless, :chrome_local, :chrome_headless, :safari_local, :edge_grid, :chrome_grid, :ios_remote]
|
37
60
|
end
|
data/config/cucumber.yml
CHANGED
@@ -25,20 +25,29 @@ parallel: PARALLEL=true REPORTING=true --require features --format pretty --form
|
|
25
25
|
# profiles for locally hosted desktop web browsers
|
26
26
|
#==============
|
27
27
|
|
28
|
-
|
28
|
+
local: TEST_ENVIRONMENT=LOCAL
|
29
|
+
chrome: WEB_BROWSER=chrome DATA_SOURCE=yaml <%= desktop %>
|
30
|
+
edge: WEB_BROWSER=edge DATA_SOURCE=json <%= desktop %>
|
31
|
+
safari: WEB_BROWSER=safari DATA_SOURCE=Excel <%= desktop %>
|
29
32
|
firefox: WEB_BROWSER=firefox <%= desktop %>
|
30
|
-
edge: WEB_BROWSER=edge <%= desktop %>
|
31
|
-
safari: WEB_BROWSER=safari <%= desktop %>
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
chrome_local: --profile local --profile chrome
|
35
|
+
edge_local: --profile local --profile edge
|
36
|
+
safari_local: --profile local --profile safari
|
37
|
+
firefox_local: --profile local --profile firefox
|
38
|
+
|
39
|
+
firefox_headless: --profile local WEB_BROWSER=firefox_headless <%= desktop %>
|
40
|
+
chrome_headless: --profile local WEB_BROWSER=chrome_headless <%= desktop %>
|
41
|
+
edge_headless: --profile local WEB_BROWSER=edge_headless <%= desktop %>
|
36
42
|
|
37
43
|
|
38
44
|
#==============
|
39
45
|
# profile for Selenium Grid and Dockerized Selenium Grid hosted desktop web browsers
|
40
46
|
#==============
|
41
|
-
grid:
|
47
|
+
grid: SELENIUM=remote TEST_ENVIRONMENT=REMOTE REMOTE_ENDPOINT="http://localhost:4444/wd/hub"
|
48
|
+
chrome_grid: --profile grid --profile chrome
|
49
|
+
edge_grid: --profile grid --profile edge
|
50
|
+
firefox_grid: --profile grid --profile firefox
|
42
51
|
|
43
52
|
|
44
53
|
#==============
|
@@ -66,6 +75,8 @@ app_ios_15: --profile appium_ios APP_VERSION="15.4"
|
|
66
75
|
ipad_pro_12_15_sim: --profile app_ios_15 DEVICE_TYPE=tablet APP_DEVICE="iPad Pro (12.9-inch) (5th generation)"
|
67
76
|
ipad_air_15_sim: --profile app_ios_15 DEVICE_TYPE=tablet APP_DEVICE="iPad Air (5th generation)" <%= desktop %>
|
68
77
|
|
78
|
+
ios_remote: --profile ipad_pro_12_15_sim --profile run_appium ORIENTATION=portrait TEST_ENVIRONMENT=REMOTE
|
79
|
+
|
69
80
|
|
70
81
|
#==============
|
71
82
|
# profiles for Android mobile web browsers hosted within Android Studio Android Virtual Device emulators
|
@@ -76,6 +87,8 @@ appium_android: WEB_BROWSER=appium APP_PLATFORM_NAME="Android" <%= desktop %>
|
|
76
87
|
app_android_12: --profile appium_android APP_BROWSER="Chrome" APP_VERSION="12.0"
|
77
88
|
pixel_c_api31_sim: --profile app_android_12 DEVICE_TYPE=tablet APP_DEVICE="Pixel_C_API_31"
|
78
89
|
|
90
|
+
android_remote: --profile pixel_c_api31_sim --profile run_appium ORIENTATION=portrait TEST_ENVIRONMENT=REMOTE
|
91
|
+
|
79
92
|
|
80
93
|
#==============
|
81
94
|
# profiles for remotely hosted web browsers on the BrowserStack service
|
Binary file
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# -------------------------------------------------------------
|
2
|
+
# This is the generic test data required to run the UAL Flight Booking test suites against the QA and PROD test environments.
|
3
|
+
# -------------------------------------------------------------
|
4
|
+
|
5
|
+
# This section is populated with Environment data required to execute automated test suites on all supported environments
|
6
|
+
Environments:
|
7
|
+
LOCAL:
|
8
|
+
PROTOCOL: "file"
|
9
|
+
BASE_URL: "/../../test_site"
|
10
|
+
REMOTE:
|
11
|
+
PROTOCOL: "http"
|
12
|
+
BASE_URL: "192.168.1.129/test_site"
|
@@ -22,3 +22,14 @@ Feature: Basic HTML Test Page using CSS locators
|
|
22
22
|
Then I expect the form fields to be correctly populated
|
23
23
|
When I cancel my changes
|
24
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 |
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
Feature: Basic HTML Test Page using CSS 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 Media Test page
|
12
|
+
|
13
|
+
|
14
|
+
Scenario: Verify video player play and pause controls
|
15
|
+
When I play the video media
|
16
|
+
Then the video should be playing
|
17
|
+
When I pause the video media
|
18
|
+
Then the video should be paused
|
19
|
+
|
20
|
+
|
21
|
+
Scenario: Verify audio player play and pause controls
|
22
|
+
When I play the audio media
|
23
|
+
Then the audio should be playing
|
24
|
+
When I pause the audio media
|
25
|
+
Then the audio should be paused
|
26
|
+
|
27
|
+
|
28
|
+
Scenario: Verify video player mute control
|
29
|
+
When I mute the video media
|
30
|
+
Then the video should be muted
|
31
|
+
When I unmute the video media
|
32
|
+
Then the video should be unmuted
|
33
|
+
|
34
|
+
|
35
|
+
Scenario: Verify audio player mute control
|
36
|
+
When I mute the audio media
|
37
|
+
Then the audio should be muted
|
38
|
+
When I unmute the audio media
|
39
|
+
Then the audio should be unmuted
|
40
|
+
|
41
|
+
|
42
|
+
Scenario: Verify video player volume control
|
43
|
+
When I set the volume of the video to .5
|
44
|
+
Then the video should have a volume of .5
|
45
|
+
|
46
|
+
|
47
|
+
Scenario: Verify audio player volume control
|
48
|
+
When I set the volume of the audio to .5
|
49
|
+
Then the audio should have a volume of .5
|
50
|
+
|
51
|
+
|
52
|
+
Scenario: Verify video playback speed settings
|
53
|
+
When I play the video with a playback speed of 2x
|
54
|
+
Then the video should play at 2x speed
|
55
|
+
When I play the video with a playback speed of 0.25x
|
56
|
+
Then the video should play at 0.25x speed
|
57
|
+
When I play the video with a playback speed of 1.75x
|
58
|
+
Then the video should play at 1.75x speed
|
59
|
+
When I play the video with a playback speed of 0.5x
|
60
|
+
Then the video should play at 0.5x speed
|
61
|
+
When I play the video with a playback speed of 1.5x
|
62
|
+
Then the video should play at 1.5x speed
|
63
|
+
When I play the video with a playback speed of 0.75x
|
64
|
+
Then the video should play at 0.75x speed
|
65
|
+
When I play the video with a playback speed of 1.25x
|
66
|
+
Then the video should play at 1.25x speed
|
67
|
+
When I play the video with a playback speed of 1x
|
68
|
+
Then the video should play at 1x speed
|
69
|
+
|
70
|
+
|
71
|
+
Scenario: Verify audio playback speed settings
|
72
|
+
When I play the audio with a playback speed of 2x
|
73
|
+
Then the audio should play at 2x speed
|
74
|
+
When I play the audio with a playback speed of 0.25x
|
75
|
+
Then the audio should play at 0.25x speed
|
76
|
+
When I play the audio with a playback speed of 1.75x
|
77
|
+
Then the audio should play at 1.75x speed
|
78
|
+
When I play the audio with a playback speed of 0.5x
|
79
|
+
Then the audio should play at 0.5x speed
|
80
|
+
When I play the audio with a playback speed of 1.5x
|
81
|
+
Then the audio should play at 1.5x speed
|
82
|
+
When I play the audio with a playback speed of 0.75x
|
83
|
+
Then the audio should play at 0.75x speed
|
84
|
+
When I play the audio with a playback speed of 1.25x
|
85
|
+
Then the audio should play at 1.25x speed
|
86
|
+
When I play the audio with a playback speed of 1x
|
87
|
+
Then the audio should play at 1x speed
|
@@ -35,3 +35,10 @@ end
|
|
35
35
|
Then(/^I expect the tab order to be correct$/) do
|
36
36
|
PageManager.current_page.verify_tab_order
|
37
37
|
end
|
38
|
+
|
39
|
+
|
40
|
+
When(/^I click the (.*) navigation (?:tab|link)$/) do |page_name|
|
41
|
+
# find and navigate to the specified target page
|
42
|
+
target_page = PageManager.find_page(page_name)
|
43
|
+
target_page.navigate_to
|
44
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
When(/^I (.*) the (.*) media$/) do |action, media_type|
|
4
|
+
media_test_page.perform_action(media_type, action)
|
5
|
+
end
|
6
|
+
|
7
|
+
|
8
|
+
Then(/^the (.*) should be (.*)$/) do |media_type, state|
|
9
|
+
media_test_page.verify_media_state(media_type, state)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
When(/^I play the (.*) with a playback speed of (.*)x$/) do |media_type, rate|
|
14
|
+
media_test_page.set_playback_rate(media_type, rate)
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
Then(/^the (.*) should play at (.*)x speed$/) do |media_type, rate|
|
19
|
+
media_test_page.verify_playback_rate(media_type, rate)
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
When(/^I set the volume of the (.*) to (.*)$/) do |media_type, volume|
|
24
|
+
media_test_page.set_volume(media_type, volume)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
Then(/^the (.*) should have a volume of (.*)$/) do |media_type, volume|
|
29
|
+
media_test_page.verify_volume(media_type, volume)
|
30
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -5,13 +5,15 @@ require 'require_all'
|
|
5
5
|
require 'simplecov'
|
6
6
|
require 'testcentricity_web'
|
7
7
|
|
8
|
-
|
8
|
+
include TestCentricity
|
9
|
+
|
10
|
+
SimpleCov.command_name("features-#{ENV['WEB_BROWSER']}-#{ENV['SELENIUM']}" + (ENV['TEST_ENV_NUMBER'] || ''))
|
9
11
|
|
10
12
|
# require_relative 'world_data'
|
11
13
|
require_relative 'world_pages'
|
12
14
|
|
13
15
|
# require_rel 'data'
|
14
|
-
|
16
|
+
require_rel 'sections'
|
15
17
|
require_rel 'pages'
|
16
18
|
|
17
19
|
$LOAD_PATH << './lib'
|
@@ -27,8 +29,9 @@ I18n.locale = ENV['LOCALE']
|
|
27
29
|
Faker::Config.locale = ENV['LOCALE']
|
28
30
|
|
29
31
|
# instantiate all data objects and target test environment
|
30
|
-
|
31
|
-
|
32
|
+
include WorldData
|
33
|
+
ENV['DATA_SOURCE'] = 'yaml' unless ENV['DATA_SOURCE']
|
34
|
+
environs.find_environ(ENV['TEST_ENVIRONMENT'], ENV['DATA_SOURCE'].downcase.to_sym)
|
32
35
|
# WorldData.instantiate_data_objects
|
33
36
|
|
34
37
|
# instantiate all page objects
|
@@ -38,6 +41,10 @@ WorldPages.instantiate_page_objects
|
|
38
41
|
# establish connection to WebDriver and target web browser
|
39
42
|
Webdrivers.cache_time = 86_400
|
40
43
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
+
|
45
|
+
url = if ENV['TEST_ENVIRONMENT'].downcase == 'local'
|
46
|
+
"file://#{File.dirname(__FILE__)}/../../test_site"
|
47
|
+
else
|
48
|
+
Environ.current.app_host
|
49
|
+
end
|
50
|
+
WebDriverConnect.initialize_web_driver(app_host: url)
|
@@ -12,8 +12,8 @@ class BasicCSSTestPage < BasicTestPage
|
|
12
12
|
number_field: 'input#number-field',
|
13
13
|
color_picker: 'input#color-picker',
|
14
14
|
comments_field: 'textarea#comments'
|
15
|
-
|
16
|
-
|
15
|
+
ranges slider: 'input#slider'
|
16
|
+
filefields upload_file: 'input#filename'
|
17
17
|
checkboxes check_1: 'input#check1',
|
18
18
|
check_2: 'input#check2',
|
19
19
|
check_3: 'input#check3',
|
@@ -24,14 +24,16 @@ class BasicCSSTestPage < BasicTestPage
|
|
24
24
|
radio_4: 'input#radio4'
|
25
25
|
selectlists multi_select: 'select#multipleselect',
|
26
26
|
drop_down_select: 'select#dropdown'
|
27
|
-
|
27
|
+
links link_1: 'a#link1',
|
28
|
+
link_2: 'a#link2',
|
29
|
+
link_3: 'a#link3'
|
30
|
+
tables static_table: 'table#table'
|
28
31
|
images image_1: 'img#image1',
|
29
32
|
image_2: 'img#image2',
|
30
33
|
image_3: 'img#image3'
|
31
34
|
buttons cancel_button: 'input#cancel',
|
32
35
|
submit_button: 'input#submit'
|
33
|
-
labels
|
34
|
-
username_label: "label[for='username']",
|
36
|
+
labels username_label: "label[for='username']",
|
35
37
|
password_label: "label[for='password']",
|
36
38
|
max_length_label: "label[for='maxlength']",
|
37
39
|
read_only_label: "label[for='readonly']",
|
@@ -44,6 +46,7 @@ class BasicCSSTestPage < BasicTestPage
|
|
44
46
|
radios_label: 'label#radios',
|
45
47
|
multiselect_label: "label[for='multipleselect']",
|
46
48
|
dropdown_label: "label[for='dropdown']",
|
49
|
+
link_label: 'label#links',
|
47
50
|
table_label: "label[for='table']",
|
48
51
|
images_label: 'label#images'
|
49
52
|
end
|
@@ -1,8 +1,40 @@
|
|
1
1
|
# Page Object class definition for Basic HTML Test page
|
2
2
|
|
3
|
-
class BasicTestPage <
|
3
|
+
class BasicTestPage < BaseTestPage
|
4
4
|
trait(:page_url) { '/basic_test_page.html' }
|
5
|
+
trait(:navigator) { header_nav.open_form_page }
|
5
6
|
trait(:tab_order) {
|
7
|
+
[
|
8
|
+
header_nav.form_link,
|
9
|
+
header_nav.media_link,
|
10
|
+
header_nav.indexed_sections_link,
|
11
|
+
header_nav.custom_controls_link,
|
12
|
+
username_field,
|
13
|
+
password_field,
|
14
|
+
max_length_field,
|
15
|
+
read_only_field,
|
16
|
+
number_field,
|
17
|
+
color_picker,
|
18
|
+
slider,
|
19
|
+
comments_field,
|
20
|
+
upload_file,
|
21
|
+
check_1,
|
22
|
+
check_2,
|
23
|
+
check_3,
|
24
|
+
radio_1,
|
25
|
+
[
|
26
|
+
radio_2,
|
27
|
+
radio_3
|
28
|
+
],
|
29
|
+
multi_select,
|
30
|
+
drop_down_select,
|
31
|
+
link_1,
|
32
|
+
link_2,
|
33
|
+
cancel_button,
|
34
|
+
submit_button
|
35
|
+
]
|
36
|
+
}
|
37
|
+
trait(:firefox_order) {
|
6
38
|
[
|
7
39
|
username_field,
|
8
40
|
password_field,
|
@@ -112,6 +144,22 @@ class BasicTestPage < TestCentricity::PageObject
|
|
112
144
|
options: ['Drop Down Item 1', 'Drop Down Item 2', 'Drop Down Item 3', 'Drop Down Item 4', 'Drop Down Item 5', 'Drop Down Item 6'],
|
113
145
|
selected: 'Drop Down Item 1'
|
114
146
|
},
|
147
|
+
link_label => { visible: true, caption: 'Links:' },
|
148
|
+
link_1 => {
|
149
|
+
visible: true,
|
150
|
+
href: { ends_with: 'media_page.html' },
|
151
|
+
caption: 'Open Media Page in same window/tab'
|
152
|
+
},
|
153
|
+
link_2 => {
|
154
|
+
visible: true,
|
155
|
+
href: { ends_with: 'media_page.html' },
|
156
|
+
caption: 'Open Media Page in a new window/tab'
|
157
|
+
},
|
158
|
+
link_3 => {
|
159
|
+
visible: true,
|
160
|
+
aria_disabled: true,
|
161
|
+
caption: 'Disabled Link'
|
162
|
+
},
|
115
163
|
table_label => { visible: true, caption: 'Table:' },
|
116
164
|
static_table => {
|
117
165
|
visible: true,
|
@@ -149,22 +197,30 @@ class BasicTestPage < TestCentricity::PageObject
|
|
149
197
|
end
|
150
198
|
|
151
199
|
def form_data
|
152
|
-
|
200
|
+
if Environ.platform == :mobile
|
201
|
+
file_path = nil
|
202
|
+
file_name = ''
|
203
|
+
color_value = '#000000'
|
204
|
+
else
|
205
|
+
file_path = "#{Dir.pwd}/test_site/images/Wilder.jpg"
|
206
|
+
file_name = 'Wilder.jpg'
|
207
|
+
color_value = Faker::Color.hex_color
|
208
|
+
end
|
153
209
|
{
|
154
210
|
username: Faker::Name.name,
|
155
211
|
password: 'T0p_Sekrit',
|
156
212
|
maxlength: Faker::Marketing.buzzwords,
|
157
213
|
number: Faker::Number.between(from: 10, to: 1024),
|
158
|
-
color:
|
159
|
-
slider:
|
214
|
+
color: color_value,
|
215
|
+
slider: 50,
|
160
216
|
comments: Faker::Hipster.paragraph,
|
161
217
|
filepath: file_path,
|
162
|
-
filename:
|
218
|
+
filename: file_name,
|
163
219
|
check1: true,
|
164
220
|
check2: true,
|
165
221
|
check3: false,
|
166
|
-
radio1:
|
167
|
-
radio2:
|
222
|
+
radio1: false,
|
223
|
+
radio2: true,
|
168
224
|
radio3: false,
|
169
225
|
multi_select: 'Selection Item 2',
|
170
226
|
drop_select: 'Drop Down Item 5'
|
@@ -228,8 +284,11 @@ class BasicTestPage < TestCentricity::PageObject
|
|
228
284
|
end
|
229
285
|
|
230
286
|
def verify_tab_order
|
231
|
-
order =
|
287
|
+
order = case Environ.browser
|
288
|
+
when :safari
|
232
289
|
safari_tab_order
|
290
|
+
when :firefox
|
291
|
+
firefox_order
|
233
292
|
else
|
234
293
|
tab_order
|
235
294
|
end
|
@@ -12,8 +12,8 @@ class BasicXpathTestPage < BasicTestPage
|
|
12
12
|
number_field: "//input[@id='number-field']",
|
13
13
|
comments_field: "//textarea[@id='comments']",
|
14
14
|
color_picker: "//input[@id='color-picker']"
|
15
|
-
|
16
|
-
|
15
|
+
ranges slider: "//input[@id='slider']"
|
16
|
+
filefields upload_file: "//input[@id='filename']"
|
17
17
|
checkboxes check_1: "//input[@id='check1']",
|
18
18
|
check_2: "//input[@id='check2']",
|
19
19
|
check_3: "//input[@id='check3']",
|
@@ -24,13 +24,16 @@ class BasicXpathTestPage < BasicTestPage
|
|
24
24
|
radio_4: "//input[@id='radio4']"
|
25
25
|
selectlists multi_select: "//select[@id='multipleselect']",
|
26
26
|
drop_down_select: "//select[@id='dropdown']"
|
27
|
-
|
27
|
+
links link_1: "//a[@id='link1']",
|
28
|
+
link_2: "//a[@id='link2']",
|
29
|
+
link_3: "//a[@id='link3']"
|
30
|
+
tables static_table: "//table[@id='table']"
|
28
31
|
images image_1: "//img[@id='image1']",
|
29
32
|
image_2: "//img[@id='image2']",
|
30
33
|
image_3: "//img[@id='image3']"
|
31
34
|
buttons cancel_button: "//input[@id='cancel']",
|
32
35
|
submit_button: "//input[@id='submit']"
|
33
|
-
labels header_label: '//
|
36
|
+
labels header_label: '//h2',
|
34
37
|
username_label: "//label[@for='username']",
|
35
38
|
password_label: "//label[@for='password']",
|
36
39
|
max_length_label: "//label[@for='maxlength']",
|
@@ -44,6 +47,7 @@ class BasicXpathTestPage < BasicTestPage
|
|
44
47
|
radios_label: "//label[@id='radios']",
|
45
48
|
multiselect_label: "//label[@for='multipleselect']",
|
46
49
|
dropdown_label: "//label[@for='dropdown']",
|
50
|
+
link_label: "//label[@id='links']",
|
47
51
|
table_label: "//label[@for='table']",
|
48
52
|
images_label: "//label[@id='images']"
|
49
53
|
end
|
@@ -0,0 +1,16 @@
|
|
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
|
+
|
9
|
+
def verify_page_ui
|
10
|
+
ui = {
|
11
|
+
self => { exists: true, secure: false, title: 'Custom Controls Page' },
|
12
|
+
header_label => { visible: true, caption: 'Custom Controls Page' }
|
13
|
+
}
|
14
|
+
verify_ui_states(ui)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
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
|
+
|
9
|
+
def verify_page_ui
|
10
|
+
ui = {
|
11
|
+
self => { exists: true, secure: false, title: 'Indexed Sections Page' },
|
12
|
+
header_label => { visible: true, caption: 'Indexed Sections Page' }
|
13
|
+
}
|
14
|
+
verify_ui_states(ui)
|
15
|
+
end
|
16
|
+
end
|