appium-espresso-driver 2.10.0 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -18
- package/build/index.js +1 -4
- package/build/lib/commands/execute.js +1 -10
- package/build/lib/commands/execute.js.map +1 -0
- package/build/lib/commands/general.js +3 -43
- package/build/lib/commands/general.js.map +1 -0
- package/build/lib/commands/idling-resources.js +2 -5
- package/build/lib/commands/idling-resources.js.map +1 -0
- package/build/lib/commands/index.js +3 -9
- package/build/lib/commands/index.js.map +1 -0
- package/build/lib/commands/services.js +2 -5
- package/build/lib/commands/services.js.map +1 -0
- package/build/lib/desired-caps.js +1 -4
- package/build/lib/desired-caps.js.map +1 -0
- package/build/lib/driver.js +21 -94
- package/build/lib/driver.js.map +1 -0
- package/build/lib/espresso-runner.js +1 -64
- package/build/lib/espresso-runner.js.map +1 -0
- package/build/lib/logger.js +1 -5
- package/build/lib/logger.js.map +1 -0
- package/build/lib/server-builder.js +1 -43
- package/build/lib/server-builder.js.map +1 -0
- package/build/lib/utils.js +1 -38
- package/build/lib/utils.js.map +1 -0
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Clear.kt +2 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementEquals.kt +2 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementScreenshot.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementValue.kt +3 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindActive.kt +2 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElement.kt +2 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElements.kt +3 -4
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt +2 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocationInView.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetName.kt +2 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRect.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSize.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Keys.kt +2 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileBackdoor.kt +4 -5
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileClickAction.kt +3 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt +2 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileViewFlash.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PointerEventHandler.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/WebAtoms.kt +2 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/EspressoViewsCache.kt +9 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ViewFinder.kt +168 -147
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/EspressoW3CActionAdapter.kt +2 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Element.kt +22 -17
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/HamcrestMatcher.kt +50 -42
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MatcherJson.kt +6 -4
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/HamcrestMatcherTest.kt +66 -34
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MatcherJsonTest.kt +4 -4
- package/npm-shrinkwrap.json +495 -1027
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,6 +13,11 @@ The Espresso package consists of two main parts:
|
|
|
13
13
|
- The driver part (written in Node.js) ensures the communication between the Espresso server and Appium. Also includes several handlers that directly use ADB and/or other system tools without a need to talk to the server.
|
|
14
14
|
- The server part (written in Kotlin with some parts of Java), which is running on the device under test and transforms REST API calls into low-level Espresso commands.
|
|
15
15
|
|
|
16
|
+
> **Note**
|
|
17
|
+
>
|
|
18
|
+
> Since version 2.0.0 Espresso driver has dropped the support of Appium 1, and is only compatible to Appium 2. Use the `appium driver install espresso`
|
|
19
|
+
> command to add it to your Appium 2 dist.
|
|
20
|
+
|
|
16
21
|
|
|
17
22
|
## Comparison with UiAutomator2
|
|
18
23
|
|
|
@@ -54,7 +59,7 @@ appium:printPageSourceOnFindFailure | Enforces the server to dump the actual XML
|
|
|
54
59
|
|
|
55
60
|
Capability Name | Description
|
|
56
61
|
--- | ---
|
|
57
|
-
appium:systemPort | The number of the port the Espresso server is listening on. By default the first free port from 8300..8399 range is selected. It is recommended to set this value if you are running [parallel tests](
|
|
62
|
+
appium:systemPort | The number of the port the Espresso server is listening on. By default the first free port from 8300..8399 range is selected. It is recommended to set this value if you are running [parallel tests](docs/parallel-tests.md) on the same machine.
|
|
58
63
|
appium:skipServerInstallation | Skip the Espresso Server component installation on the device under test and all the related checks if set to `true`. This could help to speed up the session startup if you know for sure the correct server version is installed on the device. In case the server is not installed or an incorrect version of it is installed then you may get an unexpected error later. `false` by default
|
|
59
64
|
appium:espressoServerLaunchTimeout | The maximum number of milliseconds to wait util Espresso server is listening on the device. `45000` ms by default
|
|
60
65
|
appium:forceEspressoRebuild | Whether to always enforce Espresso server rebuild (`true`). By default Espresso caches the already built server apk and only rebuilds it when it is necessary, because rebuilding process needs extra time. `false` by default
|
|
@@ -66,15 +71,15 @@ appium:showGradleLog | Whether to include Gradle log to the regular server logs
|
|
|
66
71
|
Capability Name | Description
|
|
67
72
|
--- | ---
|
|
68
73
|
appium:app | Full path to the application to be tested (the app must be located on the same machine where the server is running). The `.apk` application extension is supported. Since driver version 2.1.0 `.aab` files are supported as well (they get converted to `.apk` format automatically if [bundletool.jar](https://github.com/google/bundletool/releases) could be found in your PATH). For older driver versions `.aab` files need to be [converted](https://stackoverflow.com/questions/53040047/generate-apk-file-from-aab-file-android-app-bundle) manually to `.apk` format using [bundletool](https://developer.android.com/studio/command-line/bundletool) first. Could also be an URL to a remote location. If neither of the `app` or `appPackage` capabilities are provided then the driver will fail to start a session. Also, if `app` capability is not provided it is expected that the app under test is already installed on the device under test and `noReset` is equal to `true`.
|
|
69
|
-
appium:appPackage | Application package identifier to be started. If not provided then Espresso will try to detect it automatically from the package provided by the `app` capability. Read [How To Troubleshoot Activities Startup](
|
|
70
|
-
appium:appActivity | Main application activity identifier. If not provided then Espresso will try to detect it automatically from the package provided by the `app` capability. Read [How To Troubleshoot Activities Startup](
|
|
71
|
-
appium:appWaitActivity | Identifier of the first activity that the application invokes. If not provided then equals to `appium:appActivity`. Read [How To Troubleshoot Activities Startup](
|
|
72
|
-
appium:appWaitPackage | Identifier of the first package that is invoked first. If not provided then equals to `appium:appPackage`. Read [How To Troubleshoot Activities Startup](
|
|
73
|
-
appium:appWaitDuration | Maximum amount of milliseconds to wait until the application under test is started (e. g. an activity returns the control to the caller). `20000` ms by default. Read [How To Troubleshoot Activities Startup](
|
|
74
|
+
appium:appPackage | Application package identifier to be started. If not provided then Espresso will try to detect it automatically from the package provided by the `app` capability. Read [How To Troubleshoot Activities Startup](docs/activity-startup.md) for more details
|
|
75
|
+
appium:appActivity | Main application activity identifier. If not provided then Espresso will try to detect it automatically from the package provided by the `app` capability. Read [How To Troubleshoot Activities Startup](docs/activity-startup.md) for more details
|
|
76
|
+
appium:appWaitActivity | Identifier of the first activity that the application invokes. If not provided then equals to `appium:appActivity`. Read [How To Troubleshoot Activities Startup](docs/activity-startup.md) for more details
|
|
77
|
+
appium:appWaitPackage | Identifier of the first package that is invoked first. If not provided then equals to `appium:appPackage`. Read [How To Troubleshoot Activities Startup](docs/activity-startup.md) for more details
|
|
78
|
+
appium:appWaitDuration | Maximum amount of milliseconds to wait until the application under test is started (e. g. an activity returns the control to the caller). `20000` ms by default. Read [How To Troubleshoot Activities Startup](docs/activity-startup.md) for more details
|
|
74
79
|
appium:intentOptions | The mapping of custom options for the intent that is going to be passed to the main app activity. Check [Intent Options](#intent-options) for more details.
|
|
75
80
|
appium:activityOptions | The mapping of custom options for the main app activity that is going to be started. Check [Activity Options](#activity-options) for more details.
|
|
76
81
|
appium:androidInstallTimeout | Maximum amount of milliseconds to wait until the application under test is installed. `90000` ms by default
|
|
77
|
-
appium:autoGrantPermissions | Whether to grant all the requested application permissions automatically when a test starts(`true`). `false` by default
|
|
82
|
+
appium:autoGrantPermissions | Whether to grant all the requested application permissions automatically when a test starts(`true`). The targetSdkVersion in the application manifest must be greater or equal to 23 and the Android version on the device under test must be greater or equal to Android 6 (API level 23) to grant permissions. Applications whose targetSdkVersion is lower than or equal to 22 must be reisntalled to grant permissions, for example, by setting the `appium:fullReset` capability as `true` for Android 6+ devices. `false` by default
|
|
78
83
|
appium:otherApps | Allows to set one or more comma-separated paths to Android packages that are going to be installed along with the main application under test. This might be useful if the tested app has dependencies
|
|
79
84
|
appium:uninstallOtherPackages | Allows to set one or more comma-separated package identifiers to be uninstalled from the device before a test starts
|
|
80
85
|
appium:allowTestPackages | If set to `true` then it would be possible to use packages built with the test flag for the automated testing (literally adds `-t` flag to the `adb install` command). `false` by default
|
|
@@ -153,8 +158,8 @@ appium:chromedriverPort | The port number to use for Chromedriver communication.
|
|
|
153
158
|
appium:chromedriverPorts | Array of possible port numbers to assign for Chromedriver communication. If none of the port in this array is free then an error is thrown.
|
|
154
159
|
appium:chromedriverArgs | Array of chromedriver [command line arguments](http://www.assertselenium.com/java/list-of-chrome-driver-command-line-arguments/). Note, that not all command line arguments that are available for the desktop browser are also available for the mobile one.
|
|
155
160
|
appium:chromedriverExecutable | Full path to the chromedriver executable on the server file system.
|
|
156
|
-
appium:chromedriverExecutableDir | Full path to the folder where chromedriver executables are located. This folder is used then to store the downloaded chromedriver executables if automatic download is enabled. Read [Automatic Chromedriver Discovery article](
|
|
157
|
-
appium:chromedriverChromeMappingFile | Full path to the chromedrivers mapping file. This file is used to statically map webview/browser versions to the chromedriver versions that are capable of automating them. Read [Automatic Chromedriver Discovery article](
|
|
161
|
+
appium:chromedriverExecutableDir | Full path to the folder where chromedriver executables are located. This folder is used then to store the downloaded chromedriver executables if automatic download is enabled. Read [Automatic Chromedriver Discovery article](docs/hybrid-mode.md#automatic-discovery-of-compatible-chromedriver) for more details.
|
|
162
|
+
appium:chromedriverChromeMappingFile | Full path to the chromedrivers mapping file. This file is used to statically map webview/browser versions to the chromedriver versions that are capable of automating them. Read [Automatic Chromedriver Discovery article](docs/hybrid-mode.md#automatic-discovery-of-compatible-chromedriver) for more details.
|
|
158
163
|
appium:chromedriverUseSystemExecutable | Set it to `true` in order to enforce the usage of chromedriver, which gets downloaded by Appium automatically upon installation. This driver might not be compatible with the destination browser or a web view. `false` by default.
|
|
159
164
|
appium:chromedriverDisableBuildCheck | Being set to `true` disables the compatibility validation between the current chromedriver and the destination browser/web view. Use it with care.
|
|
160
165
|
appium:autoWebviewTimeout | Set the maximum number of milliseconds to wait until a web view is available if `autoWebview` capability is set to `true`. `2000` ms by default
|
|
@@ -361,8 +366,8 @@ accessibility id | This strategy is mapped to the native Espresso `withContentDe
|
|
|
361
366
|
class name | This strategy is mapped to the native Espresso `withClassName` [matcher](https://developer.android.com/reference/androidx/test/espresso/matcher/ViewMatchers#withClassName(org.hamcrest.Matcher%3Cjava.lang.String%3E)) (exact match of element's class name). | 'android.view.View'
|
|
362
367
|
text | This strategy is mapped to the native Espresso `withText` [matcher](https://developer.android.com/reference/androidx/test/espresso/matcher/ViewMatchers#withText(org.hamcrest.Matcher%3Cjava.lang.String%3E)) (exact match of element's text). | 'my text'
|
|
363
368
|
`-android viewtag` or `tag name` | This strategy is mapped to the native Espresso `withTagValue` [matcher](https://developer.android.com/reference/androidx/test/espresso/matcher/ViewMatchers#withtagvalue) (exact match of element's tag value). | 'my tag'
|
|
364
|
-
-android datamatcher | This strategy allows to create Espresso [data interaction](https://developer.android.com/reference/android/support/test/espresso/DataInteraction) selectors which can quickly and reliably scroll to the necessary elements. Read [Espresso DataMatcher Selector](
|
|
365
|
-
-android viewmatcher | This strategy allows
|
|
369
|
+
-android datamatcher | This strategy allows to create Espresso [data interaction](https://developer.android.com/reference/android/support/test/espresso/DataInteraction) selectors which can quickly and reliably scroll to the necessary elements. Read [Espresso DataMatcher Selector](docs/espresso-datamatcher-selector.md) to know more on how to construct these locators. Also check the [Unlocking New Testing Capabilities with Espresso Driver by Daniel Graham](https://www.youtube.com/watch?v=gU9EEUV5n9U) presentation video from Appium Conf 2019. | `{"name": "hasEntry", "args": ["title", "WebView3"]}`
|
|
370
|
+
-android viewmatcher | This strategy allows constructing of Espresso [view matchers](https://developer.android.com/reference/androidx/test/espresso/matcher/ViewMatchers) based on the given JSON representation of them. The representation is expected to contain the following fields: `name`: _mandatory_ matcher function name; `args`: _optional_ matcher function arguments, each argument could also be a function; `class`: _optional_ full qualified class name of the corresponding matcher (if not provided then [org.hamcrest.Matchers](https://hamcrest.org/JavaHamcrest/javadoc/2.2/org/hamcrest/Matchers.html) one is used), `scope` (since Espresso driver 2.11.0): _optional_ JSON representation of a [RootMatchers](https://developer.android.com/reference/androidx/test/espresso/matcher/RootMatchers) method. Check [unit tests](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/HamcrestMatcherTest.kt) for more examples. | `{"name": "withText", "args": [{"name": "containsString", "args": "getExternalStoragePublicDirectory", "class": "org.hamcrest.Matchers"}], "class": "androidx.test.espresso.matcher.ViewMatchers"}`
|
|
366
371
|
xpath | For elements lookup Xpath strategy the driver uses the same XML tree that is generated by page source API. Only Xpath 1.0 is supported. | `By.xpath("//android.view.View[@text=\"Regular\" and @checkable=\"true\"]")`
|
|
367
372
|
|
|
368
373
|
|
|
@@ -384,7 +389,7 @@ Beside of standard W3C APIs the driver provides the following custom command ext
|
|
|
384
389
|
|
|
385
390
|
### mobile: shell
|
|
386
391
|
|
|
387
|
-
Executes the given shell command on the device under test via ADB connection. This extension exposes a potential security risk and thus is only enabled when explicitly activated by the `adb_shell` server
|
|
392
|
+
Executes the given shell command on the device under test via ADB connection. This extension exposes a potential security risk and thus is only enabled when explicitly activated by the `adb_shell` server command line feature specifier
|
|
388
393
|
|
|
389
394
|
#### Arguments
|
|
390
395
|
|
|
@@ -402,7 +407,7 @@ Depending on the `includeStderr` value this API could either return a string, wh
|
|
|
402
407
|
### mobile: execEmuConsoleCommand
|
|
403
408
|
|
|
404
409
|
Executes a command through emulator telnet console interface and returns its output.
|
|
405
|
-
The `emulator_console` server
|
|
410
|
+
The `emulator_console` server feature must be enabled in order to use this method.
|
|
406
411
|
|
|
407
412
|
#### Arguments
|
|
408
413
|
|
|
@@ -419,7 +424,27 @@ The actual command output. An error is thrown if command execution fails.
|
|
|
419
424
|
|
|
420
425
|
### mobile: performEditorAction
|
|
421
426
|
|
|
422
|
-
Performs IME action on the
|
|
427
|
+
Performs IME action on the _currently focused_ edit element.
|
|
428
|
+
|
|
429
|
+
Very often Android developers use [onEditorAction](https://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html#onEditorAction(android.widget.TextView,%20int,%20android.view.KeyEvent)) callback with `actionId` argument to implement actions handling, for example, when `Search` or `Done` button is pressed on the on-screen keyboard. This mobile extension is supposed to emulate the invokation of such callback on the focused element.
|
|
430
|
+
|
|
431
|
+
#### Arguments
|
|
432
|
+
|
|
433
|
+
Name | Type | Required | Description | Example
|
|
434
|
+
--- | --- | --- | --- | ---
|
|
435
|
+
action | string | yes | The name or an integer code of the editor action to be executed. The following action names are supported: `normal, unspecified, none, go, search, send, next, done, previous`. Read [EditorInfo](https://developer.android.com/reference/android/view/inputmethod/EditorInfo) for more details on this topic. | search
|
|
436
|
+
|
|
437
|
+
#### Examples
|
|
438
|
+
|
|
439
|
+
```java
|
|
440
|
+
// Java
|
|
441
|
+
driver.executeScript("mobile: performEditorAction", ImmutableMap.of("action", "Go"));
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
```python
|
|
445
|
+
# Python
|
|
446
|
+
driver.execute_script('mobile: performEditorAction', {'action': 'previous'})
|
|
447
|
+
```
|
|
423
448
|
|
|
424
449
|
### mobile: changePermissions
|
|
425
450
|
|
|
@@ -450,7 +475,7 @@ Array of strings, where each string is a permission name. the array could be emp
|
|
|
450
475
|
|
|
451
476
|
### mobile: startScreenStreaming
|
|
452
477
|
|
|
453
|
-
Starts device screen broadcast by creating MJPEG server. Multiple calls to this method have no effect unless the previous streaming session is stopped. This method only works if the `adb_screen_streaming`
|
|
478
|
+
Starts device screen broadcast by creating MJPEG server. Multiple calls to this method have no effect unless the previous streaming session is stopped. This method only works if the `adb_screen_streaming` feature is enabled on the server side. It is also required that [GStreamer](https://gstreamer.freedesktop.org/) with `gst-plugins-base`, `gst-plugins-good` and `gst-plugins-bad` packages is installed and available in PATH on the server machine.
|
|
454
479
|
|
|
455
480
|
#### Arguments
|
|
456
481
|
|
|
@@ -856,7 +881,7 @@ appPath | string | yes | The local .apk(s) path on the server filesystem or a re
|
|
|
856
881
|
timeout | number | no | The count of milliseconds to wait until the app is installed.. 6000ms by default. | 120000
|
|
857
882
|
allowTestPackages | boolean | no | Set to true in order to allow test packages installation. false by default | true
|
|
858
883
|
useSdcard | boolean | no | Set to true to install the app on sdcard instead of the device memory. false by default | true
|
|
859
|
-
grantPermissions | boolean | no | Set to true in order to grant all the permissions requested in the application's manifest automatically after the installation is completed under Android 6+. false by default | true
|
|
884
|
+
grantPermissions | boolean | no | Set to true in order to grant all the permissions requested in the application's manifest automatically after the installation is completed under Android 6+. The targetSdkVersion in the application manifest must be greater or equal to 23 and the Android version on the device under test must be greater or equal to Android 6 (API level 23) to grant permissions. Applications whose targetSdkVersion is lower than or equal to 22 must be reisntalled to grant permissions for Android 6+ devices. false by default | true
|
|
860
885
|
replace | boolean | no | Set it to false if you don't want the application to be upgraded/reinstalled if it is already present on the device, but throw an error instead. true by default | false
|
|
861
886
|
|
|
862
887
|
### mobile: clearApp
|
|
@@ -1163,10 +1188,24 @@ For example, in the following arguments map
|
|
|
1163
1188
|
the `anotherMethod` will be called on the object returned by `someMethod`, which has no arguments and which was executed on the current activity instance. Also `anotherMethod` accepts to arguments of type `java.lang.CharSequence` and `int`. The result of `anotherMethod` will be serialized and returned to the client.
|
|
1164
1189
|
|
|
1165
1190
|
|
|
1191
|
+
## Parallel Tests
|
|
1192
|
+
|
|
1193
|
+
It is possible to execute tests in parallel using Espresso driver.
|
|
1194
|
+
Appium allows to do this on per-process (multiple server processes running on different ports managing single session)
|
|
1195
|
+
or per-request basis (single server process managing multiple sessions, more preferable, uses less resources and ensures better control over running sessions). Check [Parallel Android Tests](docs/parallel-tests.md) article for
|
|
1196
|
+
more details.
|
|
1197
|
+
|
|
1198
|
+
> **Note**
|
|
1199
|
+
> If you are _not_ going to run your tests in parallel then consider enabling the `--session-override` Appium server argument. It forces the server to close all pending sessions before a new one could be opened,
|
|
1200
|
+
> which allows you to avoid possible issues with such sessions silently running/expiring in the background.
|
|
1201
|
+
|
|
1202
|
+
|
|
1166
1203
|
## Troubleshooting
|
|
1167
1204
|
|
|
1168
|
-
* If
|
|
1169
|
-
*
|
|
1205
|
+
* If you observe Espresso server crash on startup and various exceptions about missing class/method in the logcat output then consider updating [appium:espressoBuildConfig](#espresso-build-config) capability with module versions that match your application under test. This might require some experimentation, as different apps have different module requirements. Check, for example, [issue #812](https://github.com/appium/appium-espresso-driver/issues/812)
|
|
1206
|
+
* If you experince issues with application activities being not found or not starting then consider checking [How To Troubleshoot Activities Startup](docs/activity-startup.md) article.
|
|
1207
|
+
* Espresso requires the debug APK and app-under-test APK (AUT) to have the same signature. It automatically signs the AUT with the `io.appium.espressoserver.test` signature. This may be problematic if you're using an outdated Android SDK tools and/or an outdated Java version.
|
|
1208
|
+
* If there are problems starting a session, set the capability `forceEspressoRebuild` to `true` and retry. This will force rebuilding of Espresso Server. If the following session startup is successfull, set it back to `false`, so the session startup performance is back to normal.
|
|
1170
1209
|
* If you experience session startup failures due to exceptions similar to `Resources$NotFoundException` then try to adjust your ProGuard rules:
|
|
1171
1210
|
```
|
|
1172
1211
|
-dontwarn com.google.android.material.**
|
package/build/index.js
CHANGED
|
@@ -10,11 +10,8 @@ Object.defineProperty(exports, "EspressoDriver", {
|
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
exports.default = void 0;
|
|
13
|
-
|
|
14
13
|
require("source-map-support/register");
|
|
15
|
-
|
|
16
14
|
var _driver = require("./lib/driver");
|
|
17
|
-
|
|
18
15
|
var _default = _driver.EspressoDriver;
|
|
19
16
|
exports.default = _default;
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFc3ByZXNzb0RyaXZlciJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBFc3ByZXNzb0RyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IEVzcHJlc3NvRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb0RyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBO0FBQThDLGVBRy9CQSxzQkFBYztBQUFBIn0=
|
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
-
|
|
14
10
|
var _driver = require("appium/driver");
|
|
15
|
-
|
|
16
11
|
const extensions = {};
|
|
17
|
-
|
|
18
12
|
extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}) {
|
|
19
13
|
const mobileCommandsMapping = {
|
|
20
14
|
shell: 'mobileShell',
|
|
@@ -69,14 +63,11 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
|
|
|
69
63
|
isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
|
|
70
64
|
stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording'
|
|
71
65
|
};
|
|
72
|
-
|
|
73
66
|
if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
|
|
74
67
|
throw new _driver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
|
|
75
68
|
}
|
|
76
|
-
|
|
77
69
|
return await this[mobileCommandsMapping[mobileCommand]](opts);
|
|
78
70
|
};
|
|
79
|
-
|
|
80
71
|
var _default = extensions;
|
|
81
72
|
exports.default = _default;
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiZXhlY3V0ZU1vYmlsZSIsIm1vYmlsZUNvbW1hbmQiLCJvcHRzIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsInN3aXBlIiwic2Nyb2xsVG9QYWdlIiwibmF2aWdhdGVUbyIsImNsaWNrQWN0aW9uIiwiZGV2aWNlSW5mbyIsImlzVG9hc3RWaXNpYmxlIiwib3BlbkRyYXdlciIsImNsb3NlRHJhd2VyIiwic2V0RGF0ZSIsInNldFRpbWUiLCJnZXREZXZpY2VUaW1lIiwiYmFja2Rvb3IiLCJmbGFzaEVsZW1lbnQiLCJ1aWF1dG9tYXRvciIsInVpYXV0b21hdG9yUGFnZVNvdXJjZSIsIndlYkF0b21zIiwiZ2V0Q29udGV4dHMiLCJkaXNtaXNzQXV0b2ZpbGwiLCJnZXROb3RpZmljYXRpb25zIiwibGlzdFNtcyIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwicmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMiLCJ1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzIiwibGlzdElkbGluZ1Jlc291cmNlcyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsInN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwic3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl8iLCJoYXMiLCJlcnJvcnMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgc2Nyb2xsVG9QYWdlOiAnbW9iaWxlU2Nyb2xsVG9QYWdlJyxcbiAgICBuYXZpZ2F0ZVRvOiAnbW9iaWxlTmF2aWdhdGVUbycsXG4gICAgY2xpY2tBY3Rpb246ICdtb2JpbGVDbGlja0FjdGlvbicsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBpc1RvYXN0VmlzaWJsZTogJ21vYmlsZUlzVG9hc3RWaXNpYmxlJyxcblxuICAgIG9wZW5EcmF3ZXI6ICdtb2JpbGVPcGVuRHJhd2VyJyxcbiAgICBjbG9zZURyYXdlcjogJ21vYmlsZUNsb3NlRHJhd2VyJyxcblxuICAgIHNldERhdGU6ICdtb2JpbGVTZXREYXRlJyxcbiAgICBzZXRUaW1lOiAnbW9iaWxlU2V0VGltZScsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBiYWNrZG9vcjogJ21vYmlsZUJhY2tkb29yJyxcblxuICAgIGZsYXNoRWxlbWVudDogJ21vYmlsZUZsYXNoRWxlbWVudCcsXG5cbiAgICB1aWF1dG9tYXRvcjogJ21vYmlsZVVpYXV0b21hdG9yJyxcbiAgICB1aWF1dG9tYXRvclBhZ2VTb3VyY2U6ICdtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UnLFxuXG4gICAgd2ViQXRvbXM6ICdtb2JpbGVXZWJBdG9tcycsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBkaXNtaXNzQXV0b2ZpbGw6ICdtb2JpbGVEaXNtaXNzQXV0b2ZpbGwnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIHB1c2hGaWxlOiAnbW9iaWxlUHVzaEZpbGUnLFxuICAgIHB1bGxGaWxlOiAnbW9iaWxlUHVsbEZpbGUnLFxuICAgIHB1bGxGb2xkZXI6ICdtb2JpbGVQdWxsRm9sZGVyJyxcbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG5cbiAgICBpc0FwcEluc3RhbGxlZDogJ21vYmlsZUlzQXBwSW5zdGFsbGVkJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGluc3RhbGxBcHA6ICdtb2JpbGVJbnN0YWxsQXBwJyxcbiAgICBjbGVhckFwcDogJ21vYmlsZUNsZWFyQXBwJyxcblxuICAgIHN0YXJ0QWN0aXZpdHk6ICdtb2JpbGVTdGFydEFjdGl2aXR5JyxcbiAgICBzdGFydFNlcnZpY2U6ICdtb2JpbGVTdGFydFNlcnZpY2UnLFxuICAgIHN0b3BTZXJ2aWNlOiAnbW9iaWxlU3RvcFNlcnZpY2UnLFxuICAgIGJyb2FkY2FzdDogJ21vYmlsZUJyb2FkY2FzdCcsXG5cbiAgICByZWdpc3RlcklkbGluZ1Jlc291cmNlczogJ21vYmlsZVJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzJyxcbiAgICB1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzOiAnbW9iaWxlVW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcycsXG4gICAgbGlzdElkbGluZ1Jlc291cmNlczogJ21vYmlsZUxpc3RJZGxpbmdSZXNvdXJjZXMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUEsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVyQkEsVUFBVSxDQUFDQyxhQUFhLEdBQUcsZUFBZUEsYUFBYSxDQUFFQyxhQUFhLEVBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNqRixNQUFNQyxxQkFBcUIsR0FBRztJQUM1QkMsS0FBSyxFQUFFLGFBQWE7SUFFcEJDLHFCQUFxQixFQUFFLDZCQUE2QjtJQUVwREMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxpQkFBaUIsRUFBRSx5QkFBeUI7SUFDNUNDLGNBQWMsRUFBRSxzQkFBc0I7SUFFdENDLG9CQUFvQixFQUFFLDRCQUE0QjtJQUNsREMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxLQUFLLEVBQUUsYUFBYTtJQUNwQkMsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsV0FBVyxFQUFFLG1CQUFtQjtJQUVoQ0MsVUFBVSxFQUFFLHFCQUFxQjtJQUVqQ0MsY0FBYyxFQUFFLHNCQUFzQjtJQUV0Q0MsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsV0FBVyxFQUFFLG1CQUFtQjtJQUVoQ0MsT0FBTyxFQUFFLGVBQWU7SUFDeEJDLE9BQU8sRUFBRSxlQUFlO0lBRXhCQyxhQUFhLEVBQUUscUJBQXFCO0lBRXBDQyxRQUFRLEVBQUUsZ0JBQWdCO0lBRTFCQyxZQUFZLEVBQUUsb0JBQW9CO0lBRWxDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxxQkFBcUIsRUFBRSw2QkFBNkI7SUFFcERDLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUJDLFdBQVcsRUFBRSxtQkFBbUI7SUFFaENDLGVBQWUsRUFBRSx1QkFBdUI7SUFFeENDLGdCQUFnQixFQUFFLHdCQUF3QjtJQUUxQ0MsT0FBTyxFQUFFLGVBQWU7SUFFeEJDLFNBQVMsRUFBRSxXQUFXO0lBRXRCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxVQUFVLEVBQUUsa0JBQWtCO0lBRTlCQyxjQUFjLEVBQUUsc0JBQXNCO0lBQ3RDQyxhQUFhLEVBQUUscUJBQXFCO0lBQ3BDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxTQUFTLEVBQUUsaUJBQWlCO0lBQzVCQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBRTFCQyxhQUFhLEVBQUUscUJBQXFCO0lBQ3BDQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxTQUFTLEVBQUUsaUJBQWlCO0lBRTVCQyx1QkFBdUIsRUFBRSwrQkFBK0I7SUFDeERDLHlCQUF5QixFQUFFLGlDQUFpQztJQUM1REMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxNQUFNLEVBQUUsY0FBYztJQUV0QkMsZUFBZSxFQUFFLHVCQUF1QjtJQUV4Q0MsNkJBQTZCLEVBQUUscUNBQXFDO0lBQ3BFQyxpQ0FBaUMsRUFBRSx5Q0FBeUM7SUFDNUVDLDRCQUE0QixFQUFFO0VBQ2hDLENBQUM7RUFFRCxJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsR0FBRyxDQUFDckQscUJBQXFCLEVBQUVGLGFBQWEsQ0FBQyxFQUFFO0lBQ2hELE1BQU0sSUFBSXdELGNBQU0sQ0FBQ0MsbUJBQW1CLENBQUUsMkJBQTBCekQsYUFBYyxLQUFJLEdBQy9FLFFBQU9zRCxlQUFDLENBQUNJLElBQUksQ0FBQ3hELHFCQUFxQixDQUFFLDBCQUF5QixDQUFDO0VBQ3BFO0VBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQ0EscUJBQXFCLENBQUNGLGFBQWEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQztBQUMvRCxDQUFDO0FBQUMsZUFFYUgsVUFBVTtBQUFBIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","names":["extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","_","has","errors","UnknownCommandError","keys"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA;AACA;AAEA,MAAMA,UAAU,GAAG,CAAC,CAAC;AAErBA,UAAU,CAACC,aAAa,GAAG,eAAeA,aAAa,CAAEC,aAAa,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACjF,MAAMC,qBAAqB,GAAG;IAC5BC,KAAK,EAAE,aAAa;IAEpBC,qBAAqB,EAAE,6BAA6B;IAEpDC,mBAAmB,EAAE,2BAA2B;IAEhDC,iBAAiB,EAAE,yBAAyB;IAC5CC,cAAc,EAAE,sBAAsB;IAEtCC,oBAAoB,EAAE,4BAA4B;IAClDC,mBAAmB,EAAE,2BAA2B;IAEhDC,KAAK,EAAE,aAAa;IACpBC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,UAAU,EAAE,qBAAqB;IAEjCC,cAAc,EAAE,sBAAsB;IAEtCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,OAAO,EAAE,eAAe;IACxBC,OAAO,EAAE,eAAe;IAExBC,aAAa,EAAE,qBAAqB;IAEpCC,QAAQ,EAAE,gBAAgB;IAE1BC,YAAY,EAAE,oBAAoB;IAElCC,WAAW,EAAE,mBAAmB;IAChCC,qBAAqB,EAAE,6BAA6B;IAEpDC,QAAQ,EAAE,gBAAgB;IAC1BC,WAAW,EAAE,mBAAmB;IAEhCC,eAAe,EAAE,uBAAuB;IAExCC,gBAAgB,EAAE,wBAAwB;IAE1CC,OAAO,EAAE,eAAe;IAExBC,SAAS,EAAE,WAAW;IAEtBC,QAAQ,EAAE,gBAAgB;IAC1BC,QAAQ,EAAE,gBAAgB;IAC1BC,UAAU,EAAE,kBAAkB;IAC9BC,UAAU,EAAE,kBAAkB;IAE9BC,cAAc,EAAE,sBAAsB;IACtCC,aAAa,EAAE,qBAAqB;IACpCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAC5BC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,QAAQ,EAAE,gBAAgB;IAE1BC,aAAa,EAAE,qBAAqB;IACpCC,YAAY,EAAE,oBAAoB;IAClCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAE5BC,uBAAuB,EAAE,+BAA+B;IACxDC,yBAAyB,EAAE,iCAAiC;IAC5DC,mBAAmB,EAAE,2BAA2B;IAEhDC,MAAM,EAAE,cAAc;IAEtBC,eAAe,EAAE,uBAAuB;IAExCC,6BAA6B,EAAE,qCAAqC;IACpEC,iCAAiC,EAAE,yCAAyC;IAC5EC,4BAA4B,EAAE;EAChC,CAAC;EAED,IAAI,CAACC,eAAC,CAACC,GAAG,CAACrD,qBAAqB,EAAEF,aAAa,CAAC,EAAE;IAChD,MAAM,IAAIwD,cAAM,CAACC,mBAAmB,CAAE,2BAA0BzD,aAAc,KAAI,GAC/E,QAAOsD,eAAC,CAACI,IAAI,CAACxD,qBAAqB,CAAE,0BAAyB,CAAC;EACpE;EACA,OAAO,MAAM,IAAI,CAACA,qBAAqB,CAACF,aAAa,CAAC,CAAC,CAACC,IAAI,CAAC;AAC/D,CAAC;AAAC,eAEaH,UAAU;AAAA"}
|