testcentricity_mobile 4.0.1 → 4.0.3
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d1c72189a3ecb6043ddb0ce1d7b16f1f2e67469522a97afbce050dcb75ab13f
|
4
|
+
data.tar.gz: 35348b22511759c81c7cce36f293f8eaa902fede99436b6803043db1ecc3c2bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65dd7f632f96537cd043fb0e1246859e029b987fffbab216948818307c2ae1ed1ca57db8ef17883392d5ffeaa759b656602c696399a08431b83527f5862aedca
|
7
|
+
data.tar.gz: ae61adcb122c74499f17e930ad9457a0790547cac3a9c9807bf954d7bd62d34af8d431549d6e0b37c926ce1c30aadb41765091cc98467c831d1510861cb5e09a
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,21 @@
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
4
|
|
5
|
+
## [4.0.3] - 05-APR-2024
|
6
|
+
|
7
|
+
### Fixed
|
8
|
+
|
9
|
+
* `AppiumConnect.initialize_appium`, `AppiumServer.start`, and `AppiumServer.running?` methods now support Appium version 2.x.
|
10
|
+
Backward compatibility with Appium version 1.x is provided if `APPIUM_SERVER_VERSION` Environment Variable is set to `1`.
|
11
|
+
|
12
|
+
|
13
|
+
## [4.0.2] - 27-MAR-2024
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
* Updated `selenium-webdriver` gem to version 4.19.0.
|
18
|
+
|
19
|
+
|
5
20
|
## [4.0.0] - 26-MAR-2024
|
6
21
|
|
7
22
|
### Fixed
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
The TestCentricity™ Mobile core framework for native mobile iOS and Android app testing implements a Screen Object Model
|
11
|
-
DSL for use with Cucumber (version 7.x or greater) and Appium. It also facilitates the configuration of the appropriate
|
11
|
+
DSL for use with Cucumber (version 7.x or greater) and Appium 2.x. It also facilitates the configuration of the appropriate
|
12
12
|
Appium capabilities and driver required to establish a connection with locally or cloud hosted iOS and Android real devices
|
13
13
|
or simulators.
|
14
14
|
|
@@ -28,6 +28,15 @@ A complete history of bug fixes and new features can be found in the {file:CHANG
|
|
28
28
|
|
29
29
|
The RubyDocs for this gem can be found [here](https://www.rubydoc.info/gems/testcentricity_mobile/).
|
30
30
|
|
31
|
+
Two example projects that demonstrates the implementation of a screen object model framework using Cucumber and TestCentricity™
|
32
|
+
Mobile can be found at the following:
|
33
|
+
* [tc_mobile_react_native_demo](https://github.com/TestCentricity/tc_mobile_react_native_demo)
|
34
|
+
* [tc_mobile_wdio_demo](https://github.com/TestCentricity/tc_mobile_wdio_demo)
|
35
|
+
|
36
|
+
Refer to [this wiki page](https://github.com/TestCentricity/testcentricity_mobile/wiki/XCUItest-driver-bug-impacts-iOS-dialogs-managed-by-com.apple.springboard) for
|
37
|
+
information on a bug with the latest versions of the XCUItest driver that affects Appium's ability to interact with and
|
38
|
+
verify iOS system level modal dialogs.
|
39
|
+
|
31
40
|
|
32
41
|
### Which gem should I use?
|
33
42
|
|
@@ -310,9 +319,11 @@ Refer to the [Speeding Up Tests With Deep Links](https://appiumpro.com/editions/
|
|
310
319
|
A `ScreenSection` is a collection of **UI Elements** that may appear in multiple locations on a screen, or on multiple
|
311
320
|
screens in an app. It is a collection of **UI Elements** that represent a conceptual area of functionality, like a menu,
|
312
321
|
a navigation bar, or a search capability. **UI Elements** and functional behavior are confined to the scope of a `ScreenSection`
|
313
|
-
object.
|
322
|
+
object. A `ScreenSection` may contain other `ScreenSection` objects.
|
314
323
|
|
315
|
-
|
324
|
+
Below is an example of a footer navigation bar feature that is common to multiple screen -
|
325
|
+
|
326
|
+
 
|
316
327
|
|
317
328
|
|
318
329
|
### Defining a ScreenSection
|
@@ -472,11 +483,20 @@ Single `AppUIElement` declarations have the following format:
|
|
472
483
|
elementType :elementName, { locator_strategy: locator_identifier }
|
473
484
|
|
474
485
|
* The `elementName` is the unique name that you will use to refer to the UI element and is specified as a `Symbol`.
|
475
|
-
* The `locator_strategy` specifies the
|
476
|
-
|
477
|
-
|
486
|
+
* The `locator_strategy` specifies the selector strategy that Appium will use to find the `AppUIElement`. Valid selectors are:
|
487
|
+
- `accessibility_id:`
|
488
|
+
- `id:`
|
489
|
+
- `name:`
|
490
|
+
- `class:`
|
491
|
+
- `xpath:`
|
492
|
+
- `predicate:` (iOS only)
|
493
|
+
- `class_chain:` (iOS only)
|
494
|
+
- `css:` (WebViews in hybrid apps only).
|
478
495
|
* The `locator_identifier` is the value or attribute that uniquely and unambiguously identifies the `AppUIElement`.
|
479
496
|
|
497
|
+
Refer to [this page](https://appium.github.io/appium-xcuitest-driver/5.12/locator-strategies/) for information on selector strategies for iOS.
|
498
|
+
Refer to [this page](https://github.com/appium/appium-uiautomator2-driver?tab=readme-ov-file#element-location) for information on selector strategies for Android.
|
499
|
+
|
480
500
|
Multiple `AppUIElement` declarations for a collection of elements of the same type can be performed by passing a hash table
|
481
501
|
containing the names and locators of each individual element.
|
482
502
|
|
@@ -687,38 +707,44 @@ The `verify_ui_states` method also supports I18n string translations using prope
|
|
687
707
|
:translate_capitalize String
|
688
708
|
:translate_titlecase String
|
689
709
|
|
690
|
-
The example below depicts the usage of the `verify_ui_states` method to verify that the captions for menu items
|
691
|
-
translated.
|
710
|
+
The example below depicts the usage of the `verify_ui_states` method to verify that the captions for navigation menu items
|
711
|
+
are correctly translated.
|
712
|
+
|
713
|
+

|
692
714
|
```ruby
|
693
715
|
def verify_menu
|
694
716
|
ui = {
|
695
|
-
|
717
|
+
menu_title => {
|
718
|
+
visible: true,
|
719
|
+
caption: { translate: 'NavMenu.title' }
|
720
|
+
},
|
721
|
+
recipes_item => {
|
696
722
|
visible: true,
|
697
|
-
caption: { translate: '
|
723
|
+
caption: { translate: 'NavMenu.recipes' }
|
698
724
|
},
|
699
|
-
|
725
|
+
browser_item => {
|
700
726
|
visible: true,
|
701
|
-
caption: { translate: '
|
727
|
+
caption: { translate: 'NavMenu.browser' }
|
702
728
|
},
|
703
|
-
|
729
|
+
groceries_item => {
|
704
730
|
visible: true,
|
705
|
-
caption: { translate: '
|
731
|
+
caption: { translate: 'NavMenu.groceries' }
|
706
732
|
},
|
707
|
-
|
733
|
+
pantry_item => {
|
708
734
|
visible: true,
|
709
|
-
caption: { translate: '
|
735
|
+
caption: { translate: 'NavMenu.pantry' }
|
710
736
|
},
|
711
|
-
|
737
|
+
meals_item => {
|
712
738
|
visible: true,
|
713
|
-
caption: { translate: '
|
739
|
+
caption: { translate: 'NavMenu.meals' }
|
714
740
|
},
|
715
|
-
|
741
|
+
menus_item => {
|
716
742
|
visible: true,
|
717
|
-
caption: { translate: '
|
743
|
+
caption: { translate: 'NavMenu.menus' }
|
718
744
|
},
|
719
|
-
|
745
|
+
settings_item => {
|
720
746
|
visible: true,
|
721
|
-
caption: { translate: '
|
747
|
+
caption: { translate: 'NavMenu.settings' }
|
722
748
|
}
|
723
749
|
}
|
724
750
|
verify_ui_states(ui)
|
@@ -730,38 +756,41 @@ menu example above, the translated strings for English, Spanish, and French are
|
|
730
756
|
**English** - `en.yml`
|
731
757
|
```yaml
|
732
758
|
en:
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
759
|
+
NavMenu:
|
760
|
+
title: 'Main Menu'
|
761
|
+
recipes: 'Recipes'
|
762
|
+
browser: 'Browser'
|
763
|
+
groceries: 'Groceries'
|
764
|
+
pantry: 'Pantry'
|
765
|
+
meals: 'Meals'
|
766
|
+
menus: 'Menus'
|
767
|
+
settings: 'Settings'
|
741
768
|
```
|
742
769
|
**Spanish** - `es.yml`
|
743
770
|
```yaml
|
744
771
|
es:
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
772
|
+
NavMenu:
|
773
|
+
title: 'Menú principal'
|
774
|
+
recipes: 'Recetas'
|
775
|
+
browser: 'Navegador'
|
776
|
+
groceries: 'Compra'
|
777
|
+
pantry: 'Despensa'
|
778
|
+
meals: 'Comidas'
|
779
|
+
menus: 'Menús'
|
780
|
+
settings: 'Ajustes'
|
753
781
|
```
|
754
782
|
**French** - `fr.yml`
|
755
783
|
```yaml
|
756
784
|
fr:
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
785
|
+
NavMenu:
|
786
|
+
title: 'Menu principal'
|
787
|
+
recipes: 'Recettes'
|
788
|
+
browser: 'Navigateur'
|
789
|
+
groceries: 'Courses'
|
790
|
+
pantry: 'Provisions'
|
791
|
+
meals: 'Repas'
|
792
|
+
menus: 'Menus'
|
793
|
+
settings: 'Réglades'
|
765
794
|
```
|
766
795
|
|
767
796
|
Each supported language/locale combination has a corresponding `.yml` file. I18n `.yml` file naming convention uses
|
@@ -963,6 +992,10 @@ Refer to [this page](https://appium.io/docs/en/2.4/guides/caps/) for information
|
|
963
992
|
to invoking Cucumber to run your features/scenarios on locally hosted iOS or Android simulators or physical devices. Refer
|
964
993
|
to [**section 8.2.3 (Starting and Stopping Appium Server)**](#starting-and-stopping-appium-server) below.
|
965
994
|
|
995
|
+
⚠️ If you are running locally hosted mobile tests on iOS or Android simulators or devices using version 1.x of the Appium
|
996
|
+
server, the `APPIUM_SERVER_VERSION` environment variable must be set to `1` in order to ensure that the correct Appium server
|
997
|
+
endpoint is used.
|
998
|
+
|
966
999
|
#### Connecting to Locally Hosted iOS Simulators or Physical Devices
|
967
1000
|
|
968
1001
|
You can run your automated tests on locally hosted iOS simulators or physically connected devices using Appium and XCode
|
@@ -1179,6 +1212,13 @@ starting your Cucumber test suite(s):
|
|
1179
1212
|
|
1180
1213
|
run_appium: APPIUM_SERVER=run
|
1181
1214
|
|
1215
|
+
If you are running locally hosted mobile tests on iOS or Android simulators or devices using version 1.x of the Appium server,
|
1216
|
+
the `APPIUM_SERVER_VERSION` environment variable must be set to `1` in order to ensure that the correct Appium server endpoint
|
1217
|
+
is used. This can be set by adding the following to your `cucumber.yml` file and including `-p appium_1x` in your command line
|
1218
|
+
when starting your Cucumber test suite(s):
|
1219
|
+
|
1220
|
+
appium_1x: APPIUM_SERVER_VERSION=1
|
1221
|
+
|
1182
1222
|
Refer to [**section 8.4 (Using Configuration Specific Profiles in `cucumber.yml`)**](#using-configuration-specific-profiles-in-cucumber-yml) below.
|
1183
1223
|
|
1184
1224
|
|
@@ -1199,6 +1239,10 @@ body of an example group:
|
|
1199
1239
|
$server.stop if Environ.driver == :appium && $server.running?
|
1200
1240
|
end
|
1201
1241
|
```
|
1242
|
+
If you are running locally hosted mobile tests on iOS or Android simulators or devices using version 1.x of the Appium server,
|
1243
|
+
the `APPIUM_SERVER_VERSION` environment variable must be set to `1` in order to ensure that the correct Appium server endpoint
|
1244
|
+
is used.
|
1245
|
+
|
1202
1246
|
|
1203
1247
|
### Connecting to Remote Cloud Hosted iOS and Android Simulators or Physical Devices
|
1204
1248
|
|
@@ -1621,6 +1665,7 @@ with access to your version control system.
|
|
1621
1665
|
# physical devices
|
1622
1666
|
#==============
|
1623
1667
|
run_appium: APPIUM_SERVER=run
|
1668
|
+
appium_1x: APPIUM_SERVER_VERSION=1
|
1624
1669
|
|
1625
1670
|
|
1626
1671
|
#==============
|
@@ -1718,6 +1763,11 @@ You can ensure that Appium Server is running by including `-p run_appium` in you
|
|
1718
1763
|
|
1719
1764
|
cucumber -p ipad_pro_12_15_sim -p portrait -p run_appium
|
1720
1765
|
|
1766
|
+
If you are running locally hosted mobile tests using version 1.x of Appium server, you must include `-p appium_1x` in
|
1767
|
+
your command line:
|
1768
|
+
|
1769
|
+
cucumber -p ipad_pro_12_15_sim -p landscape -p run_appium -p appium_1x
|
1770
|
+
|
1721
1771
|
|
1722
1772
|
The following command specifies that Cucumber will run tests against a cloud hosted iPhone 13 Pro Max running iOS 15.4 on the
|
1723
1773
|
BrowserStack service:
|
@@ -390,7 +390,13 @@ module TestCentricity
|
|
390
390
|
|
391
391
|
def self.appium_local_capabilities
|
392
392
|
# specify endpoint url
|
393
|
-
|
393
|
+
if @endpoint.nil?
|
394
|
+
@endpoint = if ENV['APPIUM_SERVER_VERSION'] && ENV['APPIUM_SERVER_VERSION'].to_i == 1
|
395
|
+
'http://127.0.0.1:4723/wd/hub'
|
396
|
+
else
|
397
|
+
'http://127.0.0.1:4723'
|
398
|
+
end
|
399
|
+
end
|
394
400
|
# define local Appium capabilities
|
395
401
|
if @capabilities.nil?
|
396
402
|
Environ.device_name = ENV['APP_DEVICE']
|
@@ -459,11 +465,7 @@ module TestCentricity
|
|
459
465
|
Environ.device_name = @capabilities[:'appium:deviceName']
|
460
466
|
Environ.device_os_version = @capabilities[:'appium:platformVersion']
|
461
467
|
Environ.device_orientation = @capabilities[:'appium:orientation']
|
462
|
-
Environ.device =
|
463
|
-
:device
|
464
|
-
else
|
465
|
-
:simulator
|
466
|
-
end
|
468
|
+
Environ.device = @capabilities[:'appium:udid'] ? :device : :simulator
|
467
469
|
@capabilities
|
468
470
|
end
|
469
471
|
end
|
@@ -38,9 +38,14 @@ module TestCentricity
|
|
38
38
|
# Check to see if Appium Server is running
|
39
39
|
#
|
40
40
|
def running?
|
41
|
+
endpoint = if ENV['APPIUM_SERVER_VERSION'] && ENV['APPIUM_SERVER_VERSION'].to_i == 1
|
42
|
+
'http://0.0.0.0:4723/wd/hub/sessions'
|
43
|
+
else
|
44
|
+
'http://0.0.0.0:4723/sessions'
|
45
|
+
end
|
41
46
|
response = false
|
42
47
|
begin
|
43
|
-
response = Net::HTTP.get_response(URI(
|
48
|
+
response = Net::HTTP.get_response(URI(endpoint))
|
44
49
|
rescue
|
45
50
|
end
|
46
51
|
response && response.code_type == Net::HTTPOK
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: testcentricity_mobile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- A.J. Mrozinski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -212,14 +212,14 @@ dependencies:
|
|
212
212
|
requirements:
|
213
213
|
- - '='
|
214
214
|
- !ruby/object:Gem::Version
|
215
|
-
version: 4.
|
215
|
+
version: 4.19.0
|
216
216
|
type: :runtime
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
220
|
- - '='
|
221
221
|
- !ruby/object:Gem::Version
|
222
|
-
version: 4.
|
222
|
+
version: 4.19.0
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: test-unit
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|