testcentricity_web 4.1.6 → 4.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +2 -1
- data/.ruby-version +1 -0
- data/.simplecov +5 -1
- data/CHANGELOG.md +43 -0
- data/README.md +14 -13
- data/Rakefile +99 -21
- data/config/cucumber.yml +32 -11
- data/config/locales/en-US.yml +56 -0
- data/config/test_data/LOCAL_data.json +15 -0
- data/config/test_data/LOCAL_data.xls +0 -0
- data/config/test_data/LOCAL_data.yml +11 -0
- data/config/test_data/data.json +25 -0
- data/config/test_data/data.xls +0 -0
- data/config/test_data/data.yml +20 -0
- data/{docker-compose-v3.yml → docker-compose.yml} +2 -2
- data/features/basic_form_page_css.feature +54 -0
- data/features/basic_form_page_xpath.feature +26 -0
- data/features/custom_controls.feature +29 -0
- data/features/media_players.feature +67 -0
- data/features/step_definitions/generic_steps.rb.rb +87 -0
- data/features/step_definitions/media_steps.rb +30 -0
- data/features/support/data/form_data.rb +43 -0
- data/features/support/env.rb +18 -10
- data/features/support/hooks.rb +26 -1
- data/features/support/pages/base_test_page.rb +22 -0
- data/features/support/pages/{basic_css_test_page.rb → basic_css_form_page.rb} +12 -8
- data/features/support/pages/{basic_test_page.rb → basic_form_page.rb} +227 -36
- data/features/support/pages/{basic_xpath_test_page.rb → basic_xpath_form_page.rb} +12 -7
- data/features/support/pages/custom_controls_page.rb +263 -0
- data/features/support/pages/indexed_sections_page.rb +57 -0
- data/features/support/pages/media_test_page.rb +207 -0
- data/features/support/sections/header_nav.rb +48 -0
- data/features/support/sections/product_card.rb +39 -0
- data/features/support/world_data.rb +12 -0
- data/features/support/world_pages.rb +5 -2
- data/lib/testcentricity_web/appium_server.rb +5 -0
- data/lib/testcentricity_web/browser_helper.rb +0 -6
- data/lib/testcentricity_web/data_objects/data_objects_helper.rb +7 -0
- data/lib/testcentricity_web/data_objects/environment.rb +14 -0
- data/lib/testcentricity_web/data_objects/excel_helper.rb +60 -59
- data/lib/testcentricity_web/version.rb +1 -1
- data/lib/testcentricity_web/web_core/drag_drop_helper.rb +4 -0
- data/lib/testcentricity_web/web_core/page_object.rb +1 -8
- data/lib/testcentricity_web/web_core/page_objects_helper.rb +4 -2
- data/lib/testcentricity_web/web_core/page_section.rb +1 -1
- data/lib/testcentricity_web/web_core/webdriver_helper.rb +60 -44
- data/lib/testcentricity_web/web_elements/checkbox.rb +49 -19
- data/lib/testcentricity_web/web_elements/file_field.rb +9 -5
- data/lib/testcentricity_web/web_elements/image.rb +2 -1
- data/lib/testcentricity_web/web_elements/media.rb +46 -12
- data/lib/testcentricity_web/web_elements/radio.rb +51 -16
- data/lib/testcentricity_web/web_elements/select_list.rb +12 -12
- data/lib/testcentricity_web/web_elements/ui_elements_helper.rb +22 -9
- data/lib/testcentricity_web/web_elements/video.rb +2 -2
- data/spec/fixtures/page_object.rb +22 -0
- data/spec/fixtures/section_object.rb +21 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/testcentricity_web/browser_spec.rb +41 -0
- data/spec/testcentricity_web/elements/audio_spec.rb +68 -0
- data/spec/testcentricity_web/elements/button_spec.rb +18 -0
- data/spec/testcentricity_web/elements/checkbox_spec.rb +33 -0
- data/spec/testcentricity_web/elements/file_field_spec.rb +13 -0
- data/spec/testcentricity_web/elements/image_spec.rb +33 -0
- data/spec/testcentricity_web/elements/label_spec.rb +18 -0
- data/spec/testcentricity_web/elements/link_spec.rb +23 -0
- data/spec/testcentricity_web/elements/list_spec.rb +13 -0
- data/spec/testcentricity_web/elements/radio_spec.rb +28 -0
- data/spec/testcentricity_web/elements/ui_element_spec.rb +125 -0
- data/spec/testcentricity_web/elements/video_spec.rb +68 -0
- data/spec/testcentricity_web/helper_specs/object_helpers_spec.rb +39 -0
- data/spec/testcentricity_web/helper_specs/string_helpers_spec.rb +49 -0
- data/spec/testcentricity_web/page_object_spec.rb +90 -0
- data/spec/testcentricity_web/section_object_spec.rb +72 -0
- data/spec/testcentricity_web/version_spec.rb +7 -0
- data/spec/testcentricity_web/webdriver_connect/grid_webdriver_spec.rb +72 -0
- data/spec/testcentricity_web/webdriver_connect/local_webdriver_spec.rb +86 -0
- data/spec/testcentricity_web/webdriver_connect/mobile_webdriver_spec.rb +65 -0
- data/test_site/basic_test_page.html +51 -1
- data/test_site/chosen-sprite.png +0 -0
- data/test_site/chosen-sprite@2x.png +0 -0
- data/test_site/chosen.css +496 -0
- data/test_site/chosen.jquery.js +1359 -0
- data/test_site/chosen.jquery.min.js +3 -0
- data/test_site/chosen.min.css +11 -0
- data/test_site/chosen.proto.js +1399 -0
- data/test_site/chosen.proto.min.js +3 -0
- data/test_site/composer.json +36 -0
- data/test_site/custom_controls_page.html +629 -0
- data/test_site/docsupport/chosen.png +0 -0
- data/test_site/docsupport/init.js +11 -0
- data/test_site/docsupport/init.proto.js +16 -0
- data/test_site/docsupport/jquery-1.12.4.min.js +5 -0
- data/test_site/docsupport/jquery-3.2.1.min.js +4 -0
- data/test_site/docsupport/oss-credit.png +0 -0
- data/test_site/docsupport/prism.css +108 -0
- data/test_site/docsupport/prism.js +9 -0
- data/test_site/docsupport/prototype-1.7.0.0.js +6082 -0
- data/test_site/docsupport/style.css +219 -0
- data/test_site/images/Blouse_Black.jpg +0 -0
- data/test_site/images/Printed_Dress.jpg +0 -0
- data/test_site/images/T-shirt.jpg +0 -0
- data/test_site/images/jeans3.jpg +0 -0
- data/test_site/indexed_sections_page.html +215 -0
- data/test_site/media/MIB2-subtitles-pt-BR.vtt +49 -0
- data/test_site/media/MIB2.mp4 +0 -0
- data/test_site/media/bbc_scotland_report.mp3 +0 -0
- data/test_site/media/count_and_bars.mp4 +0 -0
- data/test_site/media_page.html +60 -7
- data/testcentricity_web.gemspec +14 -8
- metadata +197 -25
- data/Gemfile.lock +0 -170
- data/features/basic_test_page_css.feature +0 -24
- data/features/basic_test_page_xpath.feature +0 -24
- 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: c35f1c09951d1a58be2d3bac921d2d221311edf3b4464c5d4806c7a30a57c0f2
|
4
|
+
data.tar.gz: bbe72af137b6808721f7a87b26032c42d78bbf4708ff88ed34c753ebcec85c46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0607f397cd9d6564623218d3e88f541a04f17c9b4b8cc96eb50571bc787cfa46927651dc38cfc7765129dd33303fbd3c130720dc809940cf401a336756c3d7c1
|
7
|
+
data.tar.gz: 11cc150624658854f69575361345dca970a3cf567e1b29e6797450dc22df88f53b069374a63ab8e12f83e7638a28386b0edd0d96e6707720f41e1e6fa621c1f5
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.7.5
|
data/.simplecov
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,49 @@
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
4
|
|
5
|
+
## [4.1.9] - 18-APR-2022
|
6
|
+
|
7
|
+
### Fixed
|
8
|
+
* `PageSection.radio` no longer returns `wrong number of arguments` error.
|
9
|
+
* `PageObject.populate_data_fields` and `PageSection.populate_data_fields` methods no longer skip setting checkboxes or
|
10
|
+
radio buttons to the unchecked state.
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
* `CheckBox.define_custom_elements` and `Radio.define_custom_elements` methods now support specifying a child `input` component
|
15
|
+
contained by a top level `label` element.
|
16
|
+
|
17
|
+
|
18
|
+
## [4.1.8] - 31-MAR-2022
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
* `Image.loaded?` now correctly returns a `Boolean` value instead of a `String`.
|
22
|
+
* `Video.video_height` and `Video.video_width` now correctly returns an `Integer` value instead of a `String`.
|
23
|
+
* `UIElement.scroll_to` now works for all supported browsers.
|
24
|
+
|
25
|
+
### Changed
|
26
|
+
* `UIElement.crossorigin` is no longer limited to `Audio` and `Video` objects.
|
27
|
+
|
28
|
+
|
29
|
+
## [4.1.7] - 28-MAR-2022
|
30
|
+
|
31
|
+
### Fixed
|
32
|
+
* `CheckBox.set_checkbox_state` and `Radio.set_selected_state` work on iOS simulators again.
|
33
|
+
|
34
|
+
### Changed
|
35
|
+
* `Audio.playback_rate` and `Video.playback_rate` now return value as a `Float` instead of a `String`.
|
36
|
+
* `Audio.default_playback_rate` and `Video.default_playback_rate` now return value as a `Float` instead of a `String`.
|
37
|
+
* `Audio.current_time` and `Video.current_time` now return value as a `Float` rounded to two decimal places.
|
38
|
+
* `Audio.duration` and `Video.duration` now return value as a `Float` rounded to two decimal places.
|
39
|
+
|
40
|
+
### Added
|
41
|
+
* `Audio.mute` and `Video.mute` methods added.
|
42
|
+
* `Audio.unmute` and `Video.unmute` methods added.
|
43
|
+
* `Audio.playback_rate` and `Video.playback_rate` now accept a `Float` value as an input for setting the playback rate
|
44
|
+
of media.
|
45
|
+
* `Audio.volume` and `Video.volume` now accept a `Float` value between 0 and 1 as an input for setting the volume of media.
|
46
|
+
|
47
|
+
|
5
48
|
## [4.1.6] - 21-MAR-2022
|
6
49
|
|
7
50
|
### Fixed
|
data/README.md
CHANGED
@@ -505,6 +505,7 @@ With TestCentricity, all UI elements are based on the `UIElement` class, and inh
|
|
505
505
|
element.focused?
|
506
506
|
element.required?
|
507
507
|
element.content_editable?
|
508
|
+
element.crossorigin
|
508
509
|
element.get_value
|
509
510
|
element.count
|
510
511
|
element.style
|
@@ -629,6 +630,7 @@ The `verify_ui_states` method supports the following property/state pairs:
|
|
629
630
|
:visible Boolean
|
630
631
|
:hidden Boolean
|
631
632
|
:displayed Boolean
|
633
|
+
:obscured Boolean
|
632
634
|
:width Integer
|
633
635
|
:height Integer
|
634
636
|
:x Integer
|
@@ -639,6 +641,7 @@ The `verify_ui_states` method supports the following property/state pairs:
|
|
639
641
|
:style String
|
640
642
|
:tabindex Integer
|
641
643
|
:required Boolean
|
644
|
+
:crossorigin String
|
642
645
|
|
643
646
|
**Pages:**
|
644
647
|
|
@@ -715,7 +718,6 @@ The `verify_ui_states` method supports the following property/state pairs:
|
|
715
718
|
:playback_rate Float
|
716
719
|
:ready_state Integer
|
717
720
|
:volume Float
|
718
|
-
:crossorigin String
|
719
721
|
:preload String
|
720
722
|
:poster String
|
721
723
|
|
@@ -872,7 +874,7 @@ present a challenge when attempting to interact with them using Capybara and Sel
|
|
872
874
|
Sometimes, radio buttons and checkboxes implemented using JS component libraries cannot be interacted with due to other UI elements
|
873
875
|
being overlaid on top of them and the base `input(type='radio')` or `input(type='checkbox')` element not being visible.
|
874
876
|
|
875
|
-
In the screenshots below of an airline flight search and booking page, the **Roundtrip** and **One-way** radio buttons are adorned
|
877
|
+
In the screenshots below of an airline flight search and booking page, the **Roundtrip** and **One-way** radio buttons are adorned by
|
876
878
|
`label` elements that also acts as proxies for their associated `input(type='radio')` elements, and they intercept the `click` actions
|
877
879
|
that would normally be handled by the `input(type='radio')` elements.
|
878
880
|
|
@@ -890,27 +892,26 @@ elements.
|
|
890
892
|
<img src="https://i.imgur.com/JcOANqZ.jpg" alt="One-way Radio button Label" title="One-way Radio button Label">
|
891
893
|
|
892
894
|
|
893
|
-
The `Radio.define_custom_elements` and `CheckBox.define_custom_elements` methods provide a way to specify the `
|
894
|
-
elements associated with the `input(type='radio')` or `input(type='checkbox')` elements. The `define_custom_elements`
|
895
|
-
should be called from an `initialize` method for the `PageObject` or `PageSection` where the `radio` or `checkbox` element is
|
896
|
-
The code snippet below demonstrates the use of the `Radio.define_custom_elements` and `CheckBox.define_custom_elements`
|
897
|
-
resolve the testability issues posed by the adorned **Roundtrip** and **One-way** radio buttons and the **Flexible dates**
|
895
|
+
The `Radio.define_custom_elements` and `CheckBox.define_custom_elements` methods provide a way to specify the `input`, `proxy`
|
896
|
+
and/or `label` elements associated with the `input(type='radio')` or `input(type='checkbox')` elements. The `define_custom_elements`
|
897
|
+
method should be called from an `initialize` method for the `PageObject` or `PageSection` where the `radio` or `checkbox` element is
|
898
|
+
instantiated. The code snippet below demonstrates the use of the `Radio.define_custom_elements` and `CheckBox.define_custom_elements`
|
899
|
+
methods to resolve the testability issues posed by the adorned **Roundtrip** and **One-way** radio buttons and the **Flexible dates**
|
900
|
+
checkbox.
|
898
901
|
|
899
902
|
class FlightBookingPage < TestCentricity::PageObject
|
900
903
|
trait(:page_name) { 'Flight Booking Home' }
|
901
904
|
trait(:page_locator) { "div[class*='bookerContainer']" }
|
902
905
|
|
903
906
|
# Flight Booking page UI elements
|
904
|
-
radios roundtrip_radio: '
|
905
|
-
one_way_radio: '
|
907
|
+
radios roundtrip_radio: "label[for='roundtrip']",
|
908
|
+
one_way_radio: "label[for='oneway']"
|
906
909
|
checkbox :flexible_check, 'input#flexibleDates'
|
907
910
|
|
908
911
|
def initialize
|
909
|
-
# define the custom element components for the Round Trip radio
|
910
|
-
radio_spec = {
|
912
|
+
# define the custom element components for the Round Trip and One Way radio buttons
|
913
|
+
radio_spec = { input: "input[type='radio']" }
|
911
914
|
roundtrip_radio.define_custom_elements(radio_spec)
|
912
|
-
# define the custom element components for the One Way radio button
|
913
|
-
radio_spec = { proxy: "label[for='oneway']" }
|
914
915
|
one_way_radio.define_custom_elements(radio_spec)
|
915
916
|
# define the custom element components for the Flexible Date checkbox
|
916
917
|
check_spec = { proxy: 'label#flexDatesLabel' }
|
data/Rakefile
CHANGED
@@ -1,37 +1,115 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'cucumber'
|
3
3
|
require 'cucumber/rake/task'
|
4
|
+
require 'docker/compose'
|
5
|
+
require 'parallel_tests'
|
4
6
|
require 'rake'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
require 'simplecov'
|
9
|
+
require 'yard'
|
5
10
|
|
6
11
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
12
|
+
desc 'Run required specs'
|
13
|
+
RSpec::Core::RakeTask.new(:required_specs) do |t|
|
14
|
+
t.rspec_opts = '--tag required'
|
15
|
+
end
|
11
16
|
|
12
|
-
Cucumber::Rake::Task.new(:chrome) do |t|
|
13
|
-
t.profile = 'chrome'
|
14
|
-
end
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
|
18
|
+
desc 'Run grid WebDriver specs'
|
19
|
+
RSpec::Core::RakeTask.new(:grid_specs) do |t|
|
20
|
+
t.rspec_opts = '--tag grid'
|
21
|
+
end
|
19
22
|
|
20
|
-
Cucumber::Rake::Task.new(:chrome_headless) do |t|
|
21
|
-
t.profile = 'chrome_headless'
|
22
|
-
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
desc 'Run mobile WebDriver specs'
|
25
|
+
RSpec::Core::RakeTask.new(:mobile_specs) do |t|
|
26
|
+
t.rspec_opts = '--tag mobile'
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
29
|
+
|
30
|
+
desc 'Run Cucumber features on local Safari browser'
|
31
|
+
Cucumber::Rake::Task.new(:safari_local) do |t|
|
32
|
+
t.profile = 'safari_local'
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
desc 'Run Cucumber features on iOS simulator'
|
37
|
+
Cucumber::Rake::Task.new(:ios_remote) do |t|
|
38
|
+
t.profile = 'ios_remote'
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
desc 'Run required Cucumber features on local web browsers'
|
43
|
+
task :required_cukes do
|
44
|
+
%w[chrome_local chrome_headless firefox_local firefox_headless edge_local edge_headless ipad_pro_12_local].each do |profile|
|
45
|
+
system "parallel_cucumber features/ -o '-p #{profile}' -n 6 --group-by scenarios"
|
30
46
|
end
|
47
|
+
end
|
48
|
+
|
31
49
|
|
32
|
-
|
33
|
-
|
50
|
+
desc 'Run grid Cucumber features on Dockerized Selenium 4 Grid'
|
51
|
+
task :grid_cukes do
|
52
|
+
# start up Selenium 4 Grid
|
53
|
+
compose = Docker::Compose.new
|
54
|
+
compose.version
|
55
|
+
compose.up(detached: true)
|
56
|
+
# run grid features
|
57
|
+
%w[chrome_grid firefox_grid edge_grid ipad_pro_12_grid].each do |profile|
|
58
|
+
system "parallel_cucumber features/ -o '-p #{profile}' -n 4 --group-by scenarios"
|
34
59
|
end
|
60
|
+
# shut down Selenium Grid
|
61
|
+
compose.down(remove_volumes: true)
|
62
|
+
end
|
63
|
+
|
35
64
|
|
36
|
-
|
65
|
+
desc 'Run grid specs on Dockerized Selenium 4 Grid'
|
66
|
+
task :docker_grid_specs do
|
67
|
+
# start up Selenium 4 Grid
|
68
|
+
compose = Docker::Compose.new
|
69
|
+
compose.version
|
70
|
+
compose.up(detached: true)
|
71
|
+
# run grid specs
|
72
|
+
Rake::Task[:grid_specs].invoke
|
73
|
+
# shut down Selenium Grid
|
74
|
+
compose.down(remove_volumes: true)
|
37
75
|
end
|
76
|
+
|
77
|
+
|
78
|
+
desc 'Run mobile web specs and Cucumber features'
|
79
|
+
task mobile: [:mobile_specs, :ios_remote]
|
80
|
+
|
81
|
+
|
82
|
+
desc 'Run required specs and Cucumber features'
|
83
|
+
task required: [:required_specs, :required_cukes]
|
84
|
+
|
85
|
+
|
86
|
+
desc 'Run grid specs and Cucumber features on Dockerized Selenium 4 Grid'
|
87
|
+
task grid: [:docker_grid_specs, :grid_cukes]
|
88
|
+
|
89
|
+
|
90
|
+
desc 'Run all specs'
|
91
|
+
task all_specs: [:required_specs, :docker_grid_specs, :mobile_specs]
|
92
|
+
|
93
|
+
|
94
|
+
desc 'Run all specs and Cucumber features'
|
95
|
+
task all: [:required, :safari_local, :grid, :mobile]
|
96
|
+
|
97
|
+
|
98
|
+
desc 'Update HTML docs'
|
99
|
+
YARD::Rake::YardocTask.new(:docs) do |t|
|
100
|
+
t.files = ['lib/**/*.rb']
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
desc 'Build and release new version'
|
105
|
+
task :release do
|
106
|
+
version = TestCentricityWeb::VERSION
|
107
|
+
puts "Releasing #{version}, y/n?"
|
108
|
+
exit(1) unless $stdin.gets.chomp == 'y'
|
109
|
+
sh 'gem build testcentricity_web.gemspec && ' \
|
110
|
+
"gem push testcentricity_web-#{version}.gem"
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
desc 'Update docs, build gem, and push to RubyGems'
|
115
|
+
task ship_it: [:docs, :release]
|
data/config/cucumber.yml
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
<% desktop = "--require features BROWSER_TILE=true BROWSER_SIZE=1300,1000 --publish-quiet" %>
|
2
|
-
<%
|
3
|
-
<% mobile = "--tags @mobile --require features BROWSER_TILE=true --publish-quiet" %>
|
2
|
+
<% mobile = "--require features BROWSER_TILE=true --publish-quiet" %>
|
4
3
|
<% reports = "--require features --format pretty --format html --out reports/test_results.html --format junit --out reports --format json --out reports/test_results.json" %>
|
5
4
|
|
6
5
|
|
@@ -25,20 +24,29 @@ parallel: PARALLEL=true REPORTING=true --require features --format pretty --form
|
|
25
24
|
# profiles for locally hosted desktop web browsers
|
26
25
|
#==============
|
27
26
|
|
28
|
-
|
27
|
+
local: TEST_ENVIRONMENT=LOCAL
|
28
|
+
chrome: WEB_BROWSER=chrome DATA_SOURCE=yaml <%= desktop %>
|
29
|
+
edge: WEB_BROWSER=edge DATA_SOURCE=json <%= desktop %>
|
30
|
+
safari: WEB_BROWSER=safari DATA_SOURCE=Excel <%= desktop %>
|
29
31
|
firefox: WEB_BROWSER=firefox <%= desktop %>
|
30
|
-
edge: WEB_BROWSER=edge <%= desktop %>
|
31
|
-
safari: WEB_BROWSER=safari <%= desktop %>
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
chrome_local: --profile local --profile chrome
|
34
|
+
edge_local: --profile local --profile edge
|
35
|
+
safari_local: --profile local --profile safari
|
36
|
+
firefox_local: --profile local --profile firefox
|
37
|
+
|
38
|
+
firefox_headless: --profile local WEB_BROWSER=firefox_headless <%= desktop %>
|
39
|
+
chrome_headless: --profile local WEB_BROWSER=chrome_headless <%= desktop %>
|
40
|
+
edge_headless: --profile local WEB_BROWSER=edge_headless <%= desktop %>
|
36
41
|
|
37
42
|
|
38
43
|
#==============
|
39
44
|
# profile for Selenium Grid and Dockerized Selenium Grid hosted desktop web browsers
|
40
45
|
#==============
|
41
|
-
grid:
|
46
|
+
grid: SELENIUM=remote TEST_ENVIRONMENT=REMOTE REMOTE_ENDPOINT="http://localhost:4444/wd/hub"
|
47
|
+
chrome_grid: --profile grid --profile chrome
|
48
|
+
edge_grid: --profile grid --profile edge
|
49
|
+
firefox_grid: --profile grid --profile firefox
|
42
50
|
|
43
51
|
|
44
52
|
#==============
|
@@ -49,6 +57,15 @@ landscape: ORIENTATION=landscape
|
|
49
57
|
portrait: ORIENTATION=portrait
|
50
58
|
|
51
59
|
|
60
|
+
#==============
|
61
|
+
# profiles for locally hosted mobile web browsers (emulated locally in Chrome browser)
|
62
|
+
#==============
|
63
|
+
|
64
|
+
ipad_pro_11_local: --profile local WEB_BROWSER=ipad_pro_11 HOST_BROWSER=chrome --profile portrait <%= mobile %>
|
65
|
+
ipad_pro_12_local: --profile local WEB_BROWSER=ipad_pro_12_9 HOST_BROWSER=chrome --profile portrait <%= mobile %>
|
66
|
+
ipad_pro_12_grid: --profile grid WEB_BROWSER=ipad_pro_12_9 HOST_BROWSER=chrome --profile portrait <%= mobile %>
|
67
|
+
|
68
|
+
|
52
69
|
#==============
|
53
70
|
# profile to start Appium Server prior to running mobile browser tests on iOS or Android simulators or physical devices
|
54
71
|
#==============
|
@@ -60,22 +77,26 @@ run_appium: APPIUM_SERVER=run
|
|
60
77
|
# NOTE: Requires installation of XCode, iOS version specific target simulators, Appium, and the appium_capybara gem
|
61
78
|
#==============
|
62
79
|
|
63
|
-
appium_ios: WEB_BROWSER=appium AUTOMATION_ENGINE=XCUITest APP_PLATFORM_NAME="ios" APP_BROWSER="Safari" NEW_COMMAND_TIMEOUT=30 SHOW_SIM_KEYBOARD=false <%=
|
80
|
+
appium_ios: WEB_BROWSER=appium AUTOMATION_ENGINE=XCUITest APP_PLATFORM_NAME="ios" APP_BROWSER="Safari" NEW_COMMAND_TIMEOUT=30 SHOW_SIM_KEYBOARD=false <%= mobile %>
|
64
81
|
app_ios_15: --profile appium_ios APP_VERSION="15.4"
|
65
82
|
|
66
83
|
ipad_pro_12_15_sim: --profile app_ios_15 DEVICE_TYPE=tablet APP_DEVICE="iPad Pro (12.9-inch) (5th generation)"
|
67
84
|
ipad_air_15_sim: --profile app_ios_15 DEVICE_TYPE=tablet APP_DEVICE="iPad Air (5th generation)" <%= desktop %>
|
68
85
|
|
86
|
+
ios_remote: --profile ipad_pro_12_15_sim --profile run_appium ORIENTATION=portrait TEST_ENVIRONMENT=REMOTE
|
87
|
+
|
69
88
|
|
70
89
|
#==============
|
71
90
|
# profiles for Android mobile web browsers hosted within Android Studio Android Virtual Device emulators
|
72
91
|
# NOTE: Requires installation of Android Studio, Android version specific virtual device simulators, Appium, and the appium_capybara gem
|
73
92
|
#==============
|
74
93
|
|
75
|
-
appium_android: WEB_BROWSER=appium APP_PLATFORM_NAME="Android" <%=
|
94
|
+
appium_android: WEB_BROWSER=appium APP_PLATFORM_NAME="Android" <%= mobile %>
|
76
95
|
app_android_12: --profile appium_android APP_BROWSER="Chrome" APP_VERSION="12.0"
|
77
96
|
pixel_c_api31_sim: --profile app_android_12 DEVICE_TYPE=tablet APP_DEVICE="Pixel_C_API_31"
|
78
97
|
|
98
|
+
android_remote: --profile pixel_c_api31_sim --profile run_appium ORIENTATION=portrait TEST_ENVIRONMENT=REMOTE
|
99
|
+
|
79
100
|
|
80
101
|
#==============
|
81
102
|
# profiles for remotely hosted web browsers on the BrowserStack service
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Localization file for English/U.S. locale.
|
2
|
+
|
3
|
+
en-US:
|
4
|
+
time:
|
5
|
+
formats:
|
6
|
+
default: "%m/%d/%Y"
|
7
|
+
long: "%B %d, %Y"
|
8
|
+
short: "%b %d"
|
9
|
+
abbrev: "%b %d, %Y"
|
10
|
+
abbrev_month: "%b"
|
11
|
+
month_year: "%B %Y"
|
12
|
+
date:
|
13
|
+
abbr_day_names:
|
14
|
+
- Sun
|
15
|
+
- Mon
|
16
|
+
- Tue
|
17
|
+
- Wed
|
18
|
+
- Thu
|
19
|
+
- Fri
|
20
|
+
- Sat
|
21
|
+
abbr_month_names:
|
22
|
+
-
|
23
|
+
- Jan
|
24
|
+
- Feb
|
25
|
+
- Mar
|
26
|
+
- Apr
|
27
|
+
- May
|
28
|
+
- Jun
|
29
|
+
- Jul
|
30
|
+
- Aug
|
31
|
+
- Sep
|
32
|
+
- Oct
|
33
|
+
- Nov
|
34
|
+
- Dec
|
35
|
+
day_names:
|
36
|
+
- Sunday
|
37
|
+
- Monday
|
38
|
+
- Tuesday
|
39
|
+
- Wednesday
|
40
|
+
- Thursday
|
41
|
+
- Friday
|
42
|
+
- Saturday
|
43
|
+
month_names:
|
44
|
+
-
|
45
|
+
- January
|
46
|
+
- February
|
47
|
+
- March
|
48
|
+
- April
|
49
|
+
- May
|
50
|
+
- June
|
51
|
+
- July
|
52
|
+
- August
|
53
|
+
- September
|
54
|
+
- October
|
55
|
+
- November
|
56
|
+
- December
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"Form_data": {
|
3
|
+
"primary": {
|
4
|
+
"username": "Thaddeus Eumbwebwe",
|
5
|
+
"password": "Pa55w0rd",
|
6
|
+
"image_filename": "Granny.jpg",
|
7
|
+
"multi_select": "Selection Item 3",
|
8
|
+
"drop_down_item": "Drop Down Item 3",
|
9
|
+
"check1": false,
|
10
|
+
"check2": true,
|
11
|
+
"check3": true,
|
12
|
+
"radio_select": 1
|
13
|
+
}
|
14
|
+
}
|
15
|
+
}
|
Binary file
|
@@ -0,0 +1,25 @@
|
|
1
|
+
{
|
2
|
+
"Environments": {
|
3
|
+
"LOCAL": {
|
4
|
+
"PROTOCOL": "file",
|
5
|
+
"BASE_URL": "/../../test_site"
|
6
|
+
},
|
7
|
+
"REMOTE": {
|
8
|
+
"PROTOCOL": "http",
|
9
|
+
"BASE_URL": "192.168.1.129/test_site"
|
10
|
+
}
|
11
|
+
},
|
12
|
+
"Form_data": {
|
13
|
+
"primary": {
|
14
|
+
"username": "Thaddeus Eumbwebwe",
|
15
|
+
"password": "Pa55w0rd",
|
16
|
+
"image_filename": "Granny.jpg",
|
17
|
+
"multi_select": "Selection Item 3",
|
18
|
+
"drop_down_item": "Drop Down Item 3",
|
19
|
+
"check1": false,
|
20
|
+
"check2": true,
|
21
|
+
"check3": true,
|
22
|
+
"radio_select": 1
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
Binary file
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# This section is populated with Environment data required to execute automated test suites on all supported environments
|
2
|
+
Environments:
|
3
|
+
LOCAL:
|
4
|
+
PROTOCOL: "file"
|
5
|
+
BASE_URL: "/../../test_site"
|
6
|
+
REMOTE:
|
7
|
+
PROTOCOL: "http"
|
8
|
+
BASE_URL: "192.168.1.129/test_site"
|
9
|
+
|
10
|
+
Form_data:
|
11
|
+
primary:
|
12
|
+
username: "Xavier Snicklefritz"
|
13
|
+
password: "Pa55W0rd"
|
14
|
+
image_filename: "Wilder.jpg"
|
15
|
+
multi_select: "Selection Item 1"
|
16
|
+
drop_down_item: "Drop Down Item 2"
|
17
|
+
check1: true
|
18
|
+
check2: true
|
19
|
+
check3: true
|
20
|
+
radio_select: 3
|
@@ -1,6 +1,6 @@
|
|
1
|
-
# To execute this docker-compose yml file use `docker-compose -f docker-compose
|
1
|
+
# To execute this docker-compose yml file use `docker-compose -f docker-compose.yml up`
|
2
2
|
# Add the `-d` flag at the end for detached execution
|
3
|
-
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose
|
3
|
+
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose.yml down`
|
4
4
|
version: "3"
|
5
5
|
services:
|
6
6
|
chrome:
|
@@ -0,0 +1,54 @@
|
|
1
|
+
Feature: Basic HTML Form Test Page using CSS locators
|
2
|
+
In order to ensure comprehensive support for HTML UI elements and forms
|
3
|
+
As a developer of the TestCentricity web gem
|
4
|
+
I expect to validate the interaction and verification capabilities of typical HTML form UI elements
|
5
|
+
|
6
|
+
|
7
|
+
Background:
|
8
|
+
Given I am on the Basic CSS Form page
|
9
|
+
|
10
|
+
|
11
|
+
Scenario: Validate verify_ui_states method and associated object state verification methods
|
12
|
+
Then I expect the Basic CSS Form page to be correctly displayed
|
13
|
+
|
14
|
+
|
15
|
+
@!mobile @!firefox_headless @!firefox_grid
|
16
|
+
Scenario: Validate verify_focus_order method
|
17
|
+
Then I expect the tab order to be correct
|
18
|
+
|
19
|
+
|
20
|
+
Scenario: Validate populate_data_fields method and associated object action methods
|
21
|
+
When I populate the form fields
|
22
|
+
Then I expect the form fields to be correctly populated
|
23
|
+
When I cancel my changes
|
24
|
+
Then I expect the Basic CSS Form page to be correctly displayed
|
25
|
+
|
26
|
+
|
27
|
+
Scenario Outline: Choose selectlist options by index, value, and text
|
28
|
+
When I choose selectlist options by <method>
|
29
|
+
Then I expect the selected option to be displayed
|
30
|
+
|
31
|
+
Examples:
|
32
|
+
|method |
|
33
|
+
|index |
|
34
|
+
|text |
|
35
|
+
|
36
|
+
@!safari @!firefox @!firefox_headless
|
37
|
+
Examples:
|
38
|
+
|method |
|
39
|
+
|value |
|
40
|
+
|
41
|
+
|
42
|
+
Scenario Outline: Verify functionality of navigation tabs and browser back/forward
|
43
|
+
When I click the <target_page> navigation tab
|
44
|
+
Then I expect the <target_page> page to be correctly displayed
|
45
|
+
When I navigate back
|
46
|
+
Then I should be on the Basic CSS Form page
|
47
|
+
When I navigate forward
|
48
|
+
Then I should be on the <target_page> page
|
49
|
+
|
50
|
+
Examples:
|
51
|
+
|target_page |
|
52
|
+
|Media Test |
|
53
|
+
|Indexed Sections |
|
54
|
+
|Custom Controls |
|
@@ -0,0 +1,26 @@
|
|
1
|
+
@!grid @!mobile @!headless
|
2
|
+
|
3
|
+
|
4
|
+
Feature: Basic HTML Form Test Page using Xpath locators
|
5
|
+
In order to ensure comprehensive support for HTML UI elements and forms
|
6
|
+
As a developer of the TestCentricity web gem
|
7
|
+
I expect to validate the interaction and verification capabilities of typical HTML form UI elements
|
8
|
+
|
9
|
+
|
10
|
+
Background:
|
11
|
+
Given I am on the Basic Xpath Form page
|
12
|
+
|
13
|
+
|
14
|
+
Scenario: Validate verify_ui_states method and associated object state verification methods
|
15
|
+
Then I expect the Basic Xpath Form page to be correctly displayed
|
16
|
+
|
17
|
+
|
18
|
+
Scenario: Validate verify_focus_order method
|
19
|
+
Then I expect the tab order to be correct
|
20
|
+
|
21
|
+
|
22
|
+
Scenario: Validate populate_data_fields method and associated object action methods
|
23
|
+
When I populate the form fields
|
24
|
+
Then I expect the form fields to be correctly populated
|
25
|
+
When I cancel my changes
|
26
|
+
Then I expect the Basic Xpath Form page to be correctly displayed
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Feature: Custom Controls
|
2
|
+
In order to ensure comprehensive support for custom UI elements
|
3
|
+
As a developer of the TestCentricity web gem
|
4
|
+
I expect to validate the interaction and verification capabilities of custom UI elements
|
5
|
+
|
6
|
+
|
7
|
+
Background:
|
8
|
+
Given I am on the Custom Controls page
|
9
|
+
|
10
|
+
|
11
|
+
Scenario: Validate populate_data_fields method and associated object action methods
|
12
|
+
When I populate the form fields
|
13
|
+
Then I expect the form fields to be correctly populated
|
14
|
+
|
15
|
+
|
16
|
+
@!safari @!firefox @!firefox_headless @!ios
|
17
|
+
Scenario: Use custom select list input field to choose options
|
18
|
+
When I choose custom select options by typing
|
19
|
+
Then I expect the form fields to be correctly populated
|
20
|
+
|
21
|
+
|
22
|
+
Scenario Outline: Choose selectlist options by index and text
|
23
|
+
When I choose selectlist options by <method>
|
24
|
+
Then I expect the selected option to be displayed
|
25
|
+
|
26
|
+
Examples:
|
27
|
+
|method |
|
28
|
+
|index |
|
29
|
+
|text |
|