testcentricity_web 0.5.7.2 → 0.5.8
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/README.md +24 -25
- data/lib/testcentricity_web/siebel_open_ui_helper.rb +18 -0
- data/lib/testcentricity_web/ui_elements_helper.rb +60 -2
- data/lib/testcentricity_web/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 827f668182f61bf19480bb993ff1c452fd155982
|
4
|
+
data.tar.gz: 58564669674cf2fc3ddf62b1ffb5b5074a982b88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11f086f65e4c2725c06957e42abff668674a2515a527f2d7876457adcd596ced605693430853aaff77fd658f9703a9b4d19e771987d49fcba025a2062d04e7e9
|
7
|
+
data.tar.gz: 73174e2dce406fbde1678af1d133c48e467ee93bcfd112be75a272582ec29bd79b0853b91e34e14cf78bc5a97fe104cbaea446c253debcdc1eceae3d89059ec5
|
data/README.md
CHANGED
@@ -49,9 +49,7 @@ call methods in selenium-webdriver, you will also need to require the following
|
|
49
49
|
|
50
50
|
|
51
51
|
|
52
|
-
##
|
53
|
-
|
54
|
-
### Page Objects
|
52
|
+
## Page Objects
|
55
53
|
|
56
54
|
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
|
57
55
|
in tests. A **Page Object** is an object that represents a single page in your AUT (Application Under Test). **Page Objects** encapsulate the
|
@@ -64,7 +62,7 @@ text field attributes, button captions, etc.), maintenance is performed in the *
|
|
64
62
|
to update the affected feature file, scenarios, or step definitions.
|
65
63
|
|
66
64
|
|
67
|
-
|
65
|
+
### Defining a Page Object
|
68
66
|
|
69
67
|
Your **Page Object** class definitions should be contained within individual *.rb* files in the ***features/support/pages*** folder of your
|
70
68
|
test automation project. You define new **Page Objects** as shown below:
|
@@ -83,7 +81,7 @@ test automation project. You define new **Page Objects** as shown below:
|
|
83
81
|
end
|
84
82
|
|
85
83
|
|
86
|
-
|
84
|
+
### Adding UI Elements to your Page Object
|
87
85
|
|
88
86
|
**UI Elements** are added to your **Page Object** class definition as shown below:
|
89
87
|
|
@@ -108,7 +106,7 @@ below:
|
|
108
106
|
login_page.login_button.click
|
109
107
|
|
110
108
|
|
111
|
-
|
109
|
+
### Adding Methods to your Page Object
|
112
110
|
|
113
111
|
It is good practice for your Cucumber step definitions to call high level methods in your your **Page Object** instead of directly accessing
|
114
112
|
and interacting with a page object's UI elements. You can add high level methods to your **Page Object** class definition for interacting with
|
@@ -145,7 +143,7 @@ Once your **Page Objects** have been instantiated, you can call your methods as
|
|
145
143
|
|
146
144
|
|
147
145
|
|
148
|
-
|
146
|
+
## PageSection Objects
|
149
147
|
|
150
148
|
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
|
151
149
|
app. It is a collection of **UI Elements** that represent a conceptual area of functionality, like a navigation bar, a search capability,
|
@@ -154,7 +152,7 @@ or a menu. **UI Elements** and functional behavior are confined to the scope of
|
|
154
152
|
A **PageSection Object** may contain other **PageSection Objects**.
|
155
153
|
|
156
154
|
|
157
|
-
|
155
|
+
### Defining a PageSection Object
|
158
156
|
|
159
157
|
Your **PageSection** class definitions should be contained within individual *.rb* files in the ***features/support/sections*** folder of
|
160
158
|
your test automation project. You define new **PageSection Objects** as shown below:
|
@@ -164,7 +162,7 @@ your test automation project. You define new **PageSection Objects** as shown be
|
|
164
162
|
end
|
165
163
|
|
166
164
|
|
167
|
-
|
165
|
+
### Adding UI Elements to your PageSection Object
|
168
166
|
|
169
167
|
**UI Elements** are added to your **PageSection** class definition as shown below:
|
170
168
|
|
@@ -177,7 +175,7 @@ your test automation project. You define new **PageSection Objects** as shown be
|
|
177
175
|
end
|
178
176
|
|
179
177
|
|
180
|
-
|
178
|
+
### Adding Methods to your PageSection Object
|
181
179
|
|
182
180
|
You can add high level methods to your **PageSection** class definition, as shown below:
|
183
181
|
|
@@ -195,7 +193,7 @@ You can add high level methods to your **PageSection** class definition, as show
|
|
195
193
|
end
|
196
194
|
|
197
195
|
|
198
|
-
|
196
|
+
### Adding PageSection Objects to your Page Object
|
199
197
|
|
200
198
|
You add a **PageSection Object** to its associated **Page Object** as shown below:
|
201
199
|
|
@@ -214,7 +212,7 @@ Once your **Page Object** has been instantiated, you can call its **PageSection*
|
|
214
212
|
|
215
213
|
|
216
214
|
|
217
|
-
|
215
|
+
## Instantiating your Page Objects
|
218
216
|
|
219
217
|
Before you can call the methods in your **Page Objects** and **PageSection Objects**, you must instantiate the **Page Objects** of your
|
220
218
|
web application, as well as create instance variables which can be used when calling a **Page Objects** methods from your step definitions.
|
@@ -244,7 +242,7 @@ The **WorldPages** module above can be defined in your *env.rb* file, or you can
|
|
244
242
|
While this approach is effective for small web applications with only a few pages (and hence few **Page Objects**), it quickly becomes
|
245
243
|
cumbersome to manage if your web application has dozens of **Page Objects** that need to be instantiated and managed.
|
246
244
|
|
247
|
-
|
245
|
+
### Using the PageManager
|
248
246
|
|
249
247
|
The **PageManager** class provides methods for supporting the instantiation and management of **Page Objects**. In the code example below,
|
250
248
|
the **page_objects** method contains a hash table of your **Page Object** instance variables and their associated **Page Object** classes
|
@@ -279,7 +277,7 @@ executed:
|
|
279
277
|
|
280
278
|
|
281
279
|
|
282
|
-
|
280
|
+
## Connecting to a Web Browser
|
283
281
|
|
284
282
|
The ***WebDriverConnect.initialize_web_driver*** method configures the appropriate selenium-webdriver capabilities required to establish a
|
285
283
|
connection with a target web browser, and sets the base host URL of the web site you are running your tests against
|
@@ -289,7 +287,7 @@ Variables**are used to specify the target local or remote web browser, and the v
|
|
289
287
|
the connection.
|
290
288
|
|
291
289
|
|
292
|
-
|
290
|
+
### Locally hosted desktop web browser
|
293
291
|
|
294
292
|
For locally hosted desktop web browsers, the **WEB_BROWSER** Environment Variable must be set to one of the values from the table below:
|
295
293
|
|
@@ -303,7 +301,7 @@ edge | Windows 10 only
|
|
303
301
|
poltergeist | OS X or Windows
|
304
302
|
|
305
303
|
|
306
|
-
|
304
|
+
### Locally hosted emulated mobile web browser
|
307
305
|
|
308
306
|
You can also run your tests against emulated mobile device browsers within a locally hosted instance of the Firefox desktop browser. You may
|
309
307
|
even specify the emulated device's screen orientation. For locally hosted emulated mobile web browsers, the **WEB_BROWSER** Environment Variable
|
@@ -324,13 +322,13 @@ android_tablet |
|
|
324
322
|
To specify the emulated device's screen orientation, you set the **ORIENTATION** Environment Variable to either ***portrait*** or ***landscape***.
|
325
323
|
|
326
324
|
|
327
|
-
|
325
|
+
### Remotely hosted desktop and mobile web browsers
|
328
326
|
|
329
327
|
You can run your automated tests against remotely hosted desktop and mobile web browsers using the BrowserStack, CrossBrowserTesting, or
|
330
328
|
Sauce Labs services.
|
331
329
|
|
332
330
|
|
333
|
-
|
331
|
+
#### Remote desktop browsers on the BrowserStack service
|
334
332
|
|
335
333
|
For remotely hosted desktop web browsers on the BrowserStack service, the following **Environment Variables** must be set as described in
|
336
334
|
the table below. Refer to the [Browserstack-specific capabilities chart page](https://www.browserstack.com/automate/capabilities#capabilities-browserstack) for information regarding the specific capabilities.
|
@@ -348,7 +346,7 @@ BS_LOCAL | Must be ***true*** if you are testing against internal/local servers
|
|
348
346
|
RESOLUTION | Refer to supported screen ***resolution*** capability in chart
|
349
347
|
|
350
348
|
|
351
|
-
|
349
|
+
#### Remote mobile browsers on the BrowserStack service
|
352
350
|
|
353
351
|
For remotely hosted mobile web browsers on the BrowserStack service, the following **Environment Variables** must be set as described in
|
354
352
|
the table below. Refer to the [Browserstack-specific capabilities chart page](https://www.browserstack.com/automate/capabilities#capabilities-browserstack) for information regarding the specific capabilities.
|
@@ -366,7 +364,7 @@ ORIENTATION | set to ***portrait*** or ***landscape***
|
|
366
364
|
|
367
365
|
|
368
366
|
|
369
|
-
|
367
|
+
#### Remote desktop browsers on the CrossBrowserTesting service
|
370
368
|
|
371
369
|
For remotely hosted desktop web browsers on the CrossBrowserTesting service, the following **Environment Variables** must be set as described in
|
372
370
|
the table below. Use the Configuration Wizard on the [Start a Selenium Test page](https://app.crossbrowsertesting.com/selenium/run) to obtain information regarding the specific capabilities.
|
@@ -381,7 +379,7 @@ CB_BROWSER | Refer to ***browser_api_name*** capability in the sample script of
|
|
381
379
|
RESOLUTION | Refer to supported ***screen_resolution*** capability in the sample script of the Wizard
|
382
380
|
|
383
381
|
|
384
|
-
|
382
|
+
#### Remote mobile browsers on the CrossBrowserTesting service
|
385
383
|
|
386
384
|
For remotely hosted mobile web browsers on the CrossBrowserTesting service, the following **Environment Variables** must be set as described in
|
387
385
|
the table below. Use the Configuration Wizard on the [Start a Selenium Test page](https://app.crossbrowsertesting.com/selenium/run) to obtain information regarding the specific capabilities.
|
@@ -397,7 +395,7 @@ RESOLUTION | Refer to supported ***screen_resolution*** capability in the sample
|
|
397
395
|
|
398
396
|
|
399
397
|
|
400
|
-
|
398
|
+
#### Remote desktop browsers on the Sauce Labs service
|
401
399
|
|
402
400
|
For remotely hosted desktop web browsers on the Sauce Labs service, the following **Environment Variables** must be set as described in
|
403
401
|
the table below. Use the Selenium API on the [Platform Configurator page](https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/) to obtain information regarding the specific capabilities.
|
@@ -413,7 +411,7 @@ SL_VERSION | Refer to ***version*** capability in the Copy Code section of the P
|
|
413
411
|
RESOLUTION | Refer to supported ***screenResolution*** capability in the Copy Code section of the Platform Configurator page
|
414
412
|
|
415
413
|
|
416
|
-
|
414
|
+
#### Remote mobile browsers on the Sauce Labs service
|
417
415
|
|
418
416
|
For remotely hosted mobile web browsers on the Sauce Labs service, the following **Environment Variables** must be set as described in
|
419
417
|
the table below. Use the Selenium API on the [Platform Configurator page](https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/) to obtain information regarding the specific capabilities.
|
@@ -432,12 +430,13 @@ ORIENTATION | Refer to ***deviceOrientation*** capability in the Copy Code secti
|
|
432
430
|
|
433
431
|
|
434
432
|
|
435
|
-
|
433
|
+
### Using Browser specific Profiles in cucumber.yml
|
436
434
|
|
437
435
|
While you can set **Environment Variables** in the command line when invoking Cucumber, a preferred method of specifying and managing target
|
438
436
|
web browsers is to create browser specific **Profiles** that set the appropriate **Environment Variables** for each target browser in your
|
439
437
|
***cucumber.yml*** file. Below is a list of Cucumber **Profiles** for supported locally and remotely hosted desktop and mobile web browsers
|
440
|
-
(put these in in your ***cucumber.yml*** file)
|
438
|
+
(put these in in your ***cucumber.yml*** file). Before you can use the BrowserStack, CrossBrowserTesting, or Sauce Labs services, you will
|
439
|
+
need to replace the placeholder text with your user account and authorization code for the cloud service(s) that you intend to connect with.
|
441
440
|
|
442
441
|
<% desktop = "--tags ~@wip --tags ~@failing --tags @desktop --require features" %>
|
443
442
|
<% mobile = "--tags ~@wip --tags ~@failing --tags @mobile --require features" %>
|
@@ -1,5 +1,11 @@
|
|
1
1
|
module TestCentricity
|
2
2
|
class UIElement
|
3
|
+
# Set the check state of a Siebel OUI JCheckBox object.
|
4
|
+
#
|
5
|
+
# @param state [Boolean] true = checked / false = unchecked
|
6
|
+
# @example
|
7
|
+
# remember_me_checkbox.set_checkbox_state(true)
|
8
|
+
#
|
3
9
|
def set_siebel_checkbox_state(state)
|
4
10
|
obj, _ = find_element
|
5
11
|
object_not_found_exception(obj, 'Siebel checkbox')
|
@@ -8,12 +14,24 @@ module TestCentricity
|
|
8
14
|
obj.click unless expected == obj.checked?
|
9
15
|
end
|
10
16
|
|
17
|
+
# Select the specified option in a Siebel OUI select box object.
|
18
|
+
#
|
19
|
+
# @param option [String] text of option to select
|
20
|
+
# @example
|
21
|
+
# country_select.choose_option('Cayman Islands')
|
22
|
+
#
|
11
23
|
def choose_siebel_option(option)
|
12
24
|
Capybara.wait_on_first_by_default = true
|
13
25
|
invoke_siebel_popup
|
14
26
|
first(:xpath, "//li[@class='ui-menu-item']", :exact => true, :match => :prefer_exact,text: option).click
|
15
27
|
end
|
16
28
|
|
29
|
+
# Return array of strings of all options in a Siebel OUI select box object.
|
30
|
+
#
|
31
|
+
# @return [Array]
|
32
|
+
# @example
|
33
|
+
# all_countries = country_select.get_options
|
34
|
+
#
|
17
35
|
def get_siebel_options
|
18
36
|
invoke_siebel_popup
|
19
37
|
sleep(0.5)
|
@@ -209,6 +209,12 @@ module TestCentricity
|
|
209
209
|
obj.checked?
|
210
210
|
end
|
211
211
|
|
212
|
+
# Set the check state of a checkbox object.
|
213
|
+
#
|
214
|
+
# @param state [Boolean] true = checked / false = unchecked
|
215
|
+
# @example
|
216
|
+
# remember_me_checkbox.set_checkbox_state(true)
|
217
|
+
#
|
212
218
|
def set_checkbox_state(state)
|
213
219
|
obj, _ = find_element
|
214
220
|
object_not_found_exception(obj, 'Checkbox')
|
@@ -321,6 +327,13 @@ module TestCentricity
|
|
321
327
|
Capybara.ignore_hidden_elements = true
|
322
328
|
end
|
323
329
|
|
330
|
+
# Select the specified option in a select box object.
|
331
|
+
# Supports standard HTML select objects and Chosen select objects.
|
332
|
+
#
|
333
|
+
# @param option [String] text of option to select
|
334
|
+
# @example
|
335
|
+
# province_select.choose_option('Nova Scotia')
|
336
|
+
#
|
324
337
|
def choose_option(option)
|
325
338
|
obj, _ = find_element
|
326
339
|
object_not_found_exception(obj, nil)
|
@@ -344,16 +357,45 @@ module TestCentricity
|
|
344
357
|
end
|
345
358
|
end
|
346
359
|
|
360
|
+
# Return array of strings of all options in a select box object.
|
361
|
+
# Supports standard HTML select objects and Chosen select objects.
|
362
|
+
#
|
363
|
+
# @return [Array]
|
364
|
+
# @example
|
365
|
+
# all_colors = color_select.get_options
|
366
|
+
#
|
347
367
|
def get_options
|
348
368
|
obj, _ = find_element
|
349
369
|
object_not_found_exception(obj, nil)
|
350
|
-
|
370
|
+
if first(:css, 'li.active-result')
|
371
|
+
obj.all('li.active-result').collect(&:text)
|
372
|
+
else
|
373
|
+
obj.all('option').collect(&:text)
|
374
|
+
end
|
351
375
|
end
|
352
376
|
|
377
|
+
def verify_options(expected, enqueue = false)
|
378
|
+
actual = get_options
|
379
|
+
enqueue ?
|
380
|
+
ExceptionQueue.enqueue_assert_equal(expected, actual, "Expected list of options in list #{@locator}") :
|
381
|
+
assert_equal(expected, actual, "Expected list of options in list #{@locator} to be #{expected} but found #{actual}")
|
382
|
+
end
|
383
|
+
|
384
|
+
# Return text of first selected option in a select box object.
|
385
|
+
# Supports standard HTML select objects and Chosen select objects.
|
386
|
+
#
|
387
|
+
# @return [String]
|
388
|
+
# @example
|
389
|
+
# current_color = color_select.get_selected_option
|
390
|
+
#
|
353
391
|
def get_selected_option
|
354
392
|
obj, _ = find_element
|
355
393
|
object_not_found_exception(obj, nil)
|
356
|
-
|
394
|
+
if first(:css, 'li.active-result')
|
395
|
+
obj.first("//li[contains(@class, 'result-selected')]").text
|
396
|
+
else
|
397
|
+
obj.first('option[selected]').text
|
398
|
+
end
|
357
399
|
end
|
358
400
|
|
359
401
|
# Return number of rows in a table object.
|
@@ -483,6 +525,14 @@ module TestCentricity
|
|
483
525
|
value
|
484
526
|
end
|
485
527
|
|
528
|
+
# Return text contained in specified cell of a table object.
|
529
|
+
#
|
530
|
+
# @param row [Integer] row number
|
531
|
+
# @param column [Integer] column number
|
532
|
+
# @return [String] value of table cell
|
533
|
+
# @example
|
534
|
+
# list_table.get_table_cell(4, 5)
|
535
|
+
#
|
486
536
|
def get_table_cell(row, column)
|
487
537
|
row_count = get_row_count
|
488
538
|
raise "Row #{row} exceeds number of rows (#{row_count}) in table #{@locator}" if row > row_count
|
@@ -509,6 +559,14 @@ module TestCentricity
|
|
509
559
|
assert_equal(expected.strip, actual.strip, "Expected #{@locator} row #{row}/column #{column} to display '#{expected}' but found '#{actual}'")
|
510
560
|
end
|
511
561
|
|
562
|
+
# Set the value of the specified cell in a table object.
|
563
|
+
#
|
564
|
+
# @param row [Integer] row number
|
565
|
+
# @param column [Integer] column number
|
566
|
+
# @param value [String] text to set
|
567
|
+
# @example
|
568
|
+
# list_table.set_table_cell(3, 1, 'Ontario')
|
569
|
+
#
|
512
570
|
def set_table_cell(row, column, value)
|
513
571
|
row_count = get_row_count
|
514
572
|
raise "Row #{row} exceeds number of rows (#{row_count}) in table #{@locator}" if row > row_count
|