testcentricity_web 2.1.8.2 → 2.1.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +27 -0
- data/.rubocop.yml +41 -0
- data/.yardopts +2 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +28 -0
- data/README.md +1438 -0
- data/Rakefile +1 -0
- data/lib/devices/devices.yml +280 -0
- data/lib/testcentricity_web.rb +140 -0
- data/lib/testcentricity_web/browser_helper.rb +173 -0
- data/lib/testcentricity_web/data_objects_helper.rb +78 -0
- data/lib/testcentricity_web/drag_drop_helper.rb +15 -0
- data/lib/testcentricity_web/elements/button.rb +8 -0
- data/lib/testcentricity_web/elements/cell_button.rb +8 -0
- data/lib/testcentricity_web/elements/cell_checkbox.rb +38 -0
- data/lib/testcentricity_web/elements/cell_element.rb +62 -0
- data/lib/testcentricity_web/elements/cell_image.rb +8 -0
- data/lib/testcentricity_web/elements/cell_radio.rb +31 -0
- data/lib/testcentricity_web/elements/checkbox.rb +99 -0
- data/lib/testcentricity_web/elements/file_field.rb +45 -0
- data/lib/testcentricity_web/elements/image.rb +34 -0
- data/lib/testcentricity_web/elements/label.rb +8 -0
- data/lib/testcentricity_web/elements/link.rb +8 -0
- data/lib/testcentricity_web/elements/list.rb +54 -0
- data/lib/testcentricity_web/elements/list_button.rb +8 -0
- data/lib/testcentricity_web/elements/list_checkbox.rb +38 -0
- data/lib/testcentricity_web/elements/list_element.rb +51 -0
- data/lib/testcentricity_web/elements/list_radio.rb +31 -0
- data/lib/testcentricity_web/elements/radio.rb +73 -0
- data/lib/testcentricity_web/elements/select_list.rb +189 -0
- data/lib/testcentricity_web/elements/table.rb +473 -0
- data/lib/testcentricity_web/elements/textfield.rb +84 -0
- data/lib/testcentricity_web/environment.rb +249 -0
- data/lib/testcentricity_web/excel_helper.rb +242 -0
- data/lib/testcentricity_web/exception_queue_helper.rb +47 -0
- data/lib/testcentricity_web/page_objects_helper.rb +656 -0
- data/lib/testcentricity_web/page_sections_helper.rb +811 -0
- data/lib/testcentricity_web/siebel_open_ui_helper.rb +15 -0
- data/lib/testcentricity_web/ui_elements_helper.rb +425 -0
- data/lib/testcentricity_web/utility_helpers.rb +28 -0
- data/lib/testcentricity_web/version.rb +3 -0
- data/lib/testcentricity_web/webdriver_helper.rb +451 -0
- data/lib/testcentricity_web/world_extensions.rb +26 -0
- data/testcentricity_web.gemspec +42 -0
- metadata +52 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9ce21fa3ed070540857f13c91d4e26737fafbb4
|
4
|
+
data.tar.gz: ec4148037d084b344a7b2f01fef0c6aaf1b97169
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe011d194b633020d0d3f5745e37984c1ca46f386e4c993b469bfd21afc6f09fea98829f3fe26db0b5896d57b76f1e4d5d5a8a53be0b4396a1c42acb76cc7ebb
|
7
|
+
data.tar.gz: a391da7ab4f408f181f36e31d225e9243751de034607dea79a84cf98f8a8d4d5a2a84b6a217ab2fe3a77165beff51bbe1845e87076a1a2f8203733977f42cfd5
|
data/.gitignore
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# OSX folder stuff
|
2
|
+
.DS_Store
|
3
|
+
Thumbs.db
|
4
|
+
|
5
|
+
#IDE project files
|
6
|
+
.idea
|
7
|
+
.settings
|
8
|
+
.project
|
9
|
+
.idea/workspace.xml
|
10
|
+
.idea/.rakeTasks
|
11
|
+
*.iml
|
12
|
+
|
13
|
+
doc/*
|
14
|
+
.yardoc/*
|
15
|
+
notes.txt
|
16
|
+
coverage
|
17
|
+
.bundle
|
18
|
+
.ruby-version
|
19
|
+
.ruby-gemset
|
20
|
+
/my_templates
|
21
|
+
|
22
|
+
Gemfile.lock
|
23
|
+
|
24
|
+
|
25
|
+
.idea/testcentricity_web.iml
|
26
|
+
|
27
|
+
.idea/.rakeTasks
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# See full list of defaults here: https://github.com/bbatsov/rubocop/blob/master/config/default.yml
|
2
|
+
# To see all cops used see here: https://github.com/bbatsov/rubocop/blob/master/config/enabled.yml
|
3
|
+
|
4
|
+
Documentation:
|
5
|
+
Enabled: false
|
6
|
+
|
7
|
+
AccessorMethodName:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
TrivialAccessors:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
RedundantReturn:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Metrics/ModuleLength:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Metrics/ClassLength:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
Encoding:
|
23
|
+
EnforcedStyle: when_needed
|
24
|
+
|
25
|
+
Metrics/LineLength:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
Metrics/MethodLength:
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
Style/RegexpLiteral:
|
32
|
+
Enabled: false
|
33
|
+
|
34
|
+
Style/HashSyntax:
|
35
|
+
Enabled: false
|
36
|
+
|
37
|
+
Metrics/CyclomaticComplexity:
|
38
|
+
Enabled: false
|
39
|
+
|
40
|
+
Style/EmptyLines:
|
41
|
+
Enabled: false
|
data/.yardopts
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
TestCentricity Web (tm) Framework is Copyright (c) 2014-2017, Tony Mrozinski
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
7
|
+
|
8
|
+
1. Redistributions of source code must retain the above copyright notice,
|
9
|
+
this list of conditions, and the following disclaimer.
|
10
|
+
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright
|
12
|
+
notice, this list of conditions, and the following disclaimer in the
|
13
|
+
documentation and/or other materials provided with the distribution.
|
14
|
+
|
15
|
+
3. Neither the name of the copyright holder nor the names of its contributors
|
16
|
+
may be used to endorse or promote products derived from this software without
|
17
|
+
specific prior written permission.
|
18
|
+
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
20
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
22
|
+
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
23
|
+
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
24
|
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
25
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
26
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
27
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28
|
+
POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,1438 @@
|
|
1
|
+
# TestCentricity™ Web
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/testcentricity_web.svg)](https://badge.fury.io/rb/testcentricity_web) [![License (3-Clause BSD)](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg?style=flat-square)](http://opensource.org/licenses/BSD-3-Clause)
|
4
|
+
|
5
|
+
|
6
|
+
The TestCentricity™ Web core generic framework for desktop and mobile web site testing implements a Page Object and Data Object Model DSL for
|
7
|
+
use with Cucumber, Capybara, and Selenium-Webdriver.
|
8
|
+
|
9
|
+
The TestCentricity™ Web gem supports running automated tests against the following web test targets:
|
10
|
+
|
11
|
+
* locally hosted desktop browsers (Firefox*, Chrome, Safari, or IE)
|
12
|
+
* locally hosted emulated iOS Mobile Safari, Android, Windows Phone, or Blackberry mobile browsers (running within Firefox or Chrome)
|
13
|
+
* a "headless" browser (using Poltergeist and PhantomJS)
|
14
|
+
* mobile Safari browsers on iOS device simulators (using Appium and XCode on OS X)
|
15
|
+
* cloud hosted desktop (Firefox, Chrome, Safari, IE, or Edge) or mobile (iOS Mobile Safari or Android) web browsers using the [Browserstack](https://www.browserstack.com/list-of-browsers-and-platforms?product=automate),
|
16
|
+
[Sauce Labs](https://saucelabs.com/open-source#automated-testing-platform), [CrossBrowserTesting](https://crossbrowsertesting.com/selenium-testing), or
|
17
|
+
[TestingBot](https://testingbot.com/features) services.
|
18
|
+
|
19
|
+
|
20
|
+
**Note:** Test execution against local instances of Firefox version 48 or greater is currently not supported by the TestCentricity™ Web gem. Testing with
|
21
|
+
locally hosted instances of Firefox 48 or greater requires Marionette (aka geckodriver) and selenium-webdriver version 3.x, both of which are currently
|
22
|
+
feature incomplete and potentially unstable. More information can be found [here](https://github.com/teamcapybara/capybara/issues/1710).
|
23
|
+
|
24
|
+
|
25
|
+
## What's New
|
26
|
+
###Version 2.1.8
|
27
|
+
|
28
|
+
* Added `PageSection.verify_list_items` method for **Indexed PageSection Objects**.
|
29
|
+
|
30
|
+
###Version 2.1.7
|
31
|
+
|
32
|
+
* Updated `PageObject.populate_data_fields` and `PageSection.populate_data_fields` methods to use backspace characters to delete contents of a textfield
|
33
|
+
instead of using `clear`, which was preventing `onchange` JavaScript events from being triggered in some browsers.
|
34
|
+
|
35
|
+
###Version 2.1.5
|
36
|
+
|
37
|
+
* Added `get_min`, `get_max`, and `get_step` methods to `TextField` class.
|
38
|
+
|
39
|
+
* Updated `PageObject.verify_ui_states` and `PageSection.verify_ui_states` methods to support verification of `min`, `max`, and `step` attributes
|
40
|
+
for textfields.
|
41
|
+
|
42
|
+
###Version 2.1.4
|
43
|
+
|
44
|
+
* Added suppression of the Info Bar that displays "Chrome is being controlled by automated test software" on locally hosted instances of the Chrome browser.
|
45
|
+
|
46
|
+
|
47
|
+
###Version 2.1.3
|
48
|
+
|
49
|
+
* Added support for "tiling" or cascading multiple browser windows when the `BROWSER_TILE` and `PARALLEL` Environment Variables are set to true. For each
|
50
|
+
concurrent parallel thread being executed, the position of each browser will be offset by 100 pixels right and 100 pixels down. For parallel test execution,
|
51
|
+
use the [parallel_tests gem](https://github.com/grosser/parallel_tests) to decrease overall test execution time.
|
52
|
+
|
53
|
+
###Version 2.1.2
|
54
|
+
|
55
|
+
* Added device profiles for Microsoft Lumia 950, Blackberry Leap, Blackberry Passport, and Kindle Fire HD 10
|
56
|
+
* Added ability to set browser language support via the `LOCALE` Environment Variable for local instances of Chrome or Firefox browsers
|
57
|
+
|
58
|
+
###Version 2.1.0
|
59
|
+
|
60
|
+
* Added device profiles for iPhone 8, iPhone 8 Plus, iPhone X devices running iOS 11
|
61
|
+
* Added device profile for iPad Pro 10.5" with iOS 11
|
62
|
+
* Updated iPhone 7 and iPhone 7 Plus profiles to iOS 10
|
63
|
+
* Updated Google Pixel and Google Pixel XL profiles to Android 8
|
64
|
+
* Added device profiles for iPhone 7 (iOS 10) with Mobile Chrome browser and iPad (iOS 10) with Mobile Chrome browser
|
65
|
+
|
66
|
+
|
67
|
+
## What's Fixed
|
68
|
+
###Version 2.1.6
|
69
|
+
|
70
|
+
* Fixed bug in `TestCentricity::WebDriverConnect.set_webdriver_path` method that was failing to set the path to the appropriate chromedriver file for OS X
|
71
|
+
and Windows.
|
72
|
+
|
73
|
+
###Version 2.1.5
|
74
|
+
|
75
|
+
* Fixed Chrome and Firefox support for setting browser language via the `LOCALE` Environment Variable. This capability now works for emulated mobile
|
76
|
+
browsers hosted in a local instance of Chrome or Firefox.
|
77
|
+
|
78
|
+
###Version 2.1.0
|
79
|
+
|
80
|
+
* The `TestCentricity::WebDriverConnect.initialize_web_driver` method now sets the `Environ` object to the correct device connection states for local and
|
81
|
+
cloud hosted browsers.
|
82
|
+
* The `TestCentricity::WebDriverConnect.initialize_web_driver` method no longer calls `initialize_browser_size` when running tests against cloud hosted
|
83
|
+
mobile web browser, which was resulting in Appium throwing exceptions for unsupported method calls.
|
84
|
+
* The `TestCentricity::WebDriverConnect.set_webdriver_path` method now correctly sets the path for Chrome webDrivers when the `HOST_BROWSER` Environment
|
85
|
+
Variable is set to `chrome`. Tests against locally hosted emulated mobile web browser running on a local instance of Chrome will now work correctly.
|
86
|
+
|
87
|
+
|
88
|
+
## Installation
|
89
|
+
|
90
|
+
Add this line to your automation project's Gemfile:
|
91
|
+
|
92
|
+
gem 'testcentricity_web'
|
93
|
+
|
94
|
+
And then execute:
|
95
|
+
|
96
|
+
$ bundle
|
97
|
+
|
98
|
+
Or install it yourself as:
|
99
|
+
|
100
|
+
$ gem install testcentricity_web
|
101
|
+
|
102
|
+
|
103
|
+
## Setup
|
104
|
+
###Using Cucumber
|
105
|
+
|
106
|
+
If you are using Cucumber, you need to require the following in your *env.rb* file:
|
107
|
+
|
108
|
+
require 'capybara'
|
109
|
+
require 'capybara/cucumber'
|
110
|
+
require 'testcentricity_web'
|
111
|
+
|
112
|
+
|
113
|
+
###Using RSpec
|
114
|
+
|
115
|
+
If you are using RSpec instead, you need to require the following in your *env.rb* file:
|
116
|
+
|
117
|
+
require 'capybara'
|
118
|
+
require 'capybara/rspec'
|
119
|
+
require 'testcentricity_web'
|
120
|
+
|
121
|
+
|
122
|
+
### Using Poltergeist
|
123
|
+
|
124
|
+
If you will be running your tests on a "headless" web browser using Poltergeist and PhantomJS, you must add this line to your automation
|
125
|
+
project's Gemfile:
|
126
|
+
|
127
|
+
gem 'poltergeist'
|
128
|
+
|
129
|
+
|
130
|
+
### Using Appium
|
131
|
+
|
132
|
+
If you will be running your tests on mobile Safari browsers on simulated iOS devices using Appium and XCode Simulators, you need to require
|
133
|
+
the following in your *env.rb* file:
|
134
|
+
|
135
|
+
require 'appium_capybara'
|
136
|
+
|
137
|
+
You also need to add this line to your automation project's Gemfile:
|
138
|
+
|
139
|
+
gem 'appium_capybara'
|
140
|
+
|
141
|
+
And then execute:
|
142
|
+
|
143
|
+
$ bundle
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
## Page Objects
|
148
|
+
|
149
|
+
The **Page Object Model** is a test automation pattern that aims to create an abstraction of your web app's User Interface that can be used
|
150
|
+
in tests. A **Page Object** is an object that represents a single page in your AUT (Application Under Test). **Page Objects** encapsulate the
|
151
|
+
implementation details of a web page and expose an API that supports interaction with, and validation of the UI elements on the page.
|
152
|
+
|
153
|
+
**Page Objects** makes it easier to maintain automated tests because changes to page UI elements are updated in only one location - in the
|
154
|
+
**Page Object** class definition. By adopting a **Page Object Model**, Cucumber Feature files and step definitions are no longer required to
|
155
|
+
hold specific information about a page's UI objects, thus minimizing maintenance requirements. If any element on a page changes (URL path,
|
156
|
+
text field attributes, button captions, etc.), maintenance is performed in the **Page Object** class definition only, typically with no need
|
157
|
+
to update the affected feature file, scenarios, or step definitions.
|
158
|
+
|
159
|
+
|
160
|
+
### Defining a Page Object
|
161
|
+
|
162
|
+
Your **Page Object** class definitions should be contained within individual `.rb` files in the `features/support/pages` folder of your
|
163
|
+
test automation project. You define new **Page Objects** as shown below:
|
164
|
+
|
165
|
+
class LoginPage < TestCentricity::PageObject
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
class HomePage < TestCentricity::PageObject
|
170
|
+
end
|
171
|
+
|
172
|
+
|
173
|
+
class RegistrationPage < TestCentricity::PageObject
|
174
|
+
end
|
175
|
+
|
176
|
+
|
177
|
+
### Adding Traits to your Page Object
|
178
|
+
|
179
|
+
Web pages typically have names and URLs associated with them. Web pages also typically have a unique object or attribute that, when present,
|
180
|
+
indicates that the page's contents have fully loaded.
|
181
|
+
|
182
|
+
The `page_name` trait is registered with the **PageManager** object, which includes a `find_page` method that takes a page name as a
|
183
|
+
parameter and returns an instance of the associated **Page Object**. If you intend to use the **PageManager**, you must define a `page_name`
|
184
|
+
trait for each of the **Page Objects** to be registered.
|
185
|
+
|
186
|
+
The `page_name` trait is usually a `String` value that represents the name of the page that will be matched by the `PageManager.findpage` method.
|
187
|
+
`page_name` traits are case and white-space sensitive. For pages that may be referenced with multiple names, the `page_name` trait may also be
|
188
|
+
an `Array` of `String` values representing those page names.
|
189
|
+
|
190
|
+
A `page_url` trait should be defined if a page can be directly loaded using a URL. If you set Capybara's `app_host`, or specify a base URL
|
191
|
+
when calling the `WebDriverConnect.initialize_web_driver` method, then your `page_url` trait can be the relative URL slug that will
|
192
|
+
be appended to the base URL specified in `app_host`. Specifying a `page_url` trait is optional, as not all web pages can be directly loaded
|
193
|
+
via a URL.
|
194
|
+
|
195
|
+
A `page_locator` trait is defined if a page has a unique object or attribute that exists once the page's contents have fully loaded. The
|
196
|
+
`page_locator` trait is a CSS or Xpath expression that uniquely identifies the object or attribute. The `verify_page_exists` method waits
|
197
|
+
for the `page_locator` trait to exist.
|
198
|
+
|
199
|
+
You define your page's **Traits** as shown below:
|
200
|
+
|
201
|
+
class LoginPage < TestCentricity::PageObject
|
202
|
+
trait(:page_name) { 'Login' }
|
203
|
+
trait(:page_url) { '/sign_in' }
|
204
|
+
trait(:page_locator) { 'body.login-body' }
|
205
|
+
end
|
206
|
+
|
207
|
+
|
208
|
+
class HomePage < TestCentricity::PageObject
|
209
|
+
# this page may be referred to as 'Home' or 'Dashboard' page so page_name trait is an Array of Strings
|
210
|
+
trait(:page_name) { ['Home', 'Dashboard'] }
|
211
|
+
trait(:page_url) { '/dashboard' }
|
212
|
+
trait(:page_locator) { 'body.dashboard' }
|
213
|
+
end
|
214
|
+
|
215
|
+
|
216
|
+
class RegistrationPage < TestCentricity::PageObject
|
217
|
+
trait(:page_name) { 'Registration' }
|
218
|
+
trait(:page_url) { '/register' }
|
219
|
+
trait(:page_locator) { 'body.registration' }
|
220
|
+
end
|
221
|
+
|
222
|
+
|
223
|
+
### Adding UI Elements to your Page Object
|
224
|
+
|
225
|
+
Web pages are made up of UI elements like text fields, check boxes, combo boxes, radio buttons, tables, lists, buttons, etc.
|
226
|
+
**UI Elements** are added to your **Page Object** class definition as shown below:
|
227
|
+
|
228
|
+
class LoginPage < TestCentricity::PageObject
|
229
|
+
trait(:page_name) { 'Login' }
|
230
|
+
trait(:page_url) { '/sign_in' }
|
231
|
+
trait(:page_locator) { 'body.login-body' }
|
232
|
+
|
233
|
+
# Login page UI elements
|
234
|
+
textfield :user_id_field, 'input#userName'
|
235
|
+
textfield :password_field, 'input#password'
|
236
|
+
button :login_button, 'button#login'
|
237
|
+
checkbox :remember_checkbox, 'input#rememberUser'
|
238
|
+
label :error_message_label, 'div#statusBar.login-error'
|
239
|
+
end
|
240
|
+
|
241
|
+
|
242
|
+
class RegistrationPage < TestCentricity::PageObject
|
243
|
+
trait(:page_name) { 'Registration' }
|
244
|
+
trait(:page_url) { '/register' }
|
245
|
+
trait(:page_locator) { 'body.registration' }
|
246
|
+
|
247
|
+
# Registration page UI elements
|
248
|
+
textfields first_name_field: 'input#firstName',
|
249
|
+
last_name_field: 'input#lastName',
|
250
|
+
email_field: 'input#email',
|
251
|
+
phone_number_field: 'input#phone',
|
252
|
+
address_field: 'input#streetAddress',
|
253
|
+
city_field: 'input#city',
|
254
|
+
post_code_field: 'input#postalCode',
|
255
|
+
password_field: 'input#password',
|
256
|
+
pword_confirm_field: 'input#passwordConfirmation'
|
257
|
+
selectlists title_select: 'select#title',
|
258
|
+
gender_select: 'select#gender',
|
259
|
+
state_select: 'select#stateProvince'
|
260
|
+
checkbox :email_opt_in_check, 'input#marketingEmailsOptIn'
|
261
|
+
button :sign_up_button, 'button#registrationSignUp'
|
262
|
+
end
|
263
|
+
|
264
|
+
|
265
|
+
### Adding Methods to your Page Object
|
266
|
+
|
267
|
+
It is good practice for your Cucumber step definitions to call high level methods in your your **Page Object** instead of directly accessing
|
268
|
+
and interacting with a page object's UI elements. You can add high level methods to your **Page Object** class definition for interacting with
|
269
|
+
the UI to hide implementation details, as shown below:
|
270
|
+
|
271
|
+
class LoginPage < TestCentricity::PageObject
|
272
|
+
trait(:page_name) { 'Login' }
|
273
|
+
trait(:page_url) { '/sign_in' }
|
274
|
+
trait(:page_locator) { 'body.login-body' }
|
275
|
+
|
276
|
+
# Login page UI elements
|
277
|
+
textfield :user_id_field, 'input#userName'
|
278
|
+
textfield :password_field, 'input#password'
|
279
|
+
button :login_button, 'button#login'
|
280
|
+
checkbox :remember_checkbox, 'input#rememberUser'
|
281
|
+
label :error_message_label, 'div#statusBar.login-error'
|
282
|
+
link :forgot_password_link, 'a.forgotPassword'
|
283
|
+
|
284
|
+
# log in to web app
|
285
|
+
def login(user_id, password)
|
286
|
+
user_id_field.set(user_id)
|
287
|
+
password_field.set(password)
|
288
|
+
login_button.click
|
289
|
+
end
|
290
|
+
|
291
|
+
def remember_me(state)
|
292
|
+
remember_checkbox.set_checkbox_state(state)
|
293
|
+
end
|
294
|
+
|
295
|
+
# verify Login page default UI state
|
296
|
+
def verify_page_ui
|
297
|
+
ui = {
|
298
|
+
login_button => { :visible => true, :caption => 'LOGIN' },
|
299
|
+
user_id_field => { :visible => true, :enabled => true },
|
300
|
+
password_field => { :visible => true, :enabled => true, :value => '', :placeholder => 'Password' },
|
301
|
+
remember_checkbox => { :exists => true, :enabled => true, :checked => false },
|
302
|
+
forgot_password_link => { :visible => true, :caption => 'Forgot your password?' },
|
303
|
+
error_message_label => { :visible => false }
|
304
|
+
}
|
305
|
+
verify_ui_states(ui)
|
306
|
+
super
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
|
311
|
+
class RegistrationPage < TestCentricity::PageObject
|
312
|
+
trait(:page_name) { 'Registration' }
|
313
|
+
trait(:page_url) { '/register' }
|
314
|
+
trait(:page_locator) { 'body.registration' }
|
315
|
+
|
316
|
+
# Registration page UI elements
|
317
|
+
textfields first_name_field: 'input#firstName',
|
318
|
+
last_name_field: 'input#lastName',
|
319
|
+
email_field: 'input#email',
|
320
|
+
phone_number_field: 'input#phone',
|
321
|
+
address_field: 'input#streetAddress',
|
322
|
+
city_field: 'input#city',
|
323
|
+
post_code_field: 'input#postalCode',
|
324
|
+
password_field: 'input#password',
|
325
|
+
pword_confirm_field: 'input#passwordConfirmation'
|
326
|
+
selectlists title_select: 'select#title',
|
327
|
+
gender_select: 'select#gender',
|
328
|
+
state_select: 'select#stateProvince'
|
329
|
+
checkbox :email_opt_in_check, 'input#marketingEmailsOptIn'
|
330
|
+
button :sign_up_button, 'button#registrationSignUp'
|
331
|
+
|
332
|
+
# populate Registration page fields with profile data
|
333
|
+
def enter_profile_data(profile)
|
334
|
+
fields = { title_select => profile.title,
|
335
|
+
first_name_field => profile.first_name,
|
336
|
+
last_name_field => profile.last_name,
|
337
|
+
gender_select => profile.gender,
|
338
|
+
phone_number_field => profile.phone,
|
339
|
+
email_field => profile.email,
|
340
|
+
address_field => profile.address,
|
341
|
+
city_field => profile.city,
|
342
|
+
state_select => profile.state,
|
343
|
+
post_code_field => profile.postal_code,
|
344
|
+
password_field => profile.password,
|
345
|
+
pword_confirm_field => profile.confirm_password
|
346
|
+
}
|
347
|
+
populate_data_fields(fields)
|
348
|
+
sign_up_button.click
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
|
353
|
+
|
354
|
+
Once your **Page Objects** have been instantiated, you can call your methods as shown below:
|
355
|
+
|
356
|
+
login_page.remember_me(true)
|
357
|
+
login_page.user_id_field.set('snicklefritz', 'Pa55w0rd')
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
## PageSection Objects
|
362
|
+
|
363
|
+
A **PageSection Object** is a collection of **UI Elements** that may appear in multiple locations on a page, or on multiple pages in a web
|
364
|
+
app. It is a collection of **UI Elements** that represent a conceptual area of functionality, like a navigation bar, a search capability,
|
365
|
+
or a menu. **UI Elements** and functional behavior are confined to the scope of a **PageSection Object**.
|
366
|
+
|
367
|
+
A **PageSection Object** may contain other **PageSection Objects**.
|
368
|
+
|
369
|
+
|
370
|
+
### Defining a PageSection Object
|
371
|
+
|
372
|
+
Your **PageSection** class definitions should be contained within individual `.rb` files in the `features/support/sections` folder of
|
373
|
+
your test automation project. You define new **PageSection Objects** as shown below:
|
374
|
+
|
375
|
+
class SearchForm < TestCentricity::PageSection
|
376
|
+
end
|
377
|
+
|
378
|
+
|
379
|
+
### Adding Traits to a PageSection Object
|
380
|
+
|
381
|
+
A **PageSection Object** typically has a root node object that encapsulates a collection of **UI Elements**. The `section_locator` trait
|
382
|
+
specifies the CSS or Xpath expression that uniquely identifies that root node object.
|
383
|
+
|
384
|
+
You define your page section's **Traits** as shown below:
|
385
|
+
|
386
|
+
class SearchForm < TestCentricity::PageSection
|
387
|
+
trait(:section_locator) { 'form#gnav-search' }
|
388
|
+
trait(:section_name) { 'Search widget' }
|
389
|
+
end
|
390
|
+
|
391
|
+
|
392
|
+
### Adding UI Elements to your PageSection Object
|
393
|
+
|
394
|
+
Page sections are typically made up of UI elements like text fields, check boxes, combo boxes, radio buttons, tables, lists, buttons, etc.
|
395
|
+
**UI Elements** are added to your **PageSection** class definition as shown below:
|
396
|
+
|
397
|
+
class SearchForm < TestCentricity::PageSection
|
398
|
+
trait(:section_locator) { 'form#gnav-search' }
|
399
|
+
trait(:section_name) { 'Search widget' }
|
400
|
+
|
401
|
+
# Search Form UI elements
|
402
|
+
textfield :search_field, 'input#search-query'
|
403
|
+
button :search_button, 'button[type=submit]'
|
404
|
+
end
|
405
|
+
|
406
|
+
|
407
|
+
### Adding Methods to your PageSection Object
|
408
|
+
|
409
|
+
You can add high level methods to your **PageSection** class definition, as shown below:
|
410
|
+
|
411
|
+
class SearchForm < TestCentricity::PageSection
|
412
|
+
trait(:section_locator) { 'form#gnav-search' }
|
413
|
+
trait(:section_name) { 'Search widget' }
|
414
|
+
|
415
|
+
# Search Form UI elements
|
416
|
+
textfield :search_field, 'input#search-query'
|
417
|
+
button :search_button, 'button[type=submit]'
|
418
|
+
|
419
|
+
def search_for(value)
|
420
|
+
search_field.set(value)
|
421
|
+
search_button.click
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
|
426
|
+
### Adding PageSection Objects to your Page Object
|
427
|
+
|
428
|
+
You add a **PageSection Object** to its associated **Page Object** as shown below:
|
429
|
+
|
430
|
+
class HomePage < TestCentricity::PageObject
|
431
|
+
trait(:page_name) { 'Home' }
|
432
|
+
trait(:page_url) { '/dashboard' }
|
433
|
+
trait(:page_locator) { 'body.dashboard' }
|
434
|
+
|
435
|
+
# Home page Section Objects
|
436
|
+
section :search_form, SearchForm
|
437
|
+
end
|
438
|
+
|
439
|
+
Once your **Page Object** has been instantiated, you can call its **PageSection** methods as shown below:
|
440
|
+
|
441
|
+
home_page.search_form.search_for('ocarina')
|
442
|
+
|
443
|
+
|
444
|
+
|
445
|
+
## UI Elements
|
446
|
+
|
447
|
+
**Page Objects** and **PageSection Objects** are typically made up of **UI Element** like text fields, check boxes, combo boxes, radio buttons,
|
448
|
+
tables, lists, buttons, etc. **UI Elements** are declared and instantiated within the class definition of the **Page Object** or **PageSection
|
449
|
+
Object** in which they are contained. With TestCentricity Web, all UI elements are based on the **UIElement** class.
|
450
|
+
|
451
|
+
|
452
|
+
### Declaring and Instantiating UI Element
|
453
|
+
|
454
|
+
Single **UIElement** declarations have the following format:
|
455
|
+
|
456
|
+
elementType :element Name, locator
|
457
|
+
|
458
|
+
* The `element name` is the unique name that you will use to refer to the UI element and is specified as a symbol.
|
459
|
+
* The `locator` is the CSS or XPath attribute that uniquely and unambiguously identifies the UI element.
|
460
|
+
|
461
|
+
Multiple **UIElement** declarations for a collection of elements of the same type can be performed by passing a hash table containing the
|
462
|
+
names and locators of each individual element.
|
463
|
+
|
464
|
+
### Example UI Element Declarations
|
465
|
+
|
466
|
+
Supported **UI Element** elementTypes and their declarations have the following format:
|
467
|
+
|
468
|
+
*Single element declarations:*
|
469
|
+
|
470
|
+
class SamplePage < TestCentricity::PageObject
|
471
|
+
|
472
|
+
button :button_name, locator
|
473
|
+
textfield :field_name, locator
|
474
|
+
checkbox :checkbox_name, locator
|
475
|
+
radio :radio_button_name, locator
|
476
|
+
label :label_name, locator
|
477
|
+
link :link_name, locator
|
478
|
+
selectlist :select_name, locator
|
479
|
+
list :list_name, locator
|
480
|
+
table :table_name, locator
|
481
|
+
image :image_name, locator
|
482
|
+
filefield :filefield_name, locator
|
483
|
+
|
484
|
+
end
|
485
|
+
|
486
|
+
*Multiple element declarations:*
|
487
|
+
|
488
|
+
class SamplePage < TestCentricity::PageObject
|
489
|
+
|
490
|
+
buttons button_1_name: locator,
|
491
|
+
button_2_name: locator,
|
492
|
+
button_X_name: locator
|
493
|
+
textfields field_1_name: locator,
|
494
|
+
field_2_name: locator,
|
495
|
+
field_X_name: locator
|
496
|
+
checkboxes check_1_name: locator,
|
497
|
+
check_2_name: locator,
|
498
|
+
check_X_name: locator
|
499
|
+
radios radio_1_name: locator,
|
500
|
+
radio_X_name: locator
|
501
|
+
labels label_1_name: locator,
|
502
|
+
label_X_name: locator
|
503
|
+
links link_1_name: locator,
|
504
|
+
link_X_name: locator
|
505
|
+
selectlists selectlist_1_name: locator,
|
506
|
+
selectlist_X_name: locator
|
507
|
+
lists list_1_name: locator,
|
508
|
+
list_X_name: locator
|
509
|
+
tables table_1_name: locator,
|
510
|
+
table_X_name: locator
|
511
|
+
images image_1_name: locator,
|
512
|
+
image_X_name: locator
|
513
|
+
filefields filefield_1_name: locator,
|
514
|
+
filefield_X_name: locator
|
515
|
+
|
516
|
+
end
|
517
|
+
|
518
|
+
|
519
|
+
Refer to the Class List documentation for the **PageObject** and **PageSection** classes for details on the class methods used for declaring
|
520
|
+
and instantiating **UI Elements**. Examples of UI element declarations can be found in the ***Adding UI Elements to your Page Object*** and
|
521
|
+
***Adding UI Elements to your PageSection Object*** sections above.
|
522
|
+
|
523
|
+
|
524
|
+
### UIElement Inherited Methods
|
525
|
+
|
526
|
+
With TestCentricity, all UI elements are based on the **UIElement** class, and inherit the following methods:
|
527
|
+
|
528
|
+
**Action methods:**
|
529
|
+
|
530
|
+
element.click
|
531
|
+
element.double_click
|
532
|
+
element.right_click
|
533
|
+
element.click_at(x, y)
|
534
|
+
element.hover
|
535
|
+
element.drag_by(right_offset, down_offset)
|
536
|
+
element.drag_and_drop(target, right_offset, down_offset)
|
537
|
+
|
538
|
+
**Object state methods:**
|
539
|
+
|
540
|
+
element.exists?
|
541
|
+
element.visible?
|
542
|
+
element.hidden?
|
543
|
+
element.enabled?
|
544
|
+
element.disabled?
|
545
|
+
element.get_value
|
546
|
+
element.get_attribute(attrib)
|
547
|
+
element.get_native_attribute(attrib)
|
548
|
+
|
549
|
+
**Waiting methods:**
|
550
|
+
|
551
|
+
element.wait_until_exists(seconds)
|
552
|
+
element.wait_until_gone(seconds)
|
553
|
+
element.wait_until_visible(seconds)
|
554
|
+
element.wait_until_hidden(seconds)
|
555
|
+
element.wait_until_value_is(value, seconds)
|
556
|
+
element.wait_until_value_changes(seconds)
|
557
|
+
|
558
|
+
|
559
|
+
## Instantiating your Page Objects
|
560
|
+
|
561
|
+
Before you can call the methods in your **Page Objects** and **PageSection Objects**, you must instantiate the **Page Objects** of your
|
562
|
+
web application, as well as create instance variables which can be used when calling a **Page Objects** methods from your step definitions.
|
563
|
+
There are several ways to instantiate your **Page Objects**.
|
564
|
+
|
565
|
+
One common implementation is shown below:
|
566
|
+
|
567
|
+
module WorldPages
|
568
|
+
def login_page
|
569
|
+
@login_page ||= LoginPage.new
|
570
|
+
end
|
571
|
+
|
572
|
+
def home_page
|
573
|
+
@home_page ||= HomePage.new
|
574
|
+
end
|
575
|
+
|
576
|
+
def registration_page
|
577
|
+
@registration_page ||= RegistrationPage.new
|
578
|
+
end
|
579
|
+
|
580
|
+
def search_results_page
|
581
|
+
@search_results_page ||= SearchResultsPage.new
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
585
|
+
World(WorldPages)
|
586
|
+
|
587
|
+
The `WorldPages` module above can be defined in your `env.rb` file, or you can define it in a separate `world_pages.rb` file in the
|
588
|
+
`features/support` folder.
|
589
|
+
|
590
|
+
While this approach is effective for small web applications with only a few pages (and hence few **Page Objects**), it quickly becomes
|
591
|
+
cumbersome to manage if your web application has dozens of **Page Objects** that need to be instantiated and managed.
|
592
|
+
|
593
|
+
### Using the PageManager
|
594
|
+
|
595
|
+
The **PageManager** class provides methods for supporting the instantiation and management of **Page Objects**. In the code example below,
|
596
|
+
the `page_objects` method contains a hash table of your **Page Object** instances and their associated **Page Object** class names
|
597
|
+
to be instantiated by **PageManager**:
|
598
|
+
|
599
|
+
module WorldPages
|
600
|
+
def page_objects
|
601
|
+
{ :login_page => LoginPage,
|
602
|
+
:home_page => HomePage,
|
603
|
+
:registration_page => RegistrationPage,
|
604
|
+
:search_results_page => SearchResultsPage,
|
605
|
+
:products_grid_page => ProductsCollectionPage,
|
606
|
+
:product_detail_page => ProductDetailPage,
|
607
|
+
:shopping_basket_page => ShoppingBasketPage,
|
608
|
+
:payment_method_page => PaymentMethodPage,
|
609
|
+
:confirm_purchase_page => PurchaseConfirmationPage,
|
610
|
+
:my_account_page => MyAccountPage,
|
611
|
+
:my_order_history_page => MyOrderHistoryPage,
|
612
|
+
:my_ship_to_addresses_page => MyShipToAddressesPage,
|
613
|
+
:terms_conditions_page => TermsConditionsPage,
|
614
|
+
:privacy_policy_page => PrivacyPolicyPage,
|
615
|
+
:faqs_page => FAQsPage,
|
616
|
+
:contact_us_page => ContactUsPage
|
617
|
+
}
|
618
|
+
end
|
619
|
+
end
|
620
|
+
|
621
|
+
World(WorldPages)
|
622
|
+
|
623
|
+
The `WorldPages` module above should be defined in the `world_pages.rb` file in the `features/support` folder.
|
624
|
+
|
625
|
+
Include the code below in your `env.rb` file to ensure that your **Page Objects** are instantiated before your Cucumber scenarios are
|
626
|
+
executed:
|
627
|
+
|
628
|
+
include WorldPages
|
629
|
+
WorldPages.instantiate_page_objects
|
630
|
+
|
631
|
+
**NOTE:** If you intend to use the **PageManager**, you must define a `page_name` trait for each of the **Page Objects** to be registered.
|
632
|
+
|
633
|
+
|
634
|
+
### Leveraging the PageManager in your Cucumber tests
|
635
|
+
|
636
|
+
Many Cucumber based automated tests suites include scenarios that verify that web pages are correctly loaded, displayed, or can be
|
637
|
+
navigated to by clicking associated links. One such Cucumber navigation scenario is displayed below:
|
638
|
+
|
639
|
+
Scenario Outline: Verify Home page navigation links
|
640
|
+
Given I am on the Home page
|
641
|
+
When I click the <page> navigation link
|
642
|
+
Then I expect the <page> page to be correctly displayed
|
643
|
+
|
644
|
+
Examples:
|
645
|
+
|page |
|
646
|
+
|Registration |
|
647
|
+
|My Account |
|
648
|
+
|Terms & Conditions |
|
649
|
+
|Privacy Policy |
|
650
|
+
|FAQs |
|
651
|
+
|Contact Us |
|
652
|
+
|
653
|
+
In the above example, the step definitions associated with the 3 steps might be implemented using a page_dispatcher method using a
|
654
|
+
`case` statement to parse the `page` parameter as in the example below:
|
655
|
+
|
656
|
+
Given(/^I am on the ([^\"]*) page$/) do |page_name|
|
657
|
+
target_page = page_dispatcher(page_name)
|
658
|
+
target_page.load_page
|
659
|
+
end
|
660
|
+
|
661
|
+
When(/^I click the ([^\"]*) navigation link$/) do |link_name|
|
662
|
+
target_page = page_dispatcher(link_name)
|
663
|
+
target_page.navigate_to
|
664
|
+
end
|
665
|
+
|
666
|
+
Then(/^I expect the ([^\"]*) page to be correctly displayed$/) do |page_name|
|
667
|
+
target_page = page_dispatcher(page_name)
|
668
|
+
target_page.verify_page_exists
|
669
|
+
target_page.verify_page_ui
|
670
|
+
end
|
671
|
+
|
672
|
+
# this method takes a page name as a parameter and returns an instance of the associated Page Object
|
673
|
+
def page_dispatcher(page_name)
|
674
|
+
case page_name
|
675
|
+
when 'Registration'
|
676
|
+
page = registration_page
|
677
|
+
when 'My Account'
|
678
|
+
page = my_account_page
|
679
|
+
when 'Terms & Conditions'
|
680
|
+
page = terms_conditions_page
|
681
|
+
when 'Privacy Policy'
|
682
|
+
page = privacy_policy_page
|
683
|
+
when 'Contact Us'
|
684
|
+
page = contact_us_page
|
685
|
+
when 'FAQs'
|
686
|
+
page = faqs_page
|
687
|
+
end
|
688
|
+
raise "No page object defined for page named '#{page_name}'" unless page
|
689
|
+
page
|
690
|
+
end
|
691
|
+
|
692
|
+
|
693
|
+
While this approach may be effective for small web applications with only a few pages (and hence few **Page Objects**), it quickly becomes
|
694
|
+
cumbersome to manage if your web application has dozens of **Page Objects** that need to be managed.
|
695
|
+
|
696
|
+
The **PageManager** class provides a `find_page` method that replaces the cumbersome and difficult to maintain `case` statement used in the
|
697
|
+
above example. The **PageManager** `current_page` method allows you to set or get an instance of the currently active Page Object.
|
698
|
+
|
699
|
+
To use these **PageManager** methods, include the step definitions and code below in a `page_steps.rb` or `generic_steps.rb` file in the
|
700
|
+
`features/step_definitions` folder:
|
701
|
+
|
702
|
+
include TestCentricity
|
703
|
+
|
704
|
+
Given(/^I am on the ([^\"]*) page$/) do |page_name|
|
705
|
+
target_page = page_dispatcher(page_name)
|
706
|
+
target_page.load_page if target_page
|
707
|
+
# let PageManager store an instance of the current page object
|
708
|
+
PageManager.current_page = target_page
|
709
|
+
end
|
710
|
+
|
711
|
+
When(/^I click the ([^\"]*) navigation link$/) do |link_name|
|
712
|
+
target_page = page_dispatcher(link_name)
|
713
|
+
target_page.navigate_to if target_page
|
714
|
+
end
|
715
|
+
|
716
|
+
Then(/^I expect to see the ([^\"]*) page$/) do |page_name|
|
717
|
+
target_page = page_dispatcher(page_name)
|
718
|
+
target_page.verify_page_exists if target_page
|
719
|
+
# let PageManager store an instance of the current page object
|
720
|
+
PageManager.current_page = target_page
|
721
|
+
end
|
722
|
+
|
723
|
+
Then(/^I expect the ([^\"]*) page to be correctly displayed$/) do |page_name|
|
724
|
+
target_page = page_dispatcher(page_name)
|
725
|
+
target_page.verify_page_exists
|
726
|
+
target_page.verify_page_ui
|
727
|
+
# let PageManager store an instance of the current page object
|
728
|
+
PageManager.current_page = target_page
|
729
|
+
end
|
730
|
+
|
731
|
+
# this method takes a page name as a parameter and returns an instance of the associated Page Object
|
732
|
+
def page_dispatcher(page_name)
|
733
|
+
page = PageManager.find_page(page_name)
|
734
|
+
raise "No page object defined for page named '#{page_name}'" unless page
|
735
|
+
page
|
736
|
+
end
|
737
|
+
|
738
|
+
|
739
|
+
|
740
|
+
## Connecting to a Web Browser
|
741
|
+
|
742
|
+
The `TestCentricity::WebDriverConnect.initialize_web_driver` method configures the appropriate selenium-webdriver capabilities required to establish a
|
743
|
+
connection with a target web browser, and sets the base host URL of the web site you are running your tests against.
|
744
|
+
|
745
|
+
The `TestCentricity::WebDriverConnect.initialize_web_driver` method accepts a single optional parameter - the base host URL. Cucumber **Environment
|
746
|
+
Variables** are used to specify the target local or remote web browser, and the various webdriver capability parameters required to configure
|
747
|
+
the connection.
|
748
|
+
|
749
|
+
|
750
|
+
### Locally hosted desktop web browser
|
751
|
+
|
752
|
+
For locally hosted desktop web browsers running on macOS (OS X) or Windows platforms, the `WEB_BROWSER` Environment Variable must be set to one of the
|
753
|
+
values from the table below:
|
754
|
+
|
755
|
+
`WEB_BROWSER` | **Desktop Platform**
|
756
|
+
--------------|----------------
|
757
|
+
`firefox` | macOS (OS X) or Windows
|
758
|
+
`chrome` | macOS (OS X) or Windows
|
759
|
+
`safari` | macOS (OS X) only
|
760
|
+
`ie` | Windows only
|
761
|
+
`poltergeist` | macOS (OS X) or Windows
|
762
|
+
|
763
|
+
To set the size of a desktop browser window, you set the `BROWSER_SIZE` Environment Variable to the desired width and height in pixels as shown below:
|
764
|
+
|
765
|
+
BROWSER_SIZE=1600,1000
|
766
|
+
|
767
|
+
To maximize a desktop browser window, you set the `BROWSER_SIZE` Environment Variable to 'max' as shown below:
|
768
|
+
|
769
|
+
BROWSER_SIZE=max
|
770
|
+
|
771
|
+
|
772
|
+
### Locally hosted emulated mobile web browser
|
773
|
+
|
774
|
+
You can run your tests against mobile device browsers that are emulated within a locally hosted instance of a Firefox or Chrome desktop browser
|
775
|
+
on OS X or Windows. The specified mobile browser's user agent, CSS screen dimensions, and default screen orientation will be automatically set
|
776
|
+
within the local Firefox or Chrome browser instance. You may even specify the emulated device's screen orientation. For locally hosted emulated
|
777
|
+
mobile web browsers, the `WEB_BROWSER` Environment Variable must be set to one of the values from the table below:
|
778
|
+
|
779
|
+
`WEB_BROWSER` | `HOST_BROWSER` | **CSS Screen Dimensions** | **Default Orientation** | **OS Version**
|
780
|
+
----------------------|----------------------|-----------|----------|---------
|
781
|
+
`ipad` |`firefox` or `chrome` |1024 x 768 |landscape |iOS 10
|
782
|
+
`ipad_pro` |`firefox` or `chrome` |1366 x 1024|landscape |iOS 11
|
783
|
+
`ipad_pro_10_5` |`firefox` or `chrome` |1112 x 834 |landscape |iOS 11
|
784
|
+
`ipad_chrome` |`firefox` or `chrome` |1024 x 768 |landscape |iOS 10 - Mobile Chrome browser for iOS
|
785
|
+
`android_tablet` |`firefox` or `chrome` |1024 x 768 |landscape |Android 3.0
|
786
|
+
`kindle_fire` |`firefox` or `chrome` |1024 x 600 |landscape |
|
787
|
+
`kindle_firehd7` |`firefox` or `chrome` |800 x 480 |landscape |Fire OS 3
|
788
|
+
`kindle_firehd8` |`firefox` or `chrome` |1280 x 800 |landscape |Fire OS 5
|
789
|
+
`kindle_firehd10` |`firefox` or `chrome` |1920 x 1200 |landscape |Fire OS 5
|
790
|
+
`surface` |`firefox` or `chrome` |1366 x 768 |landscape |
|
791
|
+
`blackberry_playbook` |`firefox` or `chrome` |1024 x 600 |landscape |BlackBerry Tablet OS
|
792
|
+
`samsung_galaxy_tab` |`firefox` or `chrome` |1280 x 800 |landscape |Android 4.0.4
|
793
|
+
`google_nexus7` |`firefox` or `chrome` |960 x 600 |landscape |Android 4.4.4
|
794
|
+
`google_nexus9` |`firefox` or `chrome` |1024 x 768 |landscape |Android 5.1
|
795
|
+
`google_nexus10` |`firefox` or `chrome` |1280 x 800 |landscape |Android 5.1
|
796
|
+
`iphone` |`firefox` or `chrome` |320 x 480 |portrait |iOS 9.1
|
797
|
+
`iphone4` |`firefox` or `chrome` |320 x 480 |portrait |iOS 9.1
|
798
|
+
`iphone5` |`firefox` or `chrome` |320 x 568 |portrait |iOS 9.1
|
799
|
+
`iphone6` |`firefox` or `chrome` |375 x 667 |portrait |iOS 9.1
|
800
|
+
`iphone6_plus` |`firefox` or `chrome` |414 x 736 |portrait |iOS 9.1
|
801
|
+
`iphone7` |`firefox` or `chrome` |375 x 667 |portrait |iOS 10
|
802
|
+
`iphone7_plus` |`firefox` or `chrome` |414 x 736 |portrait |iOS 10
|
803
|
+
`iphone7_chrome` |`firefox` or `chrome` |375 x 667 |portrait |iOS 10 - Mobile Chrome browser for iOS
|
804
|
+
`iphone8` |`firefox` or `chrome` |375 x 667 |portrait |iOS 11
|
805
|
+
`iphone8_plus` |`firefox` or `chrome` |414 x 736 |portrait |iOS 11
|
806
|
+
`iphonex` |`firefox` or `chrome` |375 x 812 |portrait |iOS 11
|
807
|
+
`android_phone` |`firefox` or `chrome` |320 x 480 |portrait |Android 4
|
808
|
+
`nexus6` |`firefox` or `chrome` |411 x 731 |portrait |Android 6
|
809
|
+
`pixel` |`firefox` or `chrome` |411 x 731 |portrait |Android 8
|
810
|
+
`pixel_xl` |`firefox` or `chrome` |411 x 731 |portrait |Android 8
|
811
|
+
`samsung_galaxy_s4` |`firefox` or `chrome` |360 x 640 |portrait |Android 5.0.1
|
812
|
+
`samsung_galaxy_s5` |`firefox` or `chrome` |360 x 640 |portrait |Android 6.0.1
|
813
|
+
`samsung_galaxy_s6` |`firefox` or `chrome` |360 x 640 |portrait |Android 6.0.1
|
814
|
+
`windows_phone7` |`firefox` or `chrome` |320 x 480 |portrait |Windows Phone OS 7.5
|
815
|
+
`windows_phone8` |`firefox` or `chrome` |320 x 480 |portrait |Windows Phone OS 8.0
|
816
|
+
`lumia_950_xl` |`firefox` or `chrome` |360 x 640 |portrait |Windows Phone OS 10
|
817
|
+
`blackberry_z10` |`firefox` or `chrome` |384 x 640 |portrait |BlackBerry 10 OS
|
818
|
+
`blackberry_z30` |`firefox` or `chrome` |360 x 640 |portrait |BlackBerry 10 OS
|
819
|
+
`blackberry_leap` |`firefox` or `chrome` |360 x 640 |portrait |BlackBerry 10 OS
|
820
|
+
`blackberry_passport` |`firefox` or `chrome` |504 x 504 |square |BlackBerry 10 OS
|
821
|
+
|
822
|
+
To change the emulated device's screen orientation from the default setting, set the `ORIENTATION` Environment Variable to either `portrait` or `landscape`.
|
823
|
+
|
824
|
+
To use a local instance of the Chrome desktop browser to host the emulated mobile web browser, you must set the `HOST_BROWSER` Environment Variable
|
825
|
+
to `chrome`.
|
826
|
+
|
827
|
+
|
828
|
+
### Mobile Safari browser on iOS Simulators
|
829
|
+
|
830
|
+
You can run your mobile web tests against the mobile Safari browser on simulated iOS devices using Appium and XCode on OS X. You must install XCode, the
|
831
|
+
iOS version-specific device simulators for XCode, and Appium. You must ensure that the `appium_capybara` gem is installed and required as described in
|
832
|
+
**section 2.4 (Setup - Using Appium)** above.
|
833
|
+
|
834
|
+
Appium must be running prior to invoking Cucumber to run your features/scenarios.
|
835
|
+
|
836
|
+
Once your test environment is properly configured, the following **Environment Variables** must be set as described in the table below.
|
837
|
+
|
838
|
+
**Environment Variable** | **Description**
|
839
|
+
--------------- | ----------------
|
840
|
+
`WEB_BROWSER` | Must be set to `appium`
|
841
|
+
`APP_PLATFORM_NAME` | Must be set to `iOS`
|
842
|
+
`APP_BROWSER` | Must be set to `Safari`
|
843
|
+
`APP_VERSION` | Must be set to `10.0`, `9.3`, `9.2`, or which ever iOS version you wish to run within the XCode Simulator
|
844
|
+
`APP_DEVICE` | Set to iOS device name supported by the iOS Simulator (`iPhone 6s Plus`, `iPad Pro`, `iPad Air 2`, etc.)
|
845
|
+
`ORIENTATION` | [Optional] Set to `portrait` or `landscape`
|
846
|
+
`APP_ALLOW_POPUPS` | [Optional] Allow javascript to open new windows in Safari. Set to `true` or `false`
|
847
|
+
`APP_IGNORE_FRAUD_WARNING` | [Optional] Prevent Safari from showing a fraudulent website warning. Set to `true` or `false`
|
848
|
+
`APP_NO_RESET` | [Optional] Don't reset app state after each test. Set to `true` or `false`
|
849
|
+
`APP_INITIAL_URL` | [Optional] Initial URL, default is a local welcome page. e.g. `http://www.apple.com`
|
850
|
+
`LOCALE` | [Optional] Locale to set for the simulator. e.g. `fr_CA`
|
851
|
+
|
852
|
+
|
853
|
+
|
854
|
+
### Remotely hosted desktop and mobile web browsers
|
855
|
+
|
856
|
+
You can run your automated tests against remotely hosted desktop and mobile web browsers using the BrowserStack, CrossBrowserTesting,
|
857
|
+
Sauce Labs, or TestingBot services. If your tests are running against a web site hosted on your local computer (`localhost`), or on a
|
858
|
+
staging server inside your LAN, you must set the `TUNNELING` Environment Variable to `true`.
|
859
|
+
|
860
|
+
|
861
|
+
#### Remote desktop browsers on the BrowserStack service
|
862
|
+
|
863
|
+
For remotely hosted desktop web browsers on the BrowserStack service, the following **Environment Variables** must be set as described in
|
864
|
+
the table below. Refer to the [Browserstack-specific capabilities chart page](https://www.browserstack.com/automate/capabilities#capabilities-browserstack)
|
865
|
+
for information regarding the specific capabilities.
|
866
|
+
|
867
|
+
**Environment Variable** | **Description**
|
868
|
+
--------------- | ----------------
|
869
|
+
`WEB_BROWSER` | Must be set to `browserstack`
|
870
|
+
`BS_USERNAME` | Must be set to your BrowserStack account user name
|
871
|
+
`BS_AUTHKEY` | Must be set to your BrowserStack account access key
|
872
|
+
`BS_OS` | Must be set to `OS X` or `Windows`
|
873
|
+
`BS_OS_VERSION` | Refer to `os_version` capability in chart
|
874
|
+
`BS_BROWSER` | Refer to `browser` capability in chart
|
875
|
+
`BS_VERSION` | [Optional] Refer to `browser_version` capability in chart. If not specified, latest stable version of browser will be used.
|
876
|
+
`TUNNELING` | Must be `true` if you are testing against internal/local servers (`true` or `false`)
|
877
|
+
`RESOLUTION` | [Optional] Refer to supported screen `resolution` capability in chart
|
878
|
+
`BROWSER_SIZE` | [Optional] Specify width, height of browser window
|
879
|
+
`RECORD_VIDEO` | [Optional] Enable screen video recording during test execution (`true` or `false`)
|
880
|
+
`TIME_ZONE` | [Optional] Specify custom time zone. Refer to `browserstack.timezone` capability in chart
|
881
|
+
|
882
|
+
|
883
|
+
#### Remote mobile browsers on the BrowserStack service
|
884
|
+
|
885
|
+
For remotely hosted mobile web browsers on the BrowserStack service, the following **Environment Variables** must be set as described in
|
886
|
+
the table below. Refer to the [Browserstack-specific capabilities chart page](https://www.browserstack.com/automate/capabilities#capabilities-browserstack)
|
887
|
+
for information regarding the specific capabilities.
|
888
|
+
|
889
|
+
**Environment Variable** | **Description**
|
890
|
+
--------------- | ----------------
|
891
|
+
`WEB_BROWSER` | Must be set to `browserstack`
|
892
|
+
`BS_USERNAME` | Must be set to your BrowserStack account user name
|
893
|
+
`BS_AUTHKEY` | Must be set to your BrowserStack account access key
|
894
|
+
`BS_OS` | Must be set to `ios` or `android`
|
895
|
+
`BS_BROWSER` | Must be set to `iPhone`, `iPad`, or `android`
|
896
|
+
`BS_PLATFORM` | Must be set to `MAC` (for iOS) or `ANDROID`
|
897
|
+
`BS_DEVICE` | Refer to `device` capability in chart
|
898
|
+
`BS_REAL_MOBILE` | Set to `true` if running against a real device
|
899
|
+
`TUNNELING` | Must be `true` if you are testing against internal/local servers (`true` or `false`)
|
900
|
+
`ORIENTATION` | [Optional] Set to `portrait` or `landscape`
|
901
|
+
`RECORD_VIDEO` | [Optional] Enable screen video recording during test execution (`true` or `false`)
|
902
|
+
`TIME_ZONE` | [Optional] Specify custom time zone. Refer to `browserstack.timezone` capability in chart
|
903
|
+
|
904
|
+
|
905
|
+
|
906
|
+
#### Remote desktop browsers on the CrossBrowserTesting service
|
907
|
+
|
908
|
+
For remotely hosted desktop web browsers on the CrossBrowserTesting service, the following **Environment Variables** must be set as described in
|
909
|
+
the table below. Use the Configuration Wizard on the [Start a Selenium Test page](https://app.crossbrowsertesting.com/selenium/run) to obtain
|
910
|
+
information regarding the specific capabilities.
|
911
|
+
|
912
|
+
**Environment Variable** | **Description**
|
913
|
+
--------------- | ----------------
|
914
|
+
`WEB_BROWSER` | Must be set to `crossbrowser`
|
915
|
+
`CB_USERNAME` | Must be set to your CrossBrowserTesting account user name or email address
|
916
|
+
`CB_AUTHKEY` | Must be set to your CrossBrowserTesting account access key
|
917
|
+
`CB_OS` | Refer to `os_api_name` capability in the sample script of the Wizard
|
918
|
+
`CB_BROWSER` | Refer to `browser_api_name` capability in the sample script of the Wizard
|
919
|
+
`RESOLUTION` | [Optional] Refer to supported `screen_resolution` capability in the sample script of the Wizard
|
920
|
+
`BROWSER_SIZE` | [Optional] Specify width, height of browser window
|
921
|
+
`RECORD_VIDEO` | [Optional] Enable screen video recording during test execution (`true` or `false`)
|
922
|
+
|
923
|
+
|
924
|
+
#### Remote mobile browsers on the CrossBrowserTesting service
|
925
|
+
|
926
|
+
For remotely hosted mobile web browsers on the CrossBrowserTesting service, the following **Environment Variables** must be set as described in
|
927
|
+
the table below. Use the Configuration Wizard on the [Start a Selenium Test page](https://app.crossbrowsertesting.com/selenium/run) to obtain
|
928
|
+
information regarding the specific capabilities.
|
929
|
+
|
930
|
+
**Environment Variable** | **Description**
|
931
|
+
--------------- | ----------------
|
932
|
+
`WEB_BROWSER` | Must be set to `crossbrowser`
|
933
|
+
`CB_USERNAME` | Must be set to your CrossBrowserTesting account user name or email address
|
934
|
+
`CB_AUTHKEY` | Must be set to your CrossBrowserTesting account access key
|
935
|
+
`CB_PLATFORM` | Refer to `os_api_name` capability in the sample script of the Wizard
|
936
|
+
`CB_BROWSER` | Refer to `browser_api_name` capability in the sample script of the Wizard
|
937
|
+
`RESOLUTION` | Refer to supported `screen_resolution` capability in the sample script of the Wizard
|
938
|
+
`RECORD_VIDEO` | [Optional] Enable screen video recording during test execution (`true` or `false`)
|
939
|
+
|
940
|
+
|
941
|
+
|
942
|
+
#### Remote desktop browsers on the Sauce Labs service
|
943
|
+
|
944
|
+
For remotely hosted desktop web browsers on the Sauce Labs service, the following **Environment Variables** must be set as described in
|
945
|
+
the table below. Use the Selenium API on the [Platform Configurator page](https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/) to obtain
|
946
|
+
information regarding the specific capabilities.
|
947
|
+
|
948
|
+
**Environment Variable** | **Description**
|
949
|
+
--------------- | ----------------
|
950
|
+
`WEB_BROWSER` | Must be set to `saucelabs`
|
951
|
+
`SL_USERNAME` | Must be set to your Sauce Labs account user name or email address
|
952
|
+
`SL_AUTHKEY` | Must be set to your Sauce Labs account access key
|
953
|
+
`SL_OS` | Refer to `platform` capability in the Copy Code section of the Platform Configurator page
|
954
|
+
`SL_BROWSER` | Must be set to `chrome`, `firefox`, `safari`, `internet explorer`, or `edge`
|
955
|
+
`SL_VERSION` | Refer to `version` capability in the Copy Code section of the Platform Configurator page
|
956
|
+
`RESOLUTION` | [Optional] Refer to supported `screenResolution` capability in the Copy Code section of the Platform Configurator page
|
957
|
+
`BROWSER_SIZE `| [Optional] Specify width, height of browser window
|
958
|
+
`RECORD_VIDEO` | [Optional] Enable screen video recording during test execution (`true` or `false`)
|
959
|
+
|
960
|
+
|
961
|
+
#### Remote desktop browsers on the TestingBot service
|
962
|
+
|
963
|
+
For remotely hosted desktop web browsers on the TestingBot service, the following **Environment Variables** must be set as described in
|
964
|
+
the table below. Refer to the [TestingBot List of Available Browsers page](https://testingbot.com/support/getting-started/browsers.html) for information
|
965
|
+
regarding the specific capabilities.
|
966
|
+
|
967
|
+
**Environment Variable** | **Description**
|
968
|
+
--------------- | ----------------
|
969
|
+
`WEB_BROWSER` | Must be set to `testingbot`
|
970
|
+
`TB_USERNAME` | Must be set to your TestingBot account user name
|
971
|
+
`TB_AUTHKEY` | Must be set to your TestingBot account access key
|
972
|
+
`TB_OS` | Refer to `platform` capability in chart
|
973
|
+
`TB_BROWSER` | Refer to `browserName` capability in chart
|
974
|
+
`TB_VERSION` | Refer to `version` capability in chart
|
975
|
+
`TUNNELING` | Must be `true` if you are testing against internal/local servers (`true` or `false`)
|
976
|
+
`RESOLUTION` | [Optional] Possible values: `800x600`, `1024x768`, `1280x960`, `1280x1024`, `1600x1200`, `1920x1200`, `2560x1440`
|
977
|
+
`BROWSER_SIZE`| [Optional] Specify width, height of browser window
|
978
|
+
|
979
|
+
|
980
|
+
#### Remote mobile browsers on the TestingBot service
|
981
|
+
|
982
|
+
For remotely hosted mobile web browsers on the TestingBot service, the following **Environment Variables** must be set as described in
|
983
|
+
the table below. Refer to the [TestingBot List of Available Browsers page](https://testingbot.com/support/getting-started/browsers.html) for information
|
984
|
+
regarding the specific capabilities.
|
985
|
+
|
986
|
+
**Environment Variable** | **Description**
|
987
|
+
--------------- | ----------------
|
988
|
+
`WEB_BROWSER` | Must be set to `testingbot`
|
989
|
+
`TB_USERNAME` | Must be set to your TestingBot account user name
|
990
|
+
`TB_AUTHKEY` | Must be set to your TestingBot account access key
|
991
|
+
`TB_OS` | Must be set to `MAC` (for iOS) or `ANDROID`
|
992
|
+
`TB_BROWSER` | Must be set to `safari` (for iOS) or `browser` (for Android)
|
993
|
+
`TB_VERSION` | Refer to `version` capability in chart
|
994
|
+
`TB_PLATFORM` | Must be set to `iOS` or `ANDROID`
|
995
|
+
`TB_DEVICE` | Refer to `deviceName` capability in chart
|
996
|
+
`TUNNELING` | Must be `true` if you are testing against internal/local servers (`true` or `false`)
|
997
|
+
`ORIENTATION` | [Optional] Set to `portrait` or `landscape`
|
998
|
+
|
999
|
+
|
1000
|
+
### Using Browser specific Profiles in cucumber.yml
|
1001
|
+
|
1002
|
+
While you can set **Environment Variables** in the command line when invoking Cucumber, a preferred method of specifying and managing
|
1003
|
+
target web browsers is to create browser specific **Profiles** that set the appropriate **Environment Variables** for each target browser
|
1004
|
+
in your `cucumber.yml` file.
|
1005
|
+
|
1006
|
+
Below is a list of Cucumber **Profiles** for supported locally and remotely hosted desktop and mobile web browsers (put these in in your
|
1007
|
+
`cucumber.yml` file). Before you can use the BrowserStack, CrossBrowserTesting, Sauce Labs, or TestingBot services, you will need to
|
1008
|
+
replace the *INSERT USER NAME HERE* and *INSERT PASSWORD HERE* placeholder text with your user account and authorization code for the cloud
|
1009
|
+
service(s) that you intend to connect with.
|
1010
|
+
|
1011
|
+
|
1012
|
+
<% desktop = "--tags ~@wip --tags ~@failing --tags @desktop --require features BROWSER_SIZE=1600,1000" %>
|
1013
|
+
<% mobile = "--tags ~@wip --tags ~@failing --tags @mobile --require features" %>
|
1014
|
+
|
1015
|
+
#==============
|
1016
|
+
# profiles for locally hosted desktop web browsers
|
1017
|
+
#==============
|
1018
|
+
|
1019
|
+
firefox: WEB_BROWSER=firefox <%= desktop %>
|
1020
|
+
safari: WEB_BROWSER=safari <%= desktop %>
|
1021
|
+
chrome: WEB_BROWSER=chrome <%= desktop %>
|
1022
|
+
ie: WEB_BROWSER=ie <%= desktop %>
|
1023
|
+
headless: WEB_BROWSER=poltergeist <%= desktop %>
|
1024
|
+
|
1025
|
+
#==============
|
1026
|
+
# profiles for locally hosted mobile web browsers (emulated locally in Firefox browser)
|
1027
|
+
# NOTE: to host emulated mobile browsers in Chrome set the HOST_BROWSER=chrome
|
1028
|
+
#==============
|
1029
|
+
|
1030
|
+
ipad: WEB_BROWSER=ipad HOST_BROWSER=firefox <%= mobile %>
|
1031
|
+
ipad_pro: WEB_BROWSER=ipad_pro HOST_BROWSER=firefox <%= mobile %>
|
1032
|
+
ipad_pro_10_5: WEB_BROWSER=ipad_pro_10_5 HOST_BROWSER=firefox <%= mobile %>
|
1033
|
+
ipad_chrome: WEB_BROWSER=ipad_chrome HOST_BROWSER=firefox <%= mobile %>
|
1034
|
+
iphone: WEB_BROWSER=iphone HOST_BROWSER=firefox <%= mobile %>
|
1035
|
+
iphone4: WEB_BROWSER=iphone4 HOST_BROWSER=firefox <%= mobile %>
|
1036
|
+
iphone5: WEB_BROWSER=iphone5 HOST_BROWSER=firefox <%= mobile %>
|
1037
|
+
iphone6: WEB_BROWSER=iphone6 HOST_BROWSER=firefox <%= mobile %>
|
1038
|
+
iphone6_plus: WEB_BROWSER=iphone6_plus HOST_BROWSER=firefox <%= mobile %>
|
1039
|
+
iphone7: WEB_BROWSER=iphone7 HOST_BROWSER=firefox <%= mobile %>
|
1040
|
+
iphone7_plus: WEB_BROWSER=iphone7_plus HOST_BROWSER=firefox <%= mobile %>
|
1041
|
+
iphone7_chrome: WEB_BROWSER=iphone7_chrome HOST_BROWSER=firefox <%= mobile %>
|
1042
|
+
iphone8: WEB_BROWSER=iphone8 HOST_BROWSER=firefox <%= mobile %>
|
1043
|
+
iphone8_plus: WEB_BROWSER=iphone8_plus HOST_BROWSER=firefox <%= mobile %>
|
1044
|
+
iphoneX: WEB_BROWSER=iphonex HOST_BROWSER=firefox <%= mobile %>
|
1045
|
+
android_phone: WEB_BROWSER=android_phone HOST_BROWSER=firefox <%= mobile %>
|
1046
|
+
nexus6: WEB_BROWSER=nexus6 HOST_BROWSER=firefox <%= mobile %>
|
1047
|
+
android_tablet: WEB_BROWSER=android_tablet HOST_BROWSER=firefox <%= mobile %>
|
1048
|
+
kindle_fire: WEB_BROWSER=kindle_fire HOST_BROWSER=firefox <%= mobile %>
|
1049
|
+
kindle_firehd7: WEB_BROWSER=kindle_firehd7 HOST_BROWSER=firefox <%= mobile %>
|
1050
|
+
kindle_firehd8: WEB_BROWSER=kindle_firehd8 HOST_BROWSER=firefox <%= mobile %>
|
1051
|
+
kindle_firehd10: WEB_BROWSER=kindle_firehd10 HOST_BROWSER=firefox <%= tablet %>
|
1052
|
+
surface: WEB_BROWSER=surface HOST_BROWSER=firefox <%= mobile %>
|
1053
|
+
blackberry_playbook: WEB_BROWSER=blackberry_playbook HOST_BROWSER=firefox <%= mobile %>
|
1054
|
+
samsung_galaxy_tab: WEB_BROWSER=samsung_galaxy_tab HOST_BROWSER=firefox <%= mobile %>
|
1055
|
+
google_nexus7: WEB_BROWSER=google_nexus7 HOST_BROWSER=firefox <%= mobile %>
|
1056
|
+
google_nexus9: WEB_BROWSER=google_nexus9 HOST_BROWSER=firefox <%= mobile %>
|
1057
|
+
google_nexus10: WEB_BROWSER=google_nexus10 HOST_BROWSER=firefox <%= mobile %>
|
1058
|
+
samsung_galaxy_s4: WEB_BROWSER=samsung_galaxy_s4 HOST_BROWSER=firefox <%= mobile %>
|
1059
|
+
samsung_galaxy_s5: WEB_BROWSER=samsung_galaxy_s5 HOST_BROWSER=firefox <%= mobile %>
|
1060
|
+
samsung_galaxy_s6: WEB_BROWSER=samsung_galaxy_s6 HOST_BROWSER=firefox <%= mobile %>
|
1061
|
+
pixel: WEB_BROWSER=pixel HOST_BROWSER=firefox <%= mobile %>
|
1062
|
+
pixel_xl: WEB_BROWSER=pixel_xl HOST_BROWSER=firefox <%= mobile %>
|
1063
|
+
windows_phone7: WEB_BROWSER=windows_phone7 HOST_BROWSER=firefox <%= mobile %>
|
1064
|
+
windows_phone8: WEB_BROWSER=windows_phone8 HOST_BROWSER=firefox <%= mobile %>
|
1065
|
+
lumia_950_xl: WEB_BROWSER=lumia_950_xl HOST_BROWSER=firefox <%= mobile %>
|
1066
|
+
blackberry_z10: WEB_BROWSER=blackberry_z10 HOST_BROWSER=firefox <%= mobile %>
|
1067
|
+
blackberry_z30: WEB_BROWSER=blackberry_z30 HOST_BROWSER=firefox <%= mobile %>
|
1068
|
+
blackberry_leap: WEB_BROWSER=blackberry_leap HOST_BROWSER=firefox <%= mobile %>
|
1069
|
+
blackberry_passport: WEB_BROWSER=blackberry_passport HOST_BROWSER=firefox <%= mobile %>
|
1070
|
+
|
1071
|
+
|
1072
|
+
#==============
|
1073
|
+
# profiles for mobile device screen orientation
|
1074
|
+
#==============
|
1075
|
+
|
1076
|
+
portrait: ORIENTATION=portrait
|
1077
|
+
landscape: ORIENTATION=landscape
|
1078
|
+
|
1079
|
+
|
1080
|
+
#==============
|
1081
|
+
# profiles for mobile Safari web browsers hosted within XCode iOS simulator
|
1082
|
+
# NOTE: Requires installation of XCode, iOS version specific target simulators, Appium, and the appium_capybara gem
|
1083
|
+
#==============
|
1084
|
+
|
1085
|
+
appium_ios: WEB_BROWSER=appium APP_PLATFORM_NAME="iOS" APP_BROWSER="Safari" <%= mobile %>
|
1086
|
+
app_ios_93: --profile appium_ios APP_VERSION="9.3"
|
1087
|
+
app_ios_92: --profile appium_ios APP_VERSION="9.2"
|
1088
|
+
ipad_retina_93_sim: --profile app_ios_93 APP_DEVICE="iPad Retina"
|
1089
|
+
ipad_pro_93_sim: --profile app_ios_93 APP_DEVICE="iPad Pro"
|
1090
|
+
ipad_air_93_sim: --profile app_ios_93 APP_DEVICE="iPad Air"
|
1091
|
+
ipad_air2_93_sim: --profile app_ios_93 APP_DEVICE="iPad Air 2"
|
1092
|
+
ipad_2_93_sim: --profile app_ios_93 APP_DEVICE="iPad 2"
|
1093
|
+
iphone_6s_plus_93_sim: --profile app_ios_93 APP_DEVICE="iPhone 6s Plus"
|
1094
|
+
iphone_6s_93_sim: --profile app_ios_93 APP_DEVICE="iPhone 6s"
|
1095
|
+
iphone_5s_93_sim: --profile app_ios_93 APP_DEVICE="iPhone 5s"
|
1096
|
+
iphone_4s_93_sim: --profile app_ios_93 APP_DEVICE="iPhone 4s"
|
1097
|
+
|
1098
|
+
|
1099
|
+
#==============
|
1100
|
+
# profiles for remotely hosted web browsers on the BrowserStack service
|
1101
|
+
#==============
|
1102
|
+
|
1103
|
+
browserstack: WEB_BROWSER=browserstack BS_USERNAME=<INSERT USER NAME HERE> BS_AUTHKEY=<INSERT PASSWORD HERE>
|
1104
|
+
bs_desktop: --profile browserstack <%= desktop %> RESOLUTION="1920x1080"
|
1105
|
+
bs_mobile: --profile browserstack <%= mobile %>
|
1106
|
+
|
1107
|
+
# BrowserStack OS X desktop browser profiles
|
1108
|
+
bs_macos_sierra: --profile bs_desktop BS_OS="OS X" BS_OS_VERSION="Sierra"
|
1109
|
+
bs_ff_sierra: --profile bs_macos_sierra BS_BROWSER="Firefox"
|
1110
|
+
bs_chrome_sierra: --profile bs_macos_sierra BS_BROWSER="Chrome"
|
1111
|
+
bs_safari_sierra: --profile bs_macos_sierra BS_BROWSER="Safari"
|
1112
|
+
|
1113
|
+
bs_osx_el_capitan: --profile bs_desktop BS_OS="OS X" BS_OS_VERSION="El Capitan"
|
1114
|
+
bs_ff_el_cap: --profile bs_osx_el_capitan BS_BROWSER="Firefox"
|
1115
|
+
bs_chrome_el_cap: --profile bs_osx_el_capitan BS_BROWSER="Chrome"
|
1116
|
+
bs_safari_el_cap: --profile bs_osx_el_capitan BS_BROWSER="Safari"
|
1117
|
+
|
1118
|
+
bs_osx_yosemite: --profile bs_desktop BS_OS="OS X" BS_OS_VERSION="Yosemite"
|
1119
|
+
bs_ff_yos: --profile bs_osx_yosemite BS_BROWSER="Firefox"
|
1120
|
+
bs_chrome_yos: --profile bs_osx_yosemite BS_BROWSER="Chrome"
|
1121
|
+
bs_safari_yos: --profile bs_osx_yosemite BS_BROWSER="Safari"
|
1122
|
+
|
1123
|
+
bs_osx_mavericks: --profile bs_desktop BS_OS="OS X" BS_OS_VERSION="Mavericks"
|
1124
|
+
bs_ff_mav: --profile bs_osx_mavericks BS_BROWSER="Firefox"
|
1125
|
+
bs_chrome_mav: --profile bs_osx_mavericks BS_BROWSER="Chrome"
|
1126
|
+
bs_safari_mav: --profile bs_osx_mavericks BS_BROWSER="Safari"
|
1127
|
+
|
1128
|
+
# BrowserStack Windows desktop browser profiles
|
1129
|
+
bs_win7: --profile bs_desktop BS_OS="Windows" BS_OS_VERSION="7"
|
1130
|
+
bs_win8: --profile bs_desktop BS_OS="Windows" BS_OS_VERSION="8.1"
|
1131
|
+
bs_win10: --profile bs_desktop BS_OS="Windows" BS_OS_VERSION="10"
|
1132
|
+
bs_ff_win7: --profile bs_win7 BS_BROWSER="Firefox"
|
1133
|
+
bs_ff_win8: --profile bs_win8 BS_BROWSER="Firefox"
|
1134
|
+
bs_ff_win10: --profile bs_win10 BS_BROWSER="Firefox"
|
1135
|
+
bs_chrome_win7: --profile bs_win7 BS_BROWSER="Chrome"
|
1136
|
+
bs_chrome_win8: --profile bs_win8 BS_BROWSER="Chrome"
|
1137
|
+
bs_chrome_win10: --profile bs_win10 BS_BROWSER="Chrome"
|
1138
|
+
|
1139
|
+
bs_ie_win7: --profile bs_win7 BS_BROWSER="IE"
|
1140
|
+
bs_ie11_win7: --profile bs_ie_win7 BS_VERSION="11.0"
|
1141
|
+
bs_ie10_win7: --profile bs_ie_win7 BS_VERSION="10.0"
|
1142
|
+
bs_ie9_win7: --profile bs_ie_win7 BS_VERSION="9.0"
|
1143
|
+
bs_ie11_win8: --profile bs_win8 BS_BROWSER="IE" BS_VERSION="11.0"
|
1144
|
+
bs_ie10_win8: --profile bs_desktop BS_OS="Windows" BS_OS_VERSION="8.0" BS_BROWSER="IE" BS_VERSION="10.0"
|
1145
|
+
bs_ie11_win10: --profile bs_win10 BS_BROWSER="IE" BS_VERSION="11.0"
|
1146
|
+
bs_edge_win10: --profile bs_win10 BS_BROWSER="Edge" BS_VERSION="13.0"
|
1147
|
+
|
1148
|
+
# BrowserStack iOS mobile browser profiles
|
1149
|
+
bs_iphone: --profile bs_mobile BS_PLATFORM=MAC BS_OS=ios BS_BROWSER=iPhone
|
1150
|
+
bs_iphone6s_plus: --profile bs_iphone BS_DEVICE="iPhone 6S Plus"
|
1151
|
+
bs_iphone6s: --profile bs_iphone BS_DEVICE="iPhone 6S"
|
1152
|
+
bs_iphone6_plus: --profile bs_iphone BS_DEVICE="iPhone 6 Plus"
|
1153
|
+
bs_iphone6: --profile bs_iphone BS_DEVICE="iPhone 6"
|
1154
|
+
bs_iphone5s: --profile bs_iphone BS_DEVICE="iPhone 5S"
|
1155
|
+
bs_iphone4s: --profile bs_iphone BS_DEVICE="iPhone 4S (6.0)"
|
1156
|
+
bs_ipad: --profile bs_mobile BS_PLATFORM=MAC BS_BROWSER=iPad
|
1157
|
+
bs_ipad_pro: --profile bs_ipad BS_DEVICE="iPad Pro"
|
1158
|
+
bs_ipad_air2: --profile bs_ipad BS_DEVICE="iPad Air 2"
|
1159
|
+
bs_ipad_air: --profile bs_ipad BS_DEVICE="iPad Air"
|
1160
|
+
bs_ipad_mini: --profile bs_ipad BS_DEVICE="iPad Mini 4"
|
1161
|
+
|
1162
|
+
# BrowserStack iOS real device mobile browser profiles
|
1163
|
+
bs_iphone_device: --profile bs_mobile BS_BROWSER=iPhone BS_OS=ios BS_REAL_MOBILE="true"
|
1164
|
+
bs_iphone7_plus: --profile bs_iphone_device BS_DEVICE="iPhone 7 Plus"
|
1165
|
+
bs_iphone7: --profile bs_iphone_device BS_DEVICE="iPhone 7"
|
1166
|
+
|
1167
|
+
# BrowserStack Android mobile browser profiles
|
1168
|
+
bs_android: --profile bs_mobile BS_PLATFORM=ANDROID BS_BROWSER=android BS_OS=android
|
1169
|
+
bs_galaxy_s5: --profile bs_android BS_DEVICE="Samsung Galaxy S5"
|
1170
|
+
bs_kindle_fire_hd89: --profile bs_android BS_DEVICE="Amazon Kindle Fire HD 8.9"
|
1171
|
+
bs_kindle_fire_hdx7: --profile bs_android BS_DEVICE="Amazon Kindle Fire HDX 7"
|
1172
|
+
bs_kindle_fire2: --profile bs_android BS_DEVICE="Amazon Kindle Fire 2"
|
1173
|
+
bs_nexus7: --profile bs_android BS_DEVICE="Google Nexus 7"
|
1174
|
+
bs_nexus5: --profile bs_android BS_DEVICE="Google Nexus 5"
|
1175
|
+
bs_moto_razr: --profile bs_android BS_DEVICE="Motorola Razr"
|
1176
|
+
bs_sony_xperia: --profile bs_android BS_DEVICE="Sony Xperia Tipo"
|
1177
|
+
|
1178
|
+
# BrowserStack Android real device mobile browser profiles
|
1179
|
+
bs_android_device: --profile bs_mobile BS_BROWSER=android BS_OS=android BS_REAL_MOBILE="true"
|
1180
|
+
bs_google_pixel8: --profile bs_android_device BS_DEVICE="Google Pixel" BS_OS_VERSION="8.0"
|
1181
|
+
bs_google_pixel71: --profile bs_android_device BS_DEVICE="Google Pixel" BS_OS_VERSION="7.1"
|
1182
|
+
bs_nexus9: --profile bs_android_device BS_DEVICE="Google Nexus 9"
|
1183
|
+
bs_nexus6: --profile bs_android_device BS_DEVICE="Google Nexus 6"
|
1184
|
+
bs_galaxy_s7: --profile bs_android_device BS_DEVICE="Samsung Galaxy S7"
|
1185
|
+
bs_galaxy_s6: --profile bs_android_device BS_DEVICE="Samsung Galaxy S6"
|
1186
|
+
bs_galaxy_note4: --profile bs_android_device BS_DEVICE="Samsung Galaxy Note 4"
|
1187
|
+
|
1188
|
+
|
1189
|
+
#==============
|
1190
|
+
# profiles for remotely hosted web browsers on the CrossBrowserTesting service
|
1191
|
+
#==============
|
1192
|
+
|
1193
|
+
crossbrowser: WEB_BROWSER=crossbrowser CB_USERNAME=<INSERT USER NAME HERE> CB_AUTHKEY=<INSERT PASSWORD HERE>
|
1194
|
+
cb_desktop: --profile crossbrowser <%= desktop %>
|
1195
|
+
cb_mobile: --profile crossbrowser <%= mobile %>
|
1196
|
+
|
1197
|
+
# CrossBrowserTesting OS X desktop browser profiles
|
1198
|
+
cb_osx: --profile cb_desktop RESOLUTION="1920x1200"
|
1199
|
+
cb_macos_sierra: --profile cb_osx CB_OS="Mac10.12"
|
1200
|
+
cb_chrome_sierra: --profile cb_macos_sierra CB_BROWSER="Chrome53x64"
|
1201
|
+
cb_safari_sierra: --profile cb_macos_sierra CB_BROWSER="Safari10"
|
1202
|
+
|
1203
|
+
cb_osx_el_capitan: --profile cb_osx CB_OS="Mac10.11"
|
1204
|
+
cb_ff_el_cap: --profile cb_osx_el_capitan CB_BROWSER="FF46"
|
1205
|
+
cb_chrome_el_cap: --profile cb_osx_el_capitan CB_BROWSER="Chrome48x64"
|
1206
|
+
cb_safari_el_cap: --profile cb_osx_el_capitan CB_BROWSER="Safari9"
|
1207
|
+
|
1208
|
+
cb_osx_yosemite: --profile cb_osx CB_OS="Mac10.10"
|
1209
|
+
cb_ff_yos: --profile cb_osx_yosemite CB_BROWSER="FF46"
|
1210
|
+
cb_chrome_yos: --profile cb_osx_yosemite CB_BROWSER="Chrome48x64"
|
1211
|
+
cb_safari_yos: --profile cb_osx_yosemite CB_BROWSER="Safari8"
|
1212
|
+
|
1213
|
+
cb_osx_mavericks: --profile cb_osx CB_OS="Mac10.9"
|
1214
|
+
cb_ff_mav: --profile cb_osx_mavericks CB_BROWSER="FF46"
|
1215
|
+
cb_chrome_mav: --profile cb_osx_mavericks CB_BROWSER="Chrome48x64"
|
1216
|
+
cb_safari_mav: --profile cb_osx_mavericks CB_BROWSER="Safari7"
|
1217
|
+
|
1218
|
+
# CrossBrowserTesting Windows desktop browser profiles
|
1219
|
+
cb_win: --profile cb_desktop RESOLUTION="1920x1080"
|
1220
|
+
cb_win7: --profile cb_win CB_OS="Win7x64-C1"
|
1221
|
+
cb_win8: --profile cb_win CB_OS="Win8"
|
1222
|
+
cb_win10: --profile cb_win CB_OS="Win10"
|
1223
|
+
cb_ff_win7: --profile cb_win7 CB_BROWSER="FF46"
|
1224
|
+
cb_ff_win8: --profile cb_win8 CB_BROWSER="FF46"
|
1225
|
+
cb_ff_win10: --profile cb_win10 CB_BROWSER="FF46"
|
1226
|
+
cb_chrome_win7: --profile cb_win7 CB_BROWSER="Chrome48x64"
|
1227
|
+
cb_chrome_win8: --profile cb_win8 CB_BROWSER="Chrome48x64"
|
1228
|
+
cb_chrome_win10: --profile cb_win10 CB_BROWSER="Chrome48x64"
|
1229
|
+
cb_edge_win10: --profile cb_win10 CB_BROWSER="Edge20"
|
1230
|
+
|
1231
|
+
cb_ie11_win7: --profile cb_win7 CB_BROWSER="IE11"
|
1232
|
+
cb_ie10_win7: --profile cb_win7 CB_BROWSER="IE10"
|
1233
|
+
cb_ie9_win7: --profile cb_win7 CB_BROWSER="IE9"
|
1234
|
+
cb_ie11_win8: --profile cb_win8 CB_BROWSER="IE11"
|
1235
|
+
cb_ie10_win8: --profile cb_win8 CB_BROWSER="IE10"
|
1236
|
+
cb_ie11_win10: --profile cb_win10 CB_BROWSER="IE11"
|
1237
|
+
|
1238
|
+
# CrossBrowserTesting iOS mobile browser profiles
|
1239
|
+
cb_iphone6s_plus: --profile cb_mobile CB_PLATFORM="iPhone6sPlus-iOS9sim" CB_BROWSER="MblSafari9.0" RESOLUTION="1242x2208"
|
1240
|
+
cb_iphone6s: --profile cb_mobile CB_PLATFORM="iPhone6s-iOS9sim" CB_BROWSER="MblSafari9.0" RESOLUTION="750x1334"
|
1241
|
+
cb_iphone6_plus: --profile cb_mobile CB_PLATFORM="iPhone6Plus-iOS8sim" CB_BROWSER="MblSafari8.0" RESOLUTION="1242x2208"
|
1242
|
+
cb_iphone6: --profile cb_mobile CB_PLATFORM="iPhone6-iOS8sim" CB_BROWSER="MblSafari8.0" RESOLUTION="750x1334"
|
1243
|
+
cb_iphone5s: --profile cb_mobile CB_PLATFORM="iPhone5s-iOS7sim" CB_BROWSER="MblSafari7.0" RESOLUTION="640x1136"
|
1244
|
+
cb_ipad_pro: --profile cb_mobile CB_PLATFORM="iPadPro-iOS9Sim" CB_BROWSER="MblSafari9.0" RESOLUTION="2732x2048"
|
1245
|
+
cb_ipad_air2: --profile cb_mobile CB_PLATFORM="iPadAir2-iOS9Sim" CB_BROWSER="MblSafari9.0" RESOLUTION="2048x1536"
|
1246
|
+
cb_ipad_air: --profile cb_mobile CB_PLATFORM="iPadAir-iOS8Sim" CB_BROWSER="MblSafari8.0" RESOLUTION="2048x1536"
|
1247
|
+
cb_ipad_mini: --profile cb_mobile CB_PLATFORM="iPadMiniRetina-iOS7Sim" CB_BROWSER="MblSafari7.0" RESOLUTION="2048x1536"
|
1248
|
+
|
1249
|
+
# CrossBrowserTesting Android mobile browser profiles
|
1250
|
+
cb_nexus7: --profile cb_mobile CB_PLATFORM="Nexus7-And42" CB_BROWSER="MblChrome37" RESOLUTION="800x1280"
|
1251
|
+
cb_galaxy_tab2: --profile cb_mobile CB_PLATFORM="GalaxyTab2-And41" CB_BROWSER="MblChrome38" RESOLUTION="1280x800"
|
1252
|
+
cb_galaxy_s5: --profile cb_mobile CB_PLATFORM="GalaxyS5-And44" CB_BROWSER="MblChrome35" RESOLUTION="1080x1920"
|
1253
|
+
cb_galaxy_s4: --profile cb_mobile CB_PLATFORM="GalaxyS4-And42" CB_BROWSER="MblChrome33" RESOLUTION="1080x1920"
|
1254
|
+
|
1255
|
+
|
1256
|
+
#==============
|
1257
|
+
# profiles for remotely hosted web browsers on the SauceLabs service
|
1258
|
+
#==============
|
1259
|
+
|
1260
|
+
saucelabs: WEB_BROWSER=saucelabs SL_USERNAME=<INSERT USER NAME HERE> SL_AUTHKEY=<INSERT PASSWORD HERE>
|
1261
|
+
sl_desktop: --profile saucelabs <%= desktop %>
|
1262
|
+
|
1263
|
+
# SauceLabs OS X desktop browser profiles
|
1264
|
+
sl_osx_sierra: --profile sl_desktop SL_OS="macOS 10.12"
|
1265
|
+
sl_ff_sierra: --profile sl_osx_sierra SL_BROWSER="firefox"
|
1266
|
+
sl_chrome_sierra: --profile sl_osx_sierra SL_BROWSER="chrome"
|
1267
|
+
sl_safari_sierra: --profile sl_osx_sierra SL_BROWSER="safari"
|
1268
|
+
|
1269
|
+
sl_osx_el_capitan: --profile sl_desktop SL_OS="OS X 10.11"
|
1270
|
+
sl_ff_el_cap: --profile sl_osx_el_capitan SL_BROWSER="firefox"
|
1271
|
+
sl_chrome_el_cap: --profile sl_osx_el_capitan SL_BROWSER="chrome"
|
1272
|
+
sl_safari_el_cap: --profile sl_osx_el_capitan SL_BROWSER="safari"
|
1273
|
+
|
1274
|
+
sl_osx_yosemite: --profile sl_desktop SL_OS="OS X 10.10" RESOLUTION="1920x1200"
|
1275
|
+
sl_ff_yos: --profile sl_osx_yosemite SL_BROWSER="firefox"
|
1276
|
+
sl_chrome_yos: --profile sl_osx_yosemite SL_BROWSER="chrome"
|
1277
|
+
sl_safari_yos: --profile sl_osx_yosemite SL_BROWSER="safari"
|
1278
|
+
|
1279
|
+
sl_osx_mavericks: --profile sl_desktop SL_OS="OS X 10.9" RESOLUTION="1920x1200"
|
1280
|
+
sl_ff_mav: --profile sl_osx_mavericks SL_BROWSER="firefox"
|
1281
|
+
sl_chrome_mav: --profile sl_osx_mavericks SL_BROWSER="chrome"
|
1282
|
+
sl_safari_mav: --profile sl_osx_mavericks SL_BROWSER="safari"
|
1283
|
+
|
1284
|
+
# SauceLabs Windows desktop browser profiles
|
1285
|
+
sl_win7: --profile sl_desktop SL_OS="Windows 7" RESOLUTION="1920x1200"
|
1286
|
+
sl_win8: --profile sl_desktop SL_OS="Windows 8.1" RESOLUTION="1280x1024"
|
1287
|
+
sl_win10: --profile sl_desktop SL_OS="Windows 10" RESOLUTION="1280x1024"
|
1288
|
+
sl_ff_win7: --profile sl_win7 SL_BROWSER="firefox"
|
1289
|
+
sl_ff_win8: --profile sl_win8 SL_BROWSER="firefox"
|
1290
|
+
sl_ff_win10: --profile sl_win10 SL_BROWSER="firefox"
|
1291
|
+
sl_chrome_win7: --profile sl_win7 SL_BROWSER="chrome"
|
1292
|
+
sl_chrome_win8: --profile sl_win8 SL_BROWSER="chrome"
|
1293
|
+
sl_chrome_win10: --profile sl_win10 SL_BROWSER="chrome"
|
1294
|
+
|
1295
|
+
sl_ie11_win7: --profile sl_win7 SL_BROWSER="internet explorer" SL_VERSION="11.0"
|
1296
|
+
sl_ie10_win7: --profile sl_win7 SL_BROWSER="internet explorer" SL_VERSION="10.0"
|
1297
|
+
sl_ie9_win7: --profile sl_win7 SL_BROWSER="internet explorer" SL_VERSION="9.0"
|
1298
|
+
sl_ie11_win8: --profile sl_win8 SL_BROWSER="internet explorer" SL_VERSION="11.0"
|
1299
|
+
sl_ie11_win10: --profile sl_win10 SL_BROWSER="internet explorer"
|
1300
|
+
|
1301
|
+
|
1302
|
+
#==============
|
1303
|
+
# profiles for remotely hosted web browsers on the TestingBot service
|
1304
|
+
#==============
|
1305
|
+
|
1306
|
+
testingbot: WEB_BROWSER=testingbot TB_USERNAME=<INSERT USER NAME HERE> TB_AUTHKEY=<INSERT PASSWORD HERE>
|
1307
|
+
tb_desktop: --profile testingbot <%= desktop %> RESOLUTION="1920x1200"
|
1308
|
+
tb_mobile: --profile testingbot <%= mobile %>
|
1309
|
+
|
1310
|
+
# TestingBot OS X desktop browser profiles
|
1311
|
+
tb_macos_sierra: --profile tb_desktop TB_OS="SIERRA"
|
1312
|
+
tb_ff_sierra: --profile tb_macos_sierra TB_BROWSER="firefox"
|
1313
|
+
tb_chrome_sierra: --profile tb_macos_sierra TB_BROWSER="chrome"
|
1314
|
+
tb_safari_sierra: --profile tb_macos_sierra TB_BROWSER="safari" TB_VERSION="10"
|
1315
|
+
|
1316
|
+
tb_osx_el_capitan: --profile tb_desktop TB_OS="CAPITAN"
|
1317
|
+
tb_ff_el_cap: --profile tb_osx_el_capitan TB_BROWSER="firefox"
|
1318
|
+
tb_chrome_el_cap: --profile tb_osx_el_capitan TB_BROWSER="chrome"
|
1319
|
+
tb_safari_el_cap: --profile tb_osx_el_capitan TB_BROWSER="safari" TB_VERSION="9"
|
1320
|
+
|
1321
|
+
tb_osx_yosemite: --profile tb_desktop TB_OS="YOSEMITE"
|
1322
|
+
tb_ff_yos: --profile tb_osx_yosemite TB_BROWSER="firefox"
|
1323
|
+
tb_chrome_yos: --profile tb_osx_yosemite TB_BROWSER="chrome"
|
1324
|
+
tb_safari_yos: --profile tb_osx_yosemite TB_BROWSER="safari" TB_VERSION="8"
|
1325
|
+
|
1326
|
+
tb_osx_mavericks: --profile tb_desktop TB_OS="MAVERICKS"
|
1327
|
+
tb_ff_mav: --profile tb_osx_mavericks TB_BROWSER="firefox"
|
1328
|
+
tb_chrome_mav: --profile tb_osx_mavericks TB_BROWSER="chrome"
|
1329
|
+
tb_safari_mav: --profile tb_osx_mavericks TB_BROWSER="safari" TB_VERSION="7"
|
1330
|
+
|
1331
|
+
# TestingBot Windows desktop browser profiles
|
1332
|
+
tb_win7: --profile tb_desktop TB_OS="WIN7"
|
1333
|
+
tb_win8: --profile tb_desktop TB_OS="WIN8"
|
1334
|
+
tb_win10: --profile tb_desktop TB_OS="WIN10"
|
1335
|
+
tb_ff_win7: --profile tb_win7 TB_BROWSER="firefox"
|
1336
|
+
tb_ff_win8: --profile tb_win8 TB_BROWSER="firefox"
|
1337
|
+
tb_ff_win10: --profile tb_win10 TB_BROWSER="firefox"
|
1338
|
+
tb_chrome_win7: --profile tb_win7 TB_BROWSER="chrome"
|
1339
|
+
tb_chrome_win8: --profile tb_win8 TB_BROWSER="chrome"
|
1340
|
+
tb_chrome_win10: --profile tb_win10 TB_BROWSER="chrome"
|
1341
|
+
|
1342
|
+
tb_ie9_win7: --profile tb_win7 TB_BROWSER="internet explorer" TB_VERSION="9"
|
1343
|
+
tb_ie11_win8: --profile tb_win8 TB_BROWSER="internet explorer" TB_VERSION="11"
|
1344
|
+
tb_ie10_win8: --profile tb_win8 TB_BROWSER="internet explorer" TB_VERSION="10"
|
1345
|
+
tb_ie11_win10: --profile tb_win10 TB_BROWSER="internet explorer" TB_VERSION="11"
|
1346
|
+
tb_edge_win10: --profile tb_win10 TB_BROWSER="microsoftedge" TB_VERSION="14"
|
1347
|
+
|
1348
|
+
# TestingBot iOS mobile browser profiles
|
1349
|
+
tb_ios: --profile tb_mobile TB_OS="MAC" TB_BROWSER="safari" TB_PLATFORM="iOS"
|
1350
|
+
tb_iphone6s_plus_10: --profile tb_ios TB_VERSION="10.0" TB_DEVICE="iPhone 6s Plus"
|
1351
|
+
tb_iphone6s_plus_93: --profile tb_ios TB_VERSION="9.3" TB_DEVICE="iPhone 6s Plus"
|
1352
|
+
tb_iphone6_plus_10: --profile tb_ios TB_VERSION="10.0" TB_DEVICE="iPhone 6 Plus"
|
1353
|
+
tb_iphone6_plus_93: --profile tb_ios TB_VERSION="9.3" TB_DEVICE="iPhone 6 Plus"
|
1354
|
+
tb_iphone6s_10: --profile tb_ios TB_VERSION="10.0" TB_DEVICE="iPhone 6s"
|
1355
|
+
tb_iphone6s_93: --profile tb_ios TB_VERSION="9.3" TB_DEVICE="iPhone 6s"
|
1356
|
+
tb_iphone5s_10: --profile tb_ios TB_VERSION="10.0" TB_DEVICE="iPhone 5s"
|
1357
|
+
tb_iphone5s_93: --profile tb_ios TB_VERSION="9.3" TB_DEVICE="iPhone 5s"
|
1358
|
+
tb_ipad_pro_10: --profile tb_ios TB_VERSION="10.0" TB_DEVICE="iPad Pro"
|
1359
|
+
tb_ipad_pro_93: --profile tb_ios TB_VERSION="9.3" TB_DEVICE="iPad Pro"
|
1360
|
+
tb_ipad_air2_10: --profile tb_ios TB_VERSION="10.0" TB_DEVICE="iPad Air 2"
|
1361
|
+
tb_ipad_air2_93: --profile tb_ios TB_VERSION="9.3" TB_DEVICE="iPad Air 2"
|
1362
|
+
|
1363
|
+
|
1364
|
+
# TestingBot Android mobile browser profiles
|
1365
|
+
tb_android: --profile tb_mobile TB_OS="ANDROID" TB_BROWSER="browser" TB_PLATFORM="Android"
|
1366
|
+
tb_nexus_s: --profile tb_android TB_VERSION="6.0" TB_DEVICE="Nexus S"
|
1367
|
+
tb_nexus_1: --profile tb_android TB_VERSION="5.0" TB_DEVICE="Nexus 1"
|
1368
|
+
tb_nexus_4: --profile tb_android TB_VERSION="6.0" TB_DEVICE="Nexus 4"
|
1369
|
+
tb_galaxy_nexus: --profile tb_android TB_VERSION="4.4" TB_DEVICE="Galaxy Nexus"
|
1370
|
+
tb_galaxy_s4: --profile tb_android TB_VERSION="4.4" TB_DEVICE="Galaxy S4"
|
1371
|
+
tb_galaxy_s5: --profile tb_android TB_VERSION="5.0" TB_DEVICE="Galaxy S5"
|
1372
|
+
tb_galaxy_s6: --profile tb_android TB_VERSION="6.0" TB_DEVICE="Galaxy S6"
|
1373
|
+
|
1374
|
+
|
1375
|
+
To specify a locally hosted target browser using a profile at runtime, you use the flag `--profile` or `-p` followed by the profile name when
|
1376
|
+
invoking Cucumber in the command line. For instance, the following command invokes Cucumber and specifies that a local instance of Chrome
|
1377
|
+
will be used as the target web browser:
|
1378
|
+
|
1379
|
+
$ cucumber -p chrome
|
1380
|
+
|
1381
|
+
|
1382
|
+
The following command specifies that Cucumber will run tests against a local instance of Firefox, which will be used to emulate an iPad Pro
|
1383
|
+
in landscape orientation:
|
1384
|
+
|
1385
|
+
$ cucumber -p ipad_pro -p landscape
|
1386
|
+
|
1387
|
+
|
1388
|
+
The following command specifies that Cucumber will run tests against an iPad Pro with iOS version 9.3 in an XCode Simulator
|
1389
|
+
in landscape orientation:
|
1390
|
+
|
1391
|
+
$ cucumber -p ipad_pro_93_sim -p landscape
|
1392
|
+
|
1393
|
+
NOTE: Appium must be running prior to executing this command
|
1394
|
+
|
1395
|
+
|
1396
|
+
The following command specifies that Cucumber will run tests against a remotely hosted Safari web browser running on an OS X Yosemite
|
1397
|
+
virtual machine on the BrowserStack service:
|
1398
|
+
|
1399
|
+
cucumber -p bs_safari_yos
|
1400
|
+
|
1401
|
+
|
1402
|
+
The following command specifies that Cucumber will run tests against a remotely hosted Mobile Safari web browser on an iPhone 6s Plus in
|
1403
|
+
landscape orientation running on the BrowserStack service:
|
1404
|
+
|
1405
|
+
$ cucumber -p bs_iphone6_plus -p landscape
|
1406
|
+
|
1407
|
+
|
1408
|
+
|
1409
|
+
## Web Test Automation Framework Implementation
|
1410
|
+
|
1411
|
+
<img src="http://i.imgur.com/RvpxjzW.jpg" width="1024" alt="Web Framework Overview" title="Web Framework Overview">
|
1412
|
+
|
1413
|
+
|
1414
|
+
|
1415
|
+
|
1416
|
+
## Copyright and License
|
1417
|
+
|
1418
|
+
TestCentricity™ Framework is Copyright (c) 2014-2017, Tony Mrozinski.
|
1419
|
+
All rights reserved.
|
1420
|
+
|
1421
|
+
|
1422
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions
|
1423
|
+
are met:
|
1424
|
+
|
1425
|
+
1. Redistributions of source code must retain the above copyright notice, this list of conditions, and the following disclaimer.
|
1426
|
+
|
1427
|
+
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in
|
1428
|
+
the documentation and/or other materials provided with the distribution.
|
1429
|
+
|
1430
|
+
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from
|
1431
|
+
this software without specific prior written permission.
|
1432
|
+
|
1433
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
1434
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
1435
|
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
1436
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
1437
|
+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
1438
|
+
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|