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
         
     |