testcentricity_web 4.0.1 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +52 -0
- data/LICENSE.md +1 -1
- data/README.md +26 -23
- data/lib/testcentricity_web/appium_server.rb +1 -1
- data/lib/testcentricity_web/data_objects/data_objects_helper.rb +1 -1
- data/lib/testcentricity_web/data_objects/environment.rb +27 -9
- data/lib/testcentricity_web/exception_queue_helper.rb +5 -5
- data/lib/testcentricity_web/version.rb +1 -1
- data/lib/testcentricity_web/web_core/page_object.rb +6 -8
- data/lib/testcentricity_web/web_core/page_section.rb +5 -7
- data/lib/testcentricity_web/web_core/webdriver_helper.rb +199 -180
- data/lib/testcentricity_web/web_elements/checkbox.rb +33 -32
- data/lib/testcentricity_web/web_elements/radio.rb +33 -32
- data/lib/testcentricity_web/web_elements/select_list.rb +0 -14
- data/lib/testcentricity_web/web_elements/ui_elements_helper.rb +17 -1
- data/lib/testcentricity_web.rb +0 -1
- data/testcentricity_web.gemspec +3 -3
- metadata +13 -15
- data/Gemfile.lock +0 -112
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fdb6f0dda3633c2c5419bf6477bb60131814db02ece30fba81ca20dc0738a26
|
4
|
+
data.tar.gz: 7503ad522b8bcaa9e1befd791ca3d7ef6ca13728963e0a8a1d4ef11b93973c02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd7f80d554ff6f37988a9531d3be6a6ca5f9db61c77ba6acb3c49634cb8b0a87bf9952ccd1eb5dbbebfa56ce511193dcbdd462fc90d4b9ac27352d570f0a0cf7
|
7
|
+
data.tar.gz: a7c7249a9042a327208d275be92a42465322984afdba99df2ea3dd9e9755a9a6cb311486bf618d2c3fa5306ce38d42e6d79d4d81c0a71d677879c39749910baa
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,33 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [4.1.0] - 28-FEB-2022
|
5
|
+
|
6
|
+
### Added
|
7
|
+
* TestCentricity now supports and integrates with Selenium-Webdriver version 4.1.
|
8
|
+
* Added support for locally hosted Microsoft Edge desktop web browsers, including in `headless` mode.
|
9
|
+
* Added `CheckBox.define_custom_elements` and `Radio.define_custom_elements` methods to support abstracted UI implementations
|
10
|
+
where the `input type="checkbox"` or `input type="radio"` object is hidden or obscured by a proxy object, typically a `label`.
|
11
|
+
* Added support for `shutdownOtherSimulators` and `forceSimulatorSoftwareKeyboardPresence` capabilities for iOS simulators
|
12
|
+
when testing with Mobile Safari browser on iOS Simulators.
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
* `checkbox` and `radio` methods no longer accept an optional `proxy`. Calling the `checkbox` or `radio` methods with a `proxy`
|
16
|
+
parameter will result in a `wrong number of arguments (given 3, expected 2) (ArgumentError)` exception. Use the `define_custom_elements`
|
17
|
+
method to specify the locator for an associated `proxy` and/or `label` element. The `define_custom_elements` method can be
|
18
|
+
called from an `initialize` method for the `PageObject` or `PageSection` where the `checkbox` or `radio` is instantiated.
|
19
|
+
* Ruby version 2.7 or greater required.
|
20
|
+
|
21
|
+
|
22
|
+
## [4.0.3] - 30-DEC-2021
|
23
|
+
|
24
|
+
### Changed
|
25
|
+
* Primary test data path has been changed from `features/test_data/` to `config/test_data/`.
|
26
|
+
|
27
|
+
### Fixed
|
28
|
+
* No longer throws a `NoMethodError: undefined method 'World' for main:Object` error when using RSpec.
|
29
|
+
|
30
|
+
|
4
31
|
## [4.0.0] - 18-APR-2021
|
5
32
|
|
6
33
|
### Changed
|
@@ -31,17 +58,20 @@ All notable changes to this project will be documented in this file.
|
|
31
58
|
* `UIElement.invoke_siebel_popup`
|
32
59
|
* `UIElement.get_siebel_object_type`
|
33
60
|
|
61
|
+
|
34
62
|
## [3.3.0] - 14-MAR-2021
|
35
63
|
|
36
64
|
### Fixed
|
37
65
|
* `WebDriverConnect.initialize_web_driver` method now correctly sets local Chrome browser Download directory when running
|
38
66
|
with headless Chrome.
|
39
67
|
|
68
|
+
|
40
69
|
## [3.2.25] - 11-MAR-2021
|
41
70
|
|
42
71
|
### Added
|
43
72
|
* Added `String.titlecase` method.
|
44
73
|
|
74
|
+
|
45
75
|
## [3.2.23] - 11-FEB-2021
|
46
76
|
|
47
77
|
### Changed
|
@@ -49,35 +79,41 @@ with headless Chrome.
|
|
49
79
|
`:translate_downcase`, `:translate_capitalize`, and `:translate_titlecase` conversions to fall back to `:en` default
|
50
80
|
locale if translated strings are missing from the current locale specified in `I18n.locale`.
|
51
81
|
|
82
|
+
|
52
83
|
## [3.2.22] - 09-FEB-2021
|
53
84
|
|
54
85
|
### Fixed
|
55
86
|
* Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to correctly handle `:translate_upcase`,
|
56
87
|
`:translate_downcase`, `:translate_capitalize`, and `:translate_titlecase` conversions for Arrays of `String`.
|
57
88
|
|
89
|
+
|
58
90
|
## [3.2.21] - 04-FEB-2021
|
59
91
|
|
60
92
|
### Changed
|
61
93
|
* `UIElement.hover_at` method now accepts an optional `visible` parameter to allow hovering over UI elements that are not
|
62
94
|
visible.
|
63
95
|
|
96
|
+
|
64
97
|
## [3.2.20] - 21-JAN-2021
|
65
98
|
|
66
99
|
### Changed
|
67
100
|
* `UIElement.hover` method now accepts an optional `visible` parameter to allow hovering over UI elements that are not
|
68
101
|
visible.
|
69
102
|
|
103
|
+
|
70
104
|
## [3.2.19] - 05-JAN-2021
|
71
105
|
|
72
106
|
### Fixed
|
73
107
|
* `SelectList.choose_option` and `SelectList.get_options` methods now wait up to 5 seconds for list drop menu to appear.
|
74
108
|
|
109
|
+
|
75
110
|
## [3.2.18] - 12-AUG-2020
|
76
111
|
|
77
112
|
### Fixed
|
78
113
|
* Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to correctly handle `:row`, `:column`,
|
79
114
|
`:cell`, `:item`, and `:attribute` properties.
|
80
115
|
|
116
|
+
|
81
117
|
## [3.2.17] - 19-JUNE-2020
|
82
118
|
|
83
119
|
### Changed
|
@@ -85,28 +121,33 @@ visible.
|
|
85
121
|
* Updated `Table.get_row_count`, `Table.get_column_count`, and `Table.get_table_cell_locator` methods to support tables
|
86
122
|
with row headers in row #1.
|
87
123
|
|
124
|
+
|
88
125
|
## [3.2.16] - 13-MAY-2020
|
89
126
|
|
90
127
|
### Changed
|
91
128
|
* `WebDriverConnect.initialize_web_driver` method now sets local Chrome and Firefox browser Download directory to separate
|
92
129
|
folders for each parallel test thread when using `parallel_tests` gem to run tests in concurrent threads.
|
93
130
|
|
131
|
+
|
94
132
|
## [3.2.15] - 06-APR-2020
|
95
133
|
|
96
134
|
### Fixed
|
97
135
|
* `PageObject.populate_data_fields` and `PageSection.populate_data_fields` methods accept `String` or `Boolean` values
|
98
136
|
for checkboxes and radio buttons.
|
99
137
|
|
138
|
+
|
100
139
|
## [3.2.14] - 06-APR-2020
|
101
140
|
|
102
141
|
### Added
|
103
142
|
* Added `UIElement.scroll_to` method.
|
104
143
|
|
144
|
+
|
105
145
|
## [3.2.13] - 24-MAR-2020
|
106
146
|
|
107
147
|
### Added
|
108
148
|
* Added `PageObject.send_keys` method.
|
109
149
|
|
150
|
+
|
110
151
|
## [3.2.12] - 11-MAR-2020
|
111
152
|
|
112
153
|
### Added
|
@@ -114,26 +155,31 @@ for checkboxes and radio buttons.
|
|
114
155
|
* Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to support verification of the
|
115
156
|
`focused` property.
|
116
157
|
|
158
|
+
|
117
159
|
## [3.2.11] - 10-MAR-2020
|
118
160
|
|
119
161
|
### Added
|
120
162
|
* Added `PageSection.verify_focus_order` method.
|
121
163
|
|
164
|
+
|
122
165
|
## [3.2.10] - 09-MAR-2020
|
123
166
|
|
124
167
|
### Added
|
125
168
|
* Added `PageObject.verify_focus_order` method.
|
126
169
|
|
170
|
+
|
127
171
|
## [3.2.9] - 12-FEB-2020
|
128
172
|
|
129
173
|
### Fixed
|
130
174
|
* Fixed `UIElement.wait_until_value_is`, `List.wait_until_item_count_is`, and `Table.wait_until_row_count_is`' methods.
|
131
175
|
|
176
|
+
|
132
177
|
## [3.2.8] - 08-FEB-2020
|
133
178
|
|
134
179
|
### Fixed
|
135
180
|
* Fixed `UIElement.visible?` method that was broken in release 3.2.7.
|
136
181
|
|
182
|
+
|
137
183
|
## [3.2.7] - 05-FEB-2020
|
138
184
|
|
139
185
|
### Added
|
@@ -143,11 +189,13 @@ for checkboxes and radio buttons.
|
|
143
189
|
* Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to support verification of the
|
144
190
|
`crossorigin`, `preload`, and `poster` properties.
|
145
191
|
|
192
|
+
|
146
193
|
## [3.2.6] - 31-JAN-2020
|
147
194
|
|
148
195
|
### Changed
|
149
196
|
* `Audio.volume` and `Video.volume` methods now return a `Float`.
|
150
197
|
|
198
|
+
|
151
199
|
## [3.2.5] - 25-JAN-2020
|
152
200
|
|
153
201
|
### Added
|
@@ -158,11 +206,13 @@ for checkboxes and radio buttons.
|
|
158
206
|
### Fixed
|
159
207
|
* Fixed `UIElement.aria_multiselectable?` method.
|
160
208
|
|
209
|
+
|
161
210
|
## [3.2.4] - 16-JAN-2020
|
162
211
|
|
163
212
|
### Added
|
164
213
|
* Added `Range` type `UIElement` to support interaction with and verification of HTML5 Input Range Slider Objects.
|
165
214
|
|
215
|
+
|
166
216
|
## [3.2.3] - 29-DEC-2019
|
167
217
|
|
168
218
|
### Added
|
@@ -195,6 +245,7 @@ properties:
|
|
195
245
|
* `aria_multiselectable`
|
196
246
|
* `aria_controls`
|
197
247
|
|
248
|
+
|
198
249
|
## [3.2.2] - 16-OCT-2019
|
199
250
|
|
200
251
|
### Added
|
@@ -204,6 +255,7 @@ properties:
|
|
204
255
|
* Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to support verification of `indeterminate` property.
|
205
256
|
* Updated device profiles for iPad Pro 12.9" 3rd Generation (iOS 13.1) with Mobile Safari browser.
|
206
257
|
|
258
|
+
|
207
259
|
## [3.2.1] - 03-OCT-2019
|
208
260
|
|
209
261
|
### Changed
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
The TestCentricity™ Web core generic framework for desktop and mobile web browser-based app testing implements a Page Object and Data
|
7
|
-
Object Model DSL for use with Cucumber, Capybara (version 3.x), and Selenium-Webdriver (version
|
7
|
+
Object Model DSL for use with Cucumber, Capybara (version 3.x), and Selenium-Webdriver (version 4.1).
|
8
8
|
|
9
9
|
**An example project that demonstrates the implementation of a page object model framework using Cucumber and TestCentricity™ can be found [here](https://github.com/TestCentricity/tc_web_sample).**
|
10
10
|
|
11
11
|
The TestCentricity™ Web gem supports running automated tests against the following web test targets:
|
12
|
-
* locally hosted desktop browsers (Firefox, Chrome, Safari, or IE)
|
12
|
+
* locally hosted desktop browsers (Firefox, Chrome, Edge, Safari, or IE)
|
13
13
|
* locally hosted emulated iOS Mobile Safari, Android, Windows Phone, or Blackberry mobile browsers (running within a local instance of Chrome)
|
14
|
-
* locally hosted "headless" Chrome or
|
14
|
+
* locally hosted "headless" Chrome, Firefox, or Edge browsers
|
15
15
|
* desktop and emulated mobile web browsers hosted on Selenium Grid and Dockerized Selenium Grid environments
|
16
16
|
* mobile Safari browsers on iOS device simulators or physical iOS devices (using Appium and XCode on OS X)
|
17
17
|
* mobile Chrome or Android browsers on Android Studio virtual device emulators (using Appium and Android Studio on OS X)
|
@@ -727,11 +727,11 @@ To use these **PageManager** methods, include the step definitions and code belo
|
|
727
727
|
|
728
728
|
## Connecting to a Web Browser
|
729
729
|
|
730
|
-
The `TestCentricity::WebDriverConnect.initialize_web_driver` method configures the appropriate Selenium-Webdriver capabilities required to
|
731
|
-
connection with a target web browser, and sets the base host URL of the web site you are running your tests against.
|
730
|
+
The `TestCentricity::WebDriverConnect.initialize_web_driver` method configures the appropriate Selenium-Webdriver capabilities required to
|
731
|
+
establish a connection with a target web browser, and sets the base host URL of the web site you are running your tests against.
|
732
732
|
|
733
|
-
The `TestCentricity::WebDriverConnect.initialize_web_driver` method accepts a single optional parameter - the base host URL. Cucumber
|
734
|
-
Variables** are used to specify the target local or remote web browser, and the various webdriver capability parameters required to configure
|
733
|
+
The `TestCentricity::WebDriverConnect.initialize_web_driver` method accepts a single optional parameter - the base host URL. Cucumber
|
734
|
+
**Environment Variables** are used to specify the target local or remote web browser, and the various webdriver capability parameters required to configure
|
735
735
|
the connection.
|
736
736
|
|
737
737
|
|
@@ -746,6 +746,8 @@ values from the table below:
|
|
746
746
|
`chrome_headless` | OS X or Windows (headless - no visible UI)
|
747
747
|
`firefox` | OS X or Windows (Firefox version 55 or greater only)
|
748
748
|
`firefox_headless` | OS X or Windows (headless - no visible UI)
|
749
|
+
`edge` | OS X or Windows
|
750
|
+
`edge_headless` | OS X or Windows (headless - no visible UI)
|
749
751
|
`safari` | OS X only
|
750
752
|
`ie` | Windows only (IE version 10.x or greater only)
|
751
753
|
|
@@ -768,11 +770,11 @@ a `/downloads` folder at the same level as the `/config` and `/features` folders
|
|
768
770
|
|
769
771
|
my_automation_project
|
770
772
|
├── config
|
773
|
+
│ └── test_data
|
771
774
|
├── downloads
|
772
775
|
├── features
|
773
776
|
│ ├── step_definitions
|
774
|
-
│
|
775
|
-
│ └── test_data
|
777
|
+
│ └── support
|
776
778
|
├── Gemfile
|
777
779
|
└── README.md
|
778
780
|
|
@@ -783,6 +785,7 @@ test thread. This is to ensure that files downloaded in each test thread are iso
|
|
783
785
|
|
784
786
|
my_automation_project
|
785
787
|
├── config
|
788
|
+
│ └── test_data
|
786
789
|
├── downloads
|
787
790
|
│ ├── 1
|
788
791
|
│ ├── 2
|
@@ -790,8 +793,7 @@ test thread. This is to ensure that files downloaded in each test thread are iso
|
|
790
793
|
│ └── 4
|
791
794
|
├── features
|
792
795
|
│ ├── step_definitions
|
793
|
-
│
|
794
|
-
│ └── test_data
|
796
|
+
│ └── support
|
795
797
|
├── Gemfile
|
796
798
|
└── README.md
|
797
799
|
|
@@ -882,12 +884,12 @@ of the Chrome desktop browser. The user specified device profiles must be locate
|
|
882
884
|
│ │ └── devices
|
883
885
|
│ │ └── devices.yml
|
884
886
|
│ ├── locales
|
887
|
+
│ ├── test_data
|
885
888
|
│ └── cucumber.yml
|
886
889
|
├── downloads
|
887
890
|
├── features
|
888
891
|
│ ├── step_definitions
|
889
|
-
│
|
890
|
-
│ └── test_data
|
892
|
+
│ └── support
|
891
893
|
├── Gemfile
|
892
894
|
└── README.md
|
893
895
|
|
@@ -947,6 +949,8 @@ Once your test environment is properly configured, the following **Environment V
|
|
947
949
|
`LANGUAGE` | [Optional] Language to set for the simulator. e.g. `fr`
|
948
950
|
`ORIENTATION` | [Optional] Set to `portrait` or `landscape` (only for iOS simulators)
|
949
951
|
`NEW_COMMAND_TIMEOUT` | [Optional] Time (in Seconds) that Appium will wait for a new command from the client
|
952
|
+
`SHOW_SIM_KEYBOARD` | [Optional] Show the simulator keyboard during text entry. Set to `true` or `false`
|
953
|
+
`SHUTDOWN_OTHER_SIMS`| [Optional] Close any other running simulators. Set to `true` or `false`
|
950
954
|
|
951
955
|
|
952
956
|
### Mobile Chrome or Android browsers on Android Studio Virtual Device emulators
|
@@ -989,7 +993,7 @@ Sauce Labs, TestingBot, Gridlastic, or LambdaTest services. If your tests are ru
|
|
989
993
|
#### Remote desktop browsers on the BrowserStack service
|
990
994
|
|
991
995
|
For remotely hosted desktop web browsers on the BrowserStack service, the following **Environment Variables** must be set as described in
|
992
|
-
the table below. Refer to the [Browserstack-specific capabilities chart page](https://www.browserstack.com/automate/capabilities)
|
996
|
+
the table below. Refer to the [Browserstack-specific capabilities chart page](https://www.browserstack.com/automate/capabilities?tag=selenium-4)
|
993
997
|
for information regarding the specific capabilities.
|
994
998
|
|
995
999
|
**Environment Variable** | **Description**
|
@@ -1003,15 +1007,13 @@ for information regarding the specific capabilities.
|
|
1003
1007
|
`BS_VERSION` | [Optional] Refer to `browser_version` capability in chart. If not specified, latest stable version of browser will be used.
|
1004
1008
|
`TUNNELING` | Must be `true` if you are testing against internal/local servers (`true` or `false`). If `true`, the BrowserStack Local instance will be automatically started.
|
1005
1009
|
`RESOLUTION` | [Optional] Refer to supported screen `resolution` capability in chart
|
1006
|
-
`BROWSER_SIZE` | [Optional] Specify width, height of browser window
|
1007
1010
|
`RECORD_VIDEO` | [Optional] Enable screen video recording during test execution (`true` or `false`)
|
1008
1011
|
`TIME_ZONE` | [Optional] Specify custom time zone. Refer to `browserstack.timezone` capability in chart
|
1009
1012
|
`IP_GEOLOCATION` | [Optional] Specify IP Geolocation. Refer to [IP Geolocation](https://www.browserstack.com/ip-geolocation) to select a country code.
|
1010
|
-
`SELENIUM_VERSION` | [Optional] Specify Selenium WebDriver version to use
|
1011
|
-
`CONSOLE_LOGS` | [Optional] Used to capture browser console logs. Refer to `browserstack.console` capability in chart
|
1012
|
-
`WD_VERSION` | [Optional] Specify browser-specific WebDriver version to use. Refer to `browserstack.geckodriver`, `browserstack.ie.driver`, and `browserstack.safari.driver` capabilities in chart
|
1013
1013
|
`ALLOW_POPUPS` | [Optional] Allow popups (`true` or `false`) - for Safari, IE, and Edge browsers only
|
1014
1014
|
`ALLOW_COOKIES` | [Optional] Allow all cookies (`true` or `false`) - for Safari browsers only
|
1015
|
+
`SCREENSHOTS` | [Optional] Generate screenshots for debugging (`true` or `false`)
|
1016
|
+
`NETWORK_LOGS` | [Optional] Capture network logs (`true` or `false`)
|
1015
1017
|
|
1016
1018
|
If the BrowserStack Local instance is running (`TUNNELING` Environment Variable is `true`), call the`TestCentricity::WebDriverConnect.close_tunnel` method
|
1017
1019
|
upon completion of your test suite to stop the Local instance. Place the code shown below in your `env.rb` or `hooks.rb` file.
|
@@ -1025,7 +1027,7 @@ upon completion of your test suite to stop the Local instance. Place the code sh
|
|
1025
1027
|
#### Remote mobile browsers on the BrowserStack service
|
1026
1028
|
|
1027
1029
|
For remotely hosted mobile web browsers on the BrowserStack service, the following **Environment Variables** must be set as described in
|
1028
|
-
the table below. Refer to the [Browserstack-specific capabilities chart page](https://www.browserstack.com/automate/capabilities)
|
1030
|
+
the table below. Refer to the [Browserstack-specific capabilities chart page](https://www.browserstack.com/automate/capabilities?tag=selenium-4)
|
1029
1031
|
for information regarding the specific capabilities.
|
1030
1032
|
|
1031
1033
|
**Environment Variable** | **Description**
|
@@ -1034,8 +1036,7 @@ for information regarding the specific capabilities.
|
|
1034
1036
|
`BS_USERNAME` | Must be set to your BrowserStack account user name
|
1035
1037
|
`BS_AUTHKEY` | Must be set to your BrowserStack account access key
|
1036
1038
|
`BS_OS` | Must be set to `ios` or `android`
|
1037
|
-
`BS_BROWSER` | Must be set to `
|
1038
|
-
`BS_PLATFORM` | Must be set to `MAC` (for iOS) or `ANDROID`
|
1039
|
+
`BS_BROWSER` | Must be set to `Safari` (for iOS) or `Chrome` (for Android)
|
1039
1040
|
`BS_DEVICE` | Refer to `device` capability in chart
|
1040
1041
|
`BS_REAL_MOBILE` | Set to `true` if running against a real device
|
1041
1042
|
`DEVICE_TYPE` | Must be set to `phone` or `tablet`
|
@@ -1044,7 +1045,9 @@ for information regarding the specific capabilities.
|
|
1044
1045
|
`RECORD_VIDEO` | [Optional] Enable screen video recording during test execution (`true` or `false`)
|
1045
1046
|
`TIME_ZONE` | [Optional] Specify custom time zone. Refer to `browserstack.timezone` capability in chart
|
1046
1047
|
`IP_GEOLOCATION` | [Optional] Specify IP Geolocation. Refer to [IP Geolocation](https://www.browserstack.com/ip-geolocation) to select a country code.
|
1047
|
-
`
|
1048
|
+
`SCREENSHOTS` | [Optional] Generate screenshots for debugging (`true` or `false`)
|
1049
|
+
`NETWORK_LOGS` | [Optional] Capture network logs (`true` or `false`)
|
1050
|
+
`APPIUM_LOGS` | [Optional] Generate Appium logs (`true` or `false`)
|
1048
1051
|
|
1049
1052
|
|
1050
1053
|
|
@@ -1706,7 +1709,7 @@ landscape orientation running on the BrowserStack service:
|
|
1706
1709
|
|
1707
1710
|
## Copyright and License
|
1708
1711
|
|
1709
|
-
TestCentricity™ Framework is Copyright (c) 2014-
|
1712
|
+
TestCentricity™ Framework is Copyright (c) 2014-2022, Tony Mrozinski.
|
1710
1713
|
All rights reserved.
|
1711
1714
|
|
1712
1715
|
Redistribution and use in source and binary forms, with or without
|
@@ -26,7 +26,7 @@ module TestCentricity
|
|
26
26
|
puts 'Appium Server is starting'
|
27
27
|
end
|
28
28
|
# start new Appium Server
|
29
|
-
@process = ChildProcess.build
|
29
|
+
@process = ChildProcess.build
|
30
30
|
process.start
|
31
31
|
# wait until confirmation that Appium Server is running
|
32
32
|
wait = Selenium::WebDriver::Wait.new(timeout: 30)
|
@@ -8,7 +8,7 @@ require 'faker'
|
|
8
8
|
|
9
9
|
module TestCentricity
|
10
10
|
|
11
|
-
PRIMARY_DATA_PATH ||= '
|
11
|
+
PRIMARY_DATA_PATH ||= 'config/test_data/'
|
12
12
|
PRIMARY_DATA_FILE ||= "#{PRIMARY_DATA_PATH}data."
|
13
13
|
XL_PRIMARY_DATA_FILE ||= "#{PRIMARY_DATA_FILE}xls"
|
14
14
|
YML_PRIMARY_DATA_FILE ||= "#{PRIMARY_DATA_FILE}yml"
|
@@ -5,6 +5,8 @@ module TestCentricity
|
|
5
5
|
attr_accessor :environ_specific_data
|
6
6
|
|
7
7
|
def self.find_environ(environ_name, source_type = :excel)
|
8
|
+
raise 'No environment specified' if environ_name.nil?
|
9
|
+
|
8
10
|
data = case source_type
|
9
11
|
when :excel
|
10
12
|
ExcelData.read_row_data(XL_PRIMARY_DATA_FILE, 'Environments', environ_name)
|
@@ -13,11 +15,27 @@ module TestCentricity
|
|
13
15
|
@generic_data ||= YAML.load_file(YML_PRIMARY_DATA_FILE)
|
14
16
|
# read environment specific test data
|
15
17
|
data_file = "#{PRIMARY_DATA_PATH}#{environ_name}_data.yml"
|
16
|
-
@environ_specific_data
|
18
|
+
@environ_specific_data = if File.exist?(data_file)
|
19
|
+
YAML.load_file(data_file)
|
20
|
+
else
|
21
|
+
{}
|
22
|
+
end
|
17
23
|
|
18
24
|
read('Environments', environ_name)
|
19
25
|
when :json
|
20
|
-
|
26
|
+
# read generic test data from data.json file
|
27
|
+
raw_data = File.read(JSON_PRIMARY_DATA_FILE)
|
28
|
+
@generic_data = JSON.parse(raw_data)
|
29
|
+
# read environment specific test data
|
30
|
+
data_file = "#{PRIMARY_DATA_PATH}#{environ_name}_data.json"
|
31
|
+
@environ_specific_data = if File.exist?(data_file)
|
32
|
+
raw_data = File.read(data_file)
|
33
|
+
JSON.parse(raw_data)
|
34
|
+
else
|
35
|
+
{}
|
36
|
+
end
|
37
|
+
|
38
|
+
read('Environments', environ_name)
|
21
39
|
end
|
22
40
|
@current = Environ.new(data)
|
23
41
|
Environ.current = @current
|
@@ -47,6 +65,9 @@ module TestCentricity
|
|
47
65
|
@session_id = Time.now.strftime('%d%H%M%S%L')
|
48
66
|
@session_time_stamp = Time.now.strftime('%Y%m%d%H%M%S')
|
49
67
|
@test_environment = ENV['TEST_ENVIRONMENT']
|
68
|
+
@a11y_standard = ENV['ACCESSIBILITY_STANDARD'] || 'best-practice'
|
69
|
+
@locale = ENV['LOCALE'] || 'en'
|
70
|
+
@language = ENV['LANGUAGE'] || 'English'
|
50
71
|
@screen_shots = []
|
51
72
|
|
52
73
|
attr_accessor :test_environment
|
@@ -111,9 +132,6 @@ module TestCentricity
|
|
111
132
|
@dns = data['DNS']
|
112
133
|
@db_username = data['DB_USERNAME']
|
113
134
|
@db_password = data['DB_PASSWORD']
|
114
|
-
@a11y_standard = ENV['ACCESSIBILITY_STANDARD'] || 'best-practice'
|
115
|
-
@locale = ENV['LOCALE'] || 'en'
|
116
|
-
@language = ENV['LANGUAGE'] || 'English'
|
117
135
|
|
118
136
|
super
|
119
137
|
end
|
@@ -365,13 +383,13 @@ module TestCentricity
|
|
365
383
|
def self.report_header
|
366
384
|
report_header = "\n<b><u>TEST ENVIRONMENT</u>:</b> #{ENV['TEST_ENVIRONMENT']}\n"\
|
367
385
|
" <b>Browser:</b>\t #{Environ.browser.capitalize}\n"
|
368
|
-
report_header = "#{report_header} <b>Device:</b>\t
|
386
|
+
report_header = "#{report_header} <b>Device:</b>\t #{Environ.device_name}\n" if Environ.device_name
|
369
387
|
report_header = "#{report_header} <b>Device OS:</b>\t #{Environ.device_os} #{Environ.device_os_version}\n" if Environ.device_os
|
370
388
|
report_header = "#{report_header} <b>Device type:</b>\t #{Environ.device_type}\n" if Environ.device_type
|
371
|
-
report_header = "#{report_header} <b>Driver:</b>\t
|
389
|
+
report_header = "#{report_header} <b>Driver:</b>\t #{Environ.driver}\n" if Environ.driver
|
372
390
|
report_header = "#{report_header} <b>Grid:</b>\t\t #{Environ.grid}\n" if Environ.grid
|
373
|
-
report_header = "#{report_header} <b>OS:</b>\t\t
|
374
|
-
report_header = "#{report_header} <b>Locale:</b>\t
|
391
|
+
report_header = "#{report_header} <b>OS:</b>\t\t #{Environ.os}\n" if Environ.os
|
392
|
+
report_header = "#{report_header} <b>Locale:</b>\t #{Environ.locale}\n" if Environ.locale
|
375
393
|
report_header = "#{report_header} <b>Language:</b>\t #{Environ.language}\n" if Environ.language
|
376
394
|
report_header = "#{report_header} <b>Country:</b>\t #{ENV['COUNTRY']}\n" if ENV['COUNTRY']
|
377
395
|
report_header = "#{report_header} <b>WCAG Accessibility Standard:</b>\t #{ENV['ACCESSIBILITY_STANDARD']}\n" if ENV['ACCESSIBILITY_STANDARD']
|
@@ -116,8 +116,8 @@ module TestCentricity
|
|
116
116
|
end
|
117
117
|
|
118
118
|
def self.enqueue_screenshot
|
119
|
-
timestamp = Time.now.strftime('%Y%m%d%H%M%S')
|
120
|
-
filename = "Screenshot-#{timestamp}"
|
119
|
+
timestamp = Time.now.strftime('%Y%m%d%H%M%S%L')
|
120
|
+
filename = "Screenshot-#{timestamp}.png"
|
121
121
|
path = File.join Dir.pwd, 'reports/screenshots/', filename
|
122
122
|
# highlight the active UI element prior to taking a screenshot
|
123
123
|
unless @active_ui_element.nil? || @mru_ui_element == @active_ui_element
|
@@ -126,14 +126,14 @@ module TestCentricity
|
|
126
126
|
end
|
127
127
|
# take screenshot
|
128
128
|
if Environ.driver == :appium
|
129
|
-
AppiumConnect.take_screenshot(
|
129
|
+
AppiumConnect.take_screenshot(path)
|
130
130
|
else
|
131
|
-
Capybara.save_screenshot
|
131
|
+
Capybara.save_screenshot path
|
132
132
|
end
|
133
133
|
# unhighlight the active UI element
|
134
134
|
@mru_ui_element.unhighlight unless @mru_ui_element.blank?
|
135
135
|
# add screenshot to queue
|
136
|
-
puts "Screenshot saved at #{path}
|
136
|
+
puts "Screenshot saved at #{path}"
|
137
137
|
screen_shot = {path: path, filename: filename}
|
138
138
|
Environ.save_screen_shot(screen_shot)
|
139
139
|
end
|
@@ -100,13 +100,12 @@ module TestCentricity
|
|
100
100
|
#
|
101
101
|
# @param element_name [Symbol] name of checkbox object (as a symbol)
|
102
102
|
# @param locator [String] CSS selector or XPath expression that uniquely identifies object
|
103
|
-
# @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions
|
104
103
|
# @example
|
105
104
|
# checkbox :remember_checkbox, "//input[@id='RememberUser']"
|
106
|
-
# checkbox :accept_terms_checkbox, 'input#accept_terms_conditions'
|
105
|
+
# checkbox :accept_terms_checkbox, 'input#accept_terms_conditions'
|
107
106
|
#
|
108
|
-
def self.checkbox(element_name, locator
|
109
|
-
|
107
|
+
def self.checkbox(element_name, locator)
|
108
|
+
define_page_element(element_name, TestCentricity::CheckBox, locator)
|
110
109
|
end
|
111
110
|
|
112
111
|
# Declare and instantiate a collection of checkboxes for this page object.
|
@@ -126,13 +125,12 @@ module TestCentricity
|
|
126
125
|
#
|
127
126
|
# @param element_name [Symbol] name of radio object (as a symbol)
|
128
127
|
# @param locator [String] CSS selector or XPath expression that uniquely identifies object
|
129
|
-
# @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions
|
130
128
|
# @example
|
131
129
|
# radio :accept_terms_radio, "//input[@id='Accept_Terms']"
|
132
|
-
# radio :decline_terms_radio, '#decline_terms_conditions'
|
130
|
+
# radio :decline_terms_radio, '#decline_terms_conditions'
|
133
131
|
#
|
134
|
-
def self.radio(element_name, locator
|
135
|
-
|
132
|
+
def self.radio(element_name, locator)
|
133
|
+
define_page_element(element_name, TestCentricity::Radio, locator)
|
136
134
|
end
|
137
135
|
|
138
136
|
# Declare and instantiate a collection of radio buttons for this page object.
|
@@ -220,13 +220,12 @@ module TestCentricity
|
|
220
220
|
#
|
221
221
|
# @param element_name [Symbol] name of checkbox object (as a symbol)
|
222
222
|
# @param locator [String] CSS selector or XPath expression that uniquely identifies object
|
223
|
-
# @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions
|
224
223
|
# @example
|
225
224
|
# checkbox :remember_checkbox, "//input[@id='RememberUser']"
|
226
|
-
# checkbox :accept_terms_checkbox, 'input#accept_terms_conditions'
|
225
|
+
# checkbox :accept_terms_checkbox, 'input#accept_terms_conditions'
|
227
226
|
#
|
228
|
-
def self.checkbox(element_name, locator
|
229
|
-
|
227
|
+
def self.checkbox(element_name, locator)
|
228
|
+
define_element(element_name, TestCentricity::CheckBox, locator)
|
230
229
|
end
|
231
230
|
|
232
231
|
# Declare and instantiate a collection of checkboxes for this page section.
|
@@ -246,13 +245,12 @@ module TestCentricity
|
|
246
245
|
#
|
247
246
|
# @param element_name [Symbol] name of radio object (as a symbol)
|
248
247
|
# @param locator [String] CSS selector or XPath expression that uniquely identifies object
|
249
|
-
# @param proxy [Symbol] Optional name (as a symbol) of proxy object to receive click actions
|
250
248
|
# @example
|
251
249
|
# radio :accept_terms_radio, "//input[@id='Accept_Terms']"
|
252
|
-
# radio :decline_terms_radio, 'input#decline_terms_conditions'
|
250
|
+
# radio :decline_terms_radio, 'input#decline_terms_conditions'
|
253
251
|
#
|
254
252
|
def self.radio(element_name, locator, proxy = nil)
|
255
|
-
|
253
|
+
define_element(element_name, TestCentricity::Radio, locator)
|
256
254
|
end
|
257
255
|
|
258
256
|
# Declare and instantiate a collection of radio buttons for this page section.
|