mirror of
https://github.com/appium/appium.git
synced 2026-11-14 22:58:05 +08:00
Compare commits
59
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
606e4c1f58 | ||
|
|
b38e251f07 | ||
|
|
ae7cfcd2cd | ||
|
|
7433a26ed7 | ||
|
|
091a2f11fe | ||
|
|
60f524164a | ||
|
|
5d73a4fb49 | ||
|
|
3f716cff52 | ||
|
|
969037c3fe | ||
|
|
d2302bdd92 | ||
|
|
4fd8c60ef8 | ||
|
|
ffa0b491c1 | ||
|
|
74c95f0a72 | ||
|
|
d21fd2baa5 | ||
|
|
2edd325fb4 | ||
|
|
14880f36ab | ||
|
|
3034fe9b7c | ||
|
|
88aa5e9d30 | ||
|
|
1cd307770f | ||
|
|
5d92756b46 | ||
|
|
0b9b2335f2 | ||
|
|
f0e8b696f8 | ||
|
|
6679fa5fbf | ||
|
|
5d06f1183a | ||
|
|
621e27dcaf | ||
|
|
515c38eda5 | ||
|
|
094d4a161d | ||
|
|
0fb1d2411b | ||
|
|
6a547ef055 | ||
|
|
d280e2af0f | ||
|
|
b6e51c6417 | ||
|
|
3d37ef27f4 | ||
|
|
0c43b4b08b | ||
|
|
4884a76988 | ||
|
|
a0a9d27f05 | ||
|
|
b915c22283 | ||
|
|
371716d945 | ||
|
|
1304e4fd60 | ||
|
|
7c7fb77f7e | ||
|
|
53f7014404 | ||
|
|
2699ff8738 | ||
|
|
1ffcb5d85c | ||
|
|
22516d1242 | ||
|
|
f45fd60baf | ||
|
|
c80a223fc4 | ||
|
|
d71fadaa05 | ||
|
|
cb2fd90d6d | ||
|
|
2d1af2bd67 | ||
|
|
a3271d17b6 | ||
|
|
9fa666a782 | ||
|
|
261886a8db | ||
|
|
171c6e6fa3 | ||
|
|
48c2a89c7d | ||
|
|
2eb2306a19 | ||
|
|
502a9df97b | ||
|
|
46a2b70f65 | ||
|
|
7b74ef96a0 | ||
|
|
f8199177f3 | ||
|
|
3988168f8e |
@@ -81,7 +81,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Use Node.js LTS
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Use Node.js LTS
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
|
||||
@@ -29,7 +29,7 @@ jobs:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Install Appium
|
||||
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
git config user.name github-actions
|
||||
git config user.email github-actions@github.com
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Install dependencies (Node.js)
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ most of which have their own changelogs. Links to these individual changelogs ar
|
||||
|
||||
## Main Appium Module
|
||||
|
||||
* ### [Appium 2 Changelog](packages/appium/CHANGELOG.md)
|
||||
* ### [Appium Changelog](packages/appium/CHANGELOG.md)
|
||||
* [Appium 1.x Changelog](https://github.com/appium/appium/blob/1.x/CHANGELOG.md)
|
||||
|
||||
## Drivers / Clients
|
||||
@@ -16,6 +16,7 @@ to driver/client documentation
|
||||
* [execute-driver-plugin](packages/execute-driver-plugin/CHANGELOG.md)
|
||||
* [images-plugin](packages/images-plugin/CHANGELOG.md)
|
||||
* [relaxed-caps-plugin](packages/relaxed-caps-plugin/CHANGELOG.md)
|
||||
* [storage-plugin](packages/storage-plugin/CHANGELOG.md)
|
||||
* [universal-xml-plugin](packages/universal-xml-plugin/CHANGELOG.md)
|
||||
|
||||
## Other Modules
|
||||
@@ -30,7 +31,6 @@ to driver/client documentation
|
||||
* [opencv](packages/opencv/CHANGELOG.md)
|
||||
* [plugin-test-support](packages/plugin-test-support/CHANGELOG.md)
|
||||
* [schema](packages/schema/CHANGELOG.md)
|
||||
* [storage-plugin](packages/storage-plugin/CHANGELOG.md)
|
||||
* [strongbox](packages/strongbox/CHANGELOG.md)
|
||||
* [support](packages/support/CHANGELOG.md)
|
||||
* [test-support](packages/test-support/CHANGELOG.md)
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
[](https://vshymanskyy.github.io/StandWithUkraine/)
|
||||
|
||||
<p align="center">
|
||||
<a href="https://appium.io/">
|
||||
<img alt="Appium" src="https://raw.githubusercontent.com/appium/appium/master/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png" width="500">
|
||||
@@ -15,6 +13,7 @@
|
||||
[](https://npmjs.org/package/appium)
|
||||
[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium?ref=badge_shield)
|
||||
[](https://github.com/vshymanskyy/StandWithUkraine/)
|
||||
[](https://www.unrwa.org/)
|
||||
|
||||
</div>
|
||||
|
||||
@@ -39,18 +38,13 @@ programming languages, which means there is an entire ecosystem of related softw
|
||||
* [__Clients__](#clients) allow writing Appium tests in your programming language of choice
|
||||
* [__Plugins__](#plugins) allow to further extend Appium functionality
|
||||
|
||||
## Migrating From Appium 1 to Appium 2
|
||||
## Upgrading From Older Versions
|
||||
|
||||
As of January 1st, 2022, the Appium team no longer maintains or supports Appium 1. All officially
|
||||
supported platform drivers are only compatible with Appium 2.
|
||||
The Appium team only provides support for the most recent version of Appium. If you wish to upgrade from
|
||||
an older major Appium version, please refer to the migration guides:
|
||||
|
||||
__[Please read the Migration Guide](https://appium.io/docs/en/latest/guides/migrating-1-to-2/) if you
|
||||
are still using Appium 1.__
|
||||
|
||||
> [!WARNING]
|
||||
> If you use Appium Desktop or Appium Server GUI, you will not be able to upgrade to Appium 2, as
|
||||
both of these tools have been deprecated. Please use [Appium Inspector](https://github.com/appium/appium-inspector)
|
||||
in combination with a standalone Appium 2 server.
|
||||
* [Appium v2 to v3](https://appium.io/docs/en/latest/guides/migrating-2-to-3/)
|
||||
* [Appium v1 to v2](https://appium.io/docs/en/latest/guides/migrating-1-to-2/)
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -139,7 +133,7 @@ appium plugin uninstall <plugin-name>
|
||||
## Server Command Line Interface
|
||||
|
||||
In order to start sending commands to the Appium server, it must be running on the URL and port
|
||||
where your client library expects it to listen. [Appium's command-line interface](http://appium.io/docs/en/latest/cli/args/)
|
||||
where your client library expects it to listen. [Appium's command-line interface](http://appium.io/docs/en/latest/cli/server/)
|
||||
is used to launch and configure the server:
|
||||
|
||||
```bash
|
||||
|
||||
+1
-1
@@ -3,4 +3,4 @@
|
||||
The old Appium 1.x docs used to be in this directory. Now, they are available only on the [1.x
|
||||
branch](https://github.com/appium/appium/tree/1.x/docs).
|
||||
|
||||
Appium 2.x docs are located in [packages/appium/docs](../packages/appium/docs) in this repo.
|
||||
Current Appium docs are located in [packages/appium/docs](../packages/appium/docs) in this repo.
|
||||
|
||||
Generated
+486
-548
File diff suppressed because it is too large
Load Diff
+11
-11
@@ -85,8 +85,8 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@colors/colors": "1.6.0",
|
||||
"@eslint/js": "9.33.0",
|
||||
"@tsconfig/node14": "14.1.4",
|
||||
"@eslint/js": "9.35.0",
|
||||
"@tsconfig/node20": "20.1.6",
|
||||
"@types/argparse": "2.0.17",
|
||||
"@types/archiver": "6.0.3",
|
||||
"@types/async-lock": "1.4.2",
|
||||
@@ -104,9 +104,9 @@
|
||||
"@types/mocha": "10.0.10",
|
||||
"@types/mv": "2.1.4",
|
||||
"@types/ncp": "2.0.8",
|
||||
"@types/node": "22.17.2",
|
||||
"@types/node": "22.18.1",
|
||||
"@types/pluralize": "0.0.33",
|
||||
"@types/semver": "7.7.0",
|
||||
"@types/semver": "7.7.1",
|
||||
"@types/serve-favicon": "2.5.7",
|
||||
"@types/shell-quote": "1.7.5",
|
||||
"@types/sinon": "17.0.4",
|
||||
@@ -121,12 +121,12 @@
|
||||
"@types/xmldom": "0.1.34",
|
||||
"@types/yargs": "17.0.33",
|
||||
"asyncbox": "3.0.0",
|
||||
"chai": "5.2.1",
|
||||
"chai-as-promised": "8.0.1",
|
||||
"chai": "6.0.1",
|
||||
"chai-as-promised": "8.0.2",
|
||||
"conventional-changelog-conventionalcommits": "7.0.2",
|
||||
"cpy-cli": "6.0.0",
|
||||
"cross-env": "10.0.0",
|
||||
"eslint": "9.33.0",
|
||||
"eslint": "9.35.0",
|
||||
"eslint-config-prettier": "10.1.8",
|
||||
"eslint-import-resolver-typescript": "4.4.4",
|
||||
"eslint-plugin-import": "2.32.0",
|
||||
@@ -140,7 +140,7 @@
|
||||
"midnight-smoker": "8.0.0",
|
||||
"mjpeg-consumer": "2.0.0",
|
||||
"mjpeg-server": "0.3.1",
|
||||
"mocha": "11.7.1",
|
||||
"mocha": "11.7.2",
|
||||
"npm-run-all2": "8.0.4",
|
||||
"prettier": "3.6.2",
|
||||
"rewiremock": "3.14.6",
|
||||
@@ -148,12 +148,12 @@
|
||||
"serve-static": "2.2.0",
|
||||
"sinon": "21.0.0",
|
||||
"sync-monorepo-packages": "1.0.2",
|
||||
"teen_process": "3.0.0",
|
||||
"teen_process": "3.0.1",
|
||||
"ts-node": "10.9.2",
|
||||
"tsd": "0.33.0",
|
||||
"typescript": "5.9.2",
|
||||
"typescript-eslint": "8.39.1",
|
||||
"webdriverio": "9.19.1",
|
||||
"typescript-eslint": "8.43.0",
|
||||
"webdriverio": "9.19.2",
|
||||
"ws": "8.18.3",
|
||||
"yaml-js": "0.3.1"
|
||||
},
|
||||
|
||||
@@ -3,7 +3,16 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.0.0](https://github.com/appium/appium/compare/appium@3.0.0-rc.2...appium@3.0.0) (2025-08-18)
|
||||
## [3.0.2](https://github.com/appium/appium/compare/appium@3.0.1...appium@3.0.2) (2025-09-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **appium:** Return a non-zero exit code if an extension script execution fails ([#21563](https://github.com/appium/appium/issues/21563)) ([5d73a4f](https://github.com/appium/appium/commit/5d73a4fb49a39bd4b81f51763e62f4e52b650f06))
|
||||
|
||||
|
||||
|
||||
## [3.0.1](https://github.com/appium/appium/compare/appium@3.0.0...appium@3.0.1) (2025-08-20)
|
||||
|
||||
**Note:** Version bump only for package appium
|
||||
|
||||
@@ -11,6 +20,17 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
||||
|
||||
|
||||
|
||||
## [3.0.0](https://github.com/appium/appium/compare/appium@3.0.0-rc.2...appium@3.0.0) (2025-08-18)
|
||||
|
||||
### Appium 3 Is Here! 🚀
|
||||
|
||||
[See the blog post](https://appium.io/docs/en/latest/blog/2025/08/07/-appium-3/)
|
||||
and [the migration guide](https://appium.io/docs/en/latest/guides/migrating-2-to-3/) for more details.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.0.0-rc.2](https://github.com/appium/appium/compare/appium@2.16.2...appium@3.0.0-rc.2) (2025-08-14)
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
[](https://vshymanskyy.github.io/StandWithUkraine/)
|
||||
|
||||
<p align="center">
|
||||
<a href="https://appium.io/">
|
||||
<img alt="Appium" src="https://raw.githubusercontent.com/appium/appium/master/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png" width="500">
|
||||
@@ -15,6 +13,7 @@
|
||||
[](https://npmjs.org/package/appium)
|
||||
[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium?ref=badge_shield)
|
||||
[](https://github.com/vshymanskyy/StandWithUkraine/)
|
||||
[](https://www.unrwa.org/)
|
||||
|
||||
</div>
|
||||
|
||||
@@ -39,18 +38,13 @@ programming languages, which means there is an entire ecosystem of related softw
|
||||
* [__Clients__](#clients) allow writing Appium tests in your programming language of choice
|
||||
* [__Plugins__](#plugins) allow to further extend Appium functionality
|
||||
|
||||
## Migrating From Appium 1 to Appium 2
|
||||
## Upgrading From Older Versions
|
||||
|
||||
As of January 1st, 2022, the Appium team no longer maintains or supports Appium 1. All officially
|
||||
supported platform drivers are only compatible with Appium 2.
|
||||
The Appium team only provides support for the most recent version of Appium. If you wish to upgrade from
|
||||
an older major Appium version, please refer to the migration guides:
|
||||
|
||||
__[Please read the Migration Guide](https://appium.io/docs/en/latest/guides/migrating-1-to-2/) if you
|
||||
are still using Appium 1.__
|
||||
|
||||
> [!WARNING]
|
||||
> If you use Appium Desktop or Appium Server GUI, you will not be able to upgrade to Appium 2, as
|
||||
both of these tools have been deprecated. Please use [Appium Inspector](https://github.com/appium/appium-inspector)
|
||||
in combination with a standalone Appium 2 server.
|
||||
* [Appium v2 to v3](https://appium.io/docs/en/latest/guides/migrating-2-to-3/)
|
||||
* [Appium v1 to v2](https://appium.io/docs/en/latest/guides/migrating-1-to-2/)
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -139,7 +133,7 @@ appium plugin uninstall <plugin-name>
|
||||
## Server Command Line Interface
|
||||
|
||||
In order to start sending commands to the Appium server, it must be running on the URL and port
|
||||
where your client library expects it to listen. [Appium's command-line interface](http://appium.io/docs/en/latest/cli/args/)
|
||||
where your client library expects it to listen. [Appium's command-line interface](http://appium.io/docs/en/latest/cli/server/)
|
||||
is used to launch and configure the server:
|
||||
|
||||
```bash
|
||||
|
||||
@@ -20,13 +20,25 @@ plugins:
|
||||
'ecosystem/build-drivers.md': 'developing/build-drivers.md'
|
||||
'ecosystem/build-plugins.md': 'developing/build-plugins.md'
|
||||
'ecosystem/build-docs.md': 'developing/build-docs.md'
|
||||
'reference/commands/base-driver.md': 'commands/base-driver.md'
|
||||
'reference/commands/execute-driver-plugin.md': 'commands/execute-driver-plugin.md'
|
||||
'reference/commands/images-plugin.md': 'commands/images-plugin.md'
|
||||
'reference/commands/relaxed-caps-plugin.md': 'commands/relaxed-caps-plugin.md'
|
||||
'reference/commands/universal-xml-plugin.md': 'commands/universal-xml-plugin.md'
|
||||
'reference/commands/base-driver.md': 'reference/api/index.md'
|
||||
'reference/commands/execute-driver-plugin.md': 'reference/api/plugins.md#execute-driver-plugin'
|
||||
'reference/commands/images-plugin.md': 'reference/api/plugins.md#images-plugin'
|
||||
'reference/commands/relaxed-caps-plugin.md': 'reference/api/plugins.md#relaxed-caps-plugin'
|
||||
'reference/commands/universal-xml-plugin.md': 'reference/api/plugins.md#universal-xml-plugin'
|
||||
'commands/index.md': 'reference/api/index.md'
|
||||
'commands/base-driver.md': 'reference/api/index.md'
|
||||
'commands/execute-driver-plugin.md': 'reference/api/plugins.md#execute-driver-plugin'
|
||||
'commands/images-plugin.md': 'reference/api/plugins.md#images-plugin'
|
||||
'commands/relaxed-caps-plugin.md': 'reference/api/plugins.md#relaxed-caps-plugin'
|
||||
'commands/storage-plugin.md': 'reference/api/plugins.md#storage-plugin'
|
||||
'commands/universal-xml-plugin.md': 'reference/api/plugins.md#universal-xml-plugin'
|
||||
'cli/index.md': 'reference/cli/index.md'
|
||||
'cli/args.md': 'reference/cli/server.md'
|
||||
'cli/env-vars.md': 'reference/cli/env-vars.md'
|
||||
'cli/extensions.md': 'reference/cli/extensions.md'
|
||||
'cli/setup.md': 'reference/cli/setup.md'
|
||||
'contributing/config-system.md': 'developing/config-system.md'
|
||||
'contributing/develop.md': 'contributing.md'
|
||||
'contributing/develop.md': 'contributing/index.md'
|
||||
|
||||
extra_css:
|
||||
- assets/stylesheets/extra.css
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Server Command-Line Arguments
|
||||
---
|
||||
|
||||
To start the Appium server, you may either run `appium` or `appium server`. The `server` subcommand
|
||||
is considered to be the default, so if you omit it, Appium will interpret this as your request to
|
||||
run the Appium server.
|
||||
|
||||
The invocation of `appium` (or `appium server`) can take a number of arguments, which are detailed
|
||||
below.
|
||||
|
||||
!!! note
|
||||
|
||||
All of these arguments can be set via a [Configuration File](../guides/config.md) instead if
|
||||
you want. Any arguments set on the command line will override any arguments found in
|
||||
a configuration file.
|
||||
|
||||
|
||||
|<div style="width:12em">Argument</div>|Description|Type|<div style="width:8em">Default</div>|Aliases|
|
||||
|--|--|--|--|--|
|
||||
|`--address`|IP address to listen on|string|`0.0.0.0`|`-a`|
|
||||
|`--allow-cors`|Whether the Appium server should allow web browser connections from any host|boolean|`false`||
|
||||
|`--allow-insecure`|Set which [insecure features](../guides/security.md) are allowed to run in this server's sessions. Most features are defined on a driver level; see driver documentation for more details. Individual features can be overridden by `--deny-insecure`. Has no effect in combination with `--relaxed-security`.|array<string>|`[]`||
|
||||
|`--base-path`|Base path to use as the prefix for all webdriver routes running on the server|string|`""`|`-pa`|
|
||||
|`--callback-address`|Callback IP address (default: same as `--address`)|string||`-ca`|
|
||||
|`--callback-port`|Callback port (default: same as `--port`) (Value must be between `1` and `65535`)|integer|`4723`|`-cp`|
|
||||
|`--config`|Path to an [Appium configuration JSON file](../guides/config.md)|string|||
|
||||
|`--debug-log-spacing`|Add exaggerated spacing in logs to help with visual inspection|boolean|`false`||
|
||||
|`--default-capabilities`|Set the default desired capabilities, which will be set on each session unless overridden by received capabilities. If a string, a path to a JSON file containing the capabilities, or raw JSON.|object||`-dc`|
|
||||
|`--deny-insecure`|Set which [insecure features](../guides/security.md) are not allowed to run in this server's sessions. Most features are defined on a driver level; see driver documentation for more details. Since all insecure features are disabled by default, this argument has no effect without either `--allow-insecure` or `--relaxed-security`, and is applied after both.|array<string>|`[]`||
|
||||
|`--driver`|Driver-specific configuration. Keys should correspond to driver package names|object|||
|
||||
|`--drivers-import-chunk-size`|The maximum amount of drivers that could be imported in parallel on server startup|number|`3`||
|
||||
|`--keep-alive-timeout`|Number of seconds the Appium server should apply as both the keep-alive timeout and the connection timeout for all requests. Setting this to `0` disables the timeout.|integer|`600`|`-ka`|
|
||||
|`--request-timeout`|Number of seconds the Appium server should apply for receiving the entire HTTP request from the client. A value of 0 disables the timeout. Set it to a non-zero value to protect against potential Denial-of-Service attacks in case the server is deployed without a reverse proxy in front. HTTP requests that are running longer than allowed by this timeout would be rejected with the status code 408.|integer|`3600`||
|
||||
|`--local-timezone`|Use local timezone for timestamps|boolean|`false`||
|
||||
|`--log`|Also send log output to this file|string||`-g`|
|
||||
|`--log-filters`|One or more log filtering rules|array|||
|
||||
|`--log-level`|Log level (console[:file]) (Value must be one of: `info`, `info:debug`, `info:info`, `info:warn`, `info:error`, `warn`, `warn:debug`, `warn:info`, `warn:warn`, `warn:error`, `error`, `error:debug`, `error:info`, `error:warn`, `error:error`, `debug`, `debug:debug`, `debug:info`, `debug:warn`, `debug:error`)|string|`debug`||
|
||||
|`--log-format`|Log format (Value must be to one of: `text`, `json`, `pretty_json`). If logs are printed as JSON then the text coloring is always disabled.|string|`text`||
|
||||
|`--log-no-colors`|Do not use color in console output|boolean|`false`||
|
||||
|`--log-timestamp`|Show timestamps in console output|boolean|`false`||
|
||||
|`--long-stacktrace`|Add long stack traces to log entries. Recommended for debugging only.|boolean|`false`||
|
||||
|`--no-perms-check`|Skip various permission checks on the server startup|boolean|`false`||
|
||||
|`--nodeconfig`|Path to configuration JSON file to register Appium as a node with Selenium Grid 3; otherwise the configuration itself|string|||
|
||||
|`--plugin`|Plugin-specific configuration. Keys should correspond to plugin package names|object|||
|
||||
|`--plugins-import-chunk-size`|The maximum amount of plugins that could be imported in parallel on server startup|number|`7`||
|
||||
|`--port`|Port to listen on (Value must be between `1` and `65535`)|integer|`4723`|`-p`|
|
||||
|`--relaxed-security`|Allow all [insecure features](../guides/security.md). Only use this if all clients are in a trusted network and could not potentially break out of the session sandbox. Specific features can be overridden by using `--deny-insecure`.|boolean|`false`||
|
||||
|`--session-override`|Enables session override (clobbering)|boolean|`false`||
|
||||
|`--ssl-cert-path`|Absolute path to the `.cert` file if TLS is used. Must be provided together with `--ssl-key-path`. See the [SSL/TLS/SPDY Support guide](../guides/tls.md) for details|string|||
|
||||
|`--ssl-key-path`|Absolute path to the `.key` file if TLS is used. Must be provided together with `--ssl-cert-path`. See the [SSL/TLS/SPDY Support guide](../guides/tls.md) for details|string|||
|
||||
|`--strict-caps`|Cause sessions to fail if desired caps are sent in that Appium does not recognize as valid for the selected device|boolean|`false`||
|
||||
|`--tmp`|Absolute path to directory Appium can use to manage temp files|string|Windows: `C:\Windows\Temp`<br>Others: `/tmp`||
|
||||
|`--trace-dir`|Absolute path to directory Appium can use to save iOS instrument traces|string|`<tmp>/appium-instruments`||
|
||||
|`--use-drivers`|A list of drivers to activate. By default, all installed drivers will be activated.|array<string>|`[]`||
|
||||
|`--use-plugins`|A list of plugins to activate. To activate all plugins, the value should be an array with a single item `"all"`.|array<string>|`[]`||
|
||||
|`--webhook`|Also send log output to this http listener|string||`-G`|
|
||||
|
||||
The following arguments are used for information retrieval, after which the server will automatically exit. They are therefore meant for reference or debug purposes.
|
||||
|
||||
|<div style="width:10em">Argument</div>|Description|Alias|
|
||||
|--|--|--|
|
||||
|`--help`|Print instructions on using the Appium command-line. This argument can also be used for any Appium subcommands.|`-h`|
|
||||
|`--show-build-info`|Print detailed information on the Appium server version||
|
||||
|`--show-config`|Print the current Appium server configuration details||
|
||||
|`--show-debug-info`|Print information on the current environment: details about the operating system, Node.js, and Appium itself||
|
||||
|`--version`|Print the Appium server version|`-v`|
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Server Environment Variables
|
||||
---
|
||||
|
||||
The primary way of configuring the Appium server is via [Command-Line Arguments](./args.md). However, some more
|
||||
advanced features are toggled or configured via environment variables. To set environment
|
||||
variables, refer to the documentation for your operating system and terminal. These are the
|
||||
environment variables that the Appium server understands:
|
||||
|
||||
|Variable |Description|
|
||||
|--------|-----------|
|
||||
|`APPIUM_HOME`|By default, Appium creates a directory called `.appium` in the home directory for your system user. You can adjust the directory with this variable, as detailed in the [Managing Extensions](../guides/managing-exts.md) guide.|
|
||||
|`APPIUM_TMP_DIR`|By default, Appium uses a random temporary directory for many of its operations. If you wish to use a specific directory, you may do so by including an absolute path as the value of this variable. The behaviour is equivalent to using the `--tmp` CLI arg.|
|
||||
|`APPIUM_PREFER_SYSTEM_UNZIP`|Set to `0` or `false` to request that Appium not use the `unzip` binary included on your system for unzipping downloaded apps or other artifacts. Instead it will use a JS-based unzip library. This could help on some systems with non-existent or non-standard `unzip` commands. Note that if unzipping fails using the system library, the fallback library will be attempted in any case, so setting this env var merely saves time in the event you know the system unzip will fail.|
|
||||
|`APPIUM_HOST`|Same as the `--address` CLI arg|
|
||||
|`APPIUM_PORT`|Same as the `--port` CLI arg|
|
||||
|`APPIUM_RELOAD_EXTENSIONS`|Set to `1` to cause Appium to re-require extensions when new sessions are created. This is mostly useful for [building extensions](../developing/build-drivers.md)|
|
||||
|`APPIUM_OMIT_PEER_DEPS`|Adds `--omit=peer` to all the NPM commands run internally by Appium. Mostly an internal feature.|
|
||||
|`APPIUM_APPS_CACHE_MAX_AGE`|Allows to set the maximum age (in minutes) for [cached applications](../guides/caching.md). The default value is `60 * 24` (24 hours). Do not set it to a lower number than the duration of a single session startup.|
|
||||
|`APPIUM_APPS_CACHE_MAX_ITEMS`|Allows to set the maximum amount of [cached applications](../guides/caching.md). The default value is `1024`. Do not set it to a lower number than the amount of apps in all parallel sessions per process.|
|
||||
|`APPIUM_APPS_CACHE_IGNORE_URL_QUERY`| If the above option is enabled then the 'search' part of the app URL will be cut off from cache keys. See the corresponding [feature request](https://discuss.appium.io/t/regarding-app-caching-when-using-aws-s3-presigned-urls/42713) for more details. Disabled by default.|
|
||||
@@ -1,226 +0,0 @@
|
||||
---
|
||||
title: Extension Command-Line Usage
|
||||
---
|
||||
|
||||
Appium allows for the flexible installation and management of various _extensions_, such as _drivers_
|
||||
(which provide Appium with the capability to automate a given platform) and _plugins_ (which can
|
||||
augment or alter the way individual Appium commands work). For a conceptual understanding of these
|
||||
entities, please review the [Introduction](../intro/index.md).
|
||||
|
||||
Management of drivers and plugins is handled by Appium's Extension CLI (command-line interface).
|
||||
|
||||
!!! note
|
||||
|
||||
This reference uses placeholders to refer to various options. Anywhere you see one of these
|
||||
placeholders in the reference, ensure you replace it with the correct type of actual content.
|
||||
|
||||
|Placeholder|Meaning|
|
||||
|--|--|
|
||||
|`<ext-type>`|"Extension type". It should be either `driver` or `plugin`. All the Extension CLI commands can be used with either drivers or plugins, so you must specify which type of extension will be used|
|
||||
|`<ext-name>`|"Extension name". This is the short name of the extension found in a call to `appium <ext-type> list`. This is distinct from the NPM package name of the extension or, in general, the "install spec" of the extension.|
|
||||
|`<install-spec>`|"Install specification". This refers to the string used to indicate what extension Appium should install.|
|
||||
|`<install-source>`|This refers to the method that Appium should use to install an extension.|
|
||||
|
||||
## Commands
|
||||
|
||||
All Extension CLI commands begin with `appium <ext-type>`, i.e., either `appium driver` or `appium
|
||||
plugin`.
|
||||
|
||||
All Extension CLI commands can take an optional `--json` argument, which will return the result of
|
||||
the command as a machine-readable JSON string rather than the standard output, which is colourized
|
||||
and tuned for human consumption.
|
||||
|
||||
### `doctor`
|
||||
|
||||
Run doctor checks for the given extension, which validate whether the extension has its prerequisites
|
||||
configured correctly. Note that not all extensions include doctor checks. See the
|
||||
[Building Doctor Checks](../developing/build-doctor-checks.md) tutorial for more details on
|
||||
how to create them.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> doctor <ext-name>
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<ext-name>`: the name of the extension whose doctor checks you want to run
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
Example (run doctor checks for the UiAutomator2 driver):
|
||||
|
||||
```
|
||||
appium driver doctor uiautomator2
|
||||
```
|
||||
|
||||
### `install`
|
||||
|
||||
Install an extension. If successful, respond with the short name of the extension which can be used
|
||||
in other invocations of the Extension CLI. If the extension is a driver, also note which platforms
|
||||
may be used with the driver.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> install <install-spec> [--source=<install-source>] [--package=<package-name>] [--json]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<install-spec>`: this is the name, location, and/or version of the extension you want to
|
||||
install. Its possible values are dependent on the `<install-source>` (see below).
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--source`: this directs Appium where to find your extension. See below for a table of possible
|
||||
source types and corresponding install specification.
|
||||
- `--package`: when `<install-source>` is `git` or `github`, `--package` is required. It should be
|
||||
the Node.js package name of the extension. Without this information, Appium will not be able to
|
||||
find the installed package.
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
|Install source type|Behaviour|
|
||||
|--|--|
|
||||
|None|This is the default behaviour when no `--source` is used. In this case, Appium will look at `<install-spec>` and match it against the name of extensions available when running `appium <ext-type> list`, i.e., against the officially recognized extension names. If found, it will install that extension at the latest version via NPM|
|
||||
|`npm`|Install an extension based on its NPM package name. Here, `<install-spec>` must be the NPM package name with any additional NPM installation modifiers, like version (see below)|
|
||||
|`github`|Install an extension via a GitHub spec of the form `<org>/<repo>`|
|
||||
|`git`|Install an extension via a Git URL (e.g., `git+ssh://git-host.com/repo.git`)|
|
||||
|`local`|Install an extension via a local path. This must be a path to the directory where the Node.js package information for the driver is located.|
|
||||
|
||||
#### NPM-based `<install-spec>`
|
||||
|
||||
When Appium is installing an extension via NPM (as is the case when `--source` is either omitted or
|
||||
set to `npm`), the `<install-spec>` can be complex, and can include any kind of information allowed
|
||||
by `npm install`:
|
||||
|
||||
- `[@scope]/<name>`
|
||||
- `[@scope]/<name>@<version>`
|
||||
- `[@scope]/<name>@<tag>`
|
||||
- `[@scope]/<name>@<version range>`
|
||||
|
||||
#### Examples
|
||||
|
||||
- Install the latest XCUITest driver:
|
||||
|
||||
```
|
||||
appium driver install xcuitest
|
||||
```
|
||||
|
||||
- Install the XCUITest driver at version 4.11.1:
|
||||
|
||||
```
|
||||
appium driver install xcuitest@4.11.1
|
||||
```
|
||||
|
||||
- Install the `beta` version of the `@appium/fake-driver` from NPM:
|
||||
|
||||
```
|
||||
appium driver install --source=npm @appium/fake-driver@beta
|
||||
```
|
||||
|
||||
- Install a locally-developed plugin:
|
||||
|
||||
```
|
||||
appium plugin install --source=local /path/to/my/plugin
|
||||
```
|
||||
|
||||
### `list`
|
||||
|
||||
List installed and available extensions. "Available" extensions include those which are officially
|
||||
recognized by the Appium team, but you are not limited to installing only the extensions displayed
|
||||
in this list.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> list [--installed] [--updates] [--json]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--installed`: show only installed extensions, not installed plus available extensions
|
||||
- `--updates`: for extensions installed via NPM, display a message if there are any updates
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
### `run`
|
||||
|
||||
Run a script included in an extension package. Extension authors can include runnable scripts that
|
||||
assist with setup or perform other tasks. These scripts are given names (called the `<script-name>`
|
||||
in this reference) by extension authors and will generally be documented in extension
|
||||
documentation.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> run <ext-name> [--json] <script-name> [script-args]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<ext-name>`: the name of the extension whose script you want to run
|
||||
- `<script-name>`: the name of the script the extension has published
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `script-args`: any arguments that Appium does not interpret as belonging to its own set of
|
||||
arguments will be passed along to the extension script
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
Example (run the `reset` script included with the UiAutomator2 driver):
|
||||
|
||||
```
|
||||
appium driver run uiautomator2 reset
|
||||
```
|
||||
|
||||
### `update`
|
||||
|
||||
Update one or more extensions that have been installed via NPM. By default, Appium will not
|
||||
automatically update any extension past a major version boundary, so as to prevent
|
||||
unintended breaking changes.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> update <ext-name> [--unsafe] [--json]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<ext-name>`: the name of the extension to update, or the string `installed` (which will update
|
||||
all installed extensions)
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--unsafe`: direct Appium to go ahead and update past a major version boundary
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
### `uninstall`
|
||||
|
||||
Remove an installed extension.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> uninstall <ext-name> [--json]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<ext-name>`: the name of the extension to uninstall
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--json`: return the result in JSON format
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Command-Line Overview
|
||||
---
|
||||
|
||||
Appium provides a command-line executable (`appium`), which will likely be your main way of interacting with
|
||||
the Appium server. This section of the Appium documentation describes how to use this executable.
|
||||
|
||||
To start off, you can run `appium -v` or `appium --version` to return the installed version,
|
||||
or run `appium -h` or `appium --help` to return the help message.
|
||||
|
||||
The main `appium` executable provides the following subcommands:
|
||||
|
||||
1. `appium server` (or simply `appium`) - launch an Appium server
|
||||
- [See here for accepted arguments](./args.md)
|
||||
- For advanced features, [see here for accepted environment variables](./env-vars.md)
|
||||
2. `appium driver` - manage Appium drivers
|
||||
- [See here for details](./extensions.md)
|
||||
3. `appium plugin` - manage Appium plugins
|
||||
- [See here for details](./extensions.md)
|
||||
4. `appium setup` - batch install a preset of drivers and plugins
|
||||
- [See here for details](./setup.md)
|
||||
|
||||
Like the main command, you can also run each subcommand with the `-h` or `--help` flag to learn more about it.
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Setup Command-Line Usage
|
||||
---
|
||||
|
||||
The `setup` command aims to simplify the initial procedure of setting up Appium. It allows to install
|
||||
multiple extensions (drivers/plugins) in one go, without the need to run
|
||||
`appium <ext-name> install <ext-name>` multiple times.
|
||||
|
||||
The command has several presets that can be used to install different sets of extensions.
|
||||
The presets are as follows:
|
||||
|
||||
|Preset|Installation Command|Included Drivers|Included Plugins|
|
||||
|--|--|--|--|
|
||||
|Mobile|`appium setup mobile` or `appium setup`|`uiautomator2`, `xcuitest`[^1], `espresso`|`images`|
|
||||
|Desktop application|`appium setup desktop`|`mac2`[^1], `windows`[^2]|`images`|
|
||||
|Desktop browser|`appium setup browser`|`safari`[^1], `gecko`, `chromium`|`images`|
|
||||
|
||||
Attempting to install a preset while already having one or more of its included extensions installed
|
||||
will only install the missing extensions.
|
||||
|
||||
Refer to the [Ecosystem documentation](../ecosystem/index.md) to learn more about the extensions
|
||||
listed above.
|
||||
|
||||
This commands also supports the functionality that allows to fully reset your Appium server
|
||||
deployment if you experience various configuration issues,
|
||||
for example, due to a failed upgrade attempt from an older Appium version, on server startup.
|
||||
By running `appium setup reset` the server would uninstall all installed drivers, plugins and their related manifest files from the currently used Appium home folder.
|
||||
|
||||
[^1]: Only installed if the host machine is running macOS.
|
||||
[^2]: Only installed if the host machine is running Windows.
|
||||
@@ -1,492 +0,0 @@
|
||||
# Driver: base-driver
|
||||
|
||||
### `createSession`
|
||||
|
||||
`POST` **`/session`**
|
||||
|
||||
Historically the first two arguments were reserved for JSONWP capabilities.
|
||||
Appium 2 has dropped the support of these, so now we only accept capability
|
||||
objects in W3C format and thus allow any of the three arguments to represent
|
||||
the latter.
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#new-session](https://w3c.github.io/webdriver/#new-session)
|
||||
|
||||
<!-- comment source: multiple -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `desiredCapabilities?` | `W3CDriverCaps`<`C`\> | the new session capabilities |
|
||||
| `requiredCapabilities?` | `W3CDriverCaps`<`C`\> | another place the new session capabilities could be sent (typically left undefined) |
|
||||
| `capabilities?` | `W3CDriverCaps`<`C`\> | another place the new session capabilities could be sent (typically left undefined) |
|
||||
|
||||
#### Response
|
||||
|
||||
`CreateResult`
|
||||
|
||||
The capabilities object representing the created session
|
||||
|
||||
### `deleteSession`
|
||||
|
||||
`DELETE` **`/session/:sessionId`**
|
||||
|
||||
Returns capabilities for the session and event history (if applicable)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`SingularSessionData`<`C`, `SessionData`\>
|
||||
|
||||
A session data object
|
||||
|
||||
### `getSession`
|
||||
|
||||
`GET` **`/session/:sessionId`**
|
||||
|
||||
Returns capabilities for the session and event history (if applicable).
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
Please use `getAppiumSessionCapabilities` to get the session capabilities.
|
||||
Please use `getLogEvents` to get event history.
|
||||
|
||||
|
||||
<!-- comment source: multiple -->
|
||||
|
||||
#### Response
|
||||
|
||||
`SingularSessionData`<`C`, `SessionData`\>
|
||||
|
||||
A session data object
|
||||
|
||||
### `getAppiumSessionCapabilities`
|
||||
|
||||
`GET` **`/session/:sessionId/appium/capabilities`**
|
||||
|
||||
Returns capabilities for the session.
|
||||
|
||||
<!-- comment source: multiple -->
|
||||
|
||||
#### Response
|
||||
|
||||
`AppiumSessionCapabilities`
|
||||
|
||||
A session data object
|
||||
|
||||
### `findElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element`**
|
||||
|
||||
Find a UI element given a locator strategy and a selector, erroring if it can't be found
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element](https://w3c.github.io/webdriver/#find-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific element |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>
|
||||
|
||||
The element object encoding the element id which can be used in element-related
|
||||
commands
|
||||
|
||||
### `findElementFromElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element/:elementId/element`**
|
||||
|
||||
Find a UI element given a locator strategy and a selector, erroring if it can't be found. Only
|
||||
look for elements among the set of descendants of a given element
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element-from-element](https://w3c.github.io/webdriver/#find-element-from-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific element |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>
|
||||
|
||||
The element object encoding the element id which can be used in element-related
|
||||
commands
|
||||
|
||||
### `findElementFromShadowRoot`
|
||||
|
||||
`POST` **`/session/:sessionId/shadow/:shadowId/element`**
|
||||
|
||||
Find an element from a shadow root
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element-from-shadow-root](https://w3c.github.io/webdriver/#find-element-from-shadow-root)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>
|
||||
|
||||
The element inside the shadow root matching the selector
|
||||
|
||||
### `findElements`
|
||||
|
||||
`POST` **`/session/:sessionId/elements`**
|
||||
|
||||
Find a a list of all UI elements matching a given a locator strategy and a selector
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-elements](https://w3c.github.io/webdriver/#find-elements)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>[]
|
||||
|
||||
A possibly-empty list of element objects
|
||||
|
||||
### `findElementsFromElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element/:elementId/elements`**
|
||||
|
||||
Find a a list of all UI elements matching a given a locator strategy and a selector. Only
|
||||
look for elements among the set of descendants of a given element
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-elements-from-element](https://w3c.github.io/webdriver/#find-elements-from-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>[]
|
||||
|
||||
A possibly-empty list of element objects
|
||||
|
||||
### `findElementsFromShadowRoot`
|
||||
|
||||
`POST` **`/session/:sessionId/shadow/:shadowId/elements`**
|
||||
|
||||
Find elements from a shadow root
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element-from-shadow-root](https://w3c.github.io/webdriver/#find-element-from-shadow-root)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>[]
|
||||
|
||||
A possibly empty list of elements inside the shadow root matching the selector
|
||||
|
||||
### `getLog`
|
||||
|
||||
`POST` **`/session/:sessionId/se/log`**
|
||||
|
||||
Get the log for a given log type.
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `type` | `string` | Name/key of log type as defined in ILogCommands.supportedLogTypes. |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
### `getLogEvents`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/events`**
|
||||
|
||||
Get a list of events that have occurred in the current session
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `type?` | `string` \| `string`[] | filter the returned events by including one or more types |
|
||||
|
||||
#### Response
|
||||
|
||||
`EventHistory` \| `Record`<`string`, `number`\>
|
||||
|
||||
The event history for the session
|
||||
|
||||
### `getLogTypes`
|
||||
|
||||
`GET` **`/session/:sessionId/se/log/types`**
|
||||
|
||||
Get available log types as a list of strings
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`string`[]
|
||||
|
||||
### `getPageSource`
|
||||
|
||||
`GET` **`/session/:sessionId/source`**
|
||||
|
||||
Get the current page/app source as HTML/XML
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#get-page-source](https://w3c.github.io/webdriver/#get-page-source)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`string`
|
||||
|
||||
The UI hierarchy in a platform-appropriate format (e.g., HTML for a web page)
|
||||
|
||||
### `getAppiumSessions`
|
||||
|
||||
`GET` **`/appium/sessions`**
|
||||
|
||||
Get data for all sessions running on an Appium server
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
A list of session data objects, where each object contains 3 keys:
|
||||
|
||||
* `id`: the session ID
|
||||
* `created`: the session creation time as a Unix timestamp in milliseconds
|
||||
* `capabilities`: the session capabilities
|
||||
|
||||
Data is only returned if the `session_discovery` [insecure feature](../guides/security.md)
|
||||
is enabled on the server.
|
||||
|
||||
#### Example
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id":"ba30c6da-c266-4734-8ddb-c16f5bb53e16",
|
||||
"created": 1736092760555,
|
||||
"capabilities":{ "platformName":"ios","browserName":"safari","automationName":"xcuitest","platformVersion":"17.2","deviceName":"iPhone 15" }
|
||||
},
|
||||
{
|
||||
"id":"1441110c-1ece-4e45-abbf-ebf404f45f0a",
|
||||
"created": 1736092760555,
|
||||
"capabilities":{ "platformName":"ios","browserName":"safari","automationName":"xcuitest","platformVersion":"17.0","deviceName":"iPhone 14" }
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
### `getSettings`
|
||||
|
||||
`GET` **`/session/:sessionId/appium/settings`**
|
||||
|
||||
Update the session's settings dictionary with a new settings object
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
``null``
|
||||
|
||||
### `updateSettings`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/settings`**
|
||||
|
||||
Update the session's settings dictionary with a new settings object
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `settings` | `Settings` | A key-value map of setting names to values. Settings not named in the map will not have their value adjusted. |
|
||||
|
||||
#### Response
|
||||
|
||||
``null``
|
||||
|
||||
### `getStatus`
|
||||
|
||||
`GET` **`/status`**
|
||||
|
||||
**`Summary`**
|
||||
|
||||
Retrieve the server's current status.
|
||||
|
||||
**`Description`**
|
||||
|
||||
Returns information about whether a remote end is in a state in which it can create new sessions and can additionally include arbitrary meta information that is specific to the implementation.
|
||||
|
||||
The readiness state is represented by the ready property of the body, which is false if an attempt to create a session at the current time would fail. However, the value true does not guarantee that a New Session command will succeed.
|
||||
|
||||
Implementations may optionally include additional meta information as part of the body, but the top-level properties ready and message are reserved and must not be overwritten.
|
||||
|
||||
<!-- comment source: builtin-interface -->
|
||||
|
||||
#### Examples
|
||||
|
||||
<!-- BEGIN:EXAMPLES -->
|
||||
##### JavaScript
|
||||
<!-- BEGIN:EXAMPLE lang=JavaScript -->
|
||||
|
||||
```js
|
||||
// webdriver.io example
|
||||
await driver.status();
|
||||
```
|
||||
|
||||
<!-- END:EXAMPLE -->
|
||||
##### Python
|
||||
<!-- BEGIN:EXAMPLE lang=Python -->
|
||||
|
||||
```python
|
||||
driver.get_status()
|
||||
```
|
||||
|
||||
<!-- END:EXAMPLE -->
|
||||
##### Java
|
||||
<!-- BEGIN:EXAMPLE lang=Java -->
|
||||
|
||||
```java
|
||||
driver.getStatus();
|
||||
```
|
||||
|
||||
<!-- END:EXAMPLE -->
|
||||
##### Ruby
|
||||
<!-- BEGIN:EXAMPLE lang=Ruby -->
|
||||
|
||||
```ruby
|
||||
# ruby_lib example
|
||||
remote_status
|
||||
|
||||
# ruby_lib_core example
|
||||
@driver.remote_status
|
||||
```
|
||||
|
||||
<!-- END:EXAMPLE -->
|
||||
<!-- END:EXAMPLES -->
|
||||
|
||||
#### Response
|
||||
|
||||
`Object`
|
||||
|
||||
### `getTimeouts`
|
||||
|
||||
`GET` **`/session/:sessionId/timeouts`**
|
||||
|
||||
Set the various timeouts associated with a session
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#set-timeouts](https://w3c.github.io/webdriver/#set-timeouts)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
``null``
|
||||
|
||||
### `timeouts`
|
||||
|
||||
`POST` **`/session/:sessionId/timeouts`**
|
||||
|
||||
Set the various timeouts associated with a session
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#set-timeouts](https://w3c.github.io/webdriver/#set-timeouts)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `type?` | `string` | used only for the old (JSONWP) command, the type of the timeout |
|
||||
| `ms?` | `string` \| `number` | used only for the old (JSONWP) command, the ms for the timeout |
|
||||
| `script?` | `number` | the number in ms for the script timeout, used for the W3C command |
|
||||
| `pageLoad?` | `number` | the number in ms for the pageLoad timeout, used for the W3C command |
|
||||
| `implicit?` | `string` \| `number` | the number in ms for the implicit wait timeout, used for the W3C command |
|
||||
|
||||
#### Response
|
||||
|
||||
``null``
|
||||
|
||||
### `logCustomEvent`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/log_event`**
|
||||
|
||||
Add a custom-named event to the Appium event log
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `vendor` | `string` | the name of the vendor or tool the event belongs to, to namespace the event |
|
||||
| `event` | `string` | the name of the event itself |
|
||||
|
||||
#### Response
|
||||
|
||||
``null``
|
||||
@@ -1,22 +0,0 @@
|
||||
# Plugin: execute-driver
|
||||
|
||||
### `executeDriverScript`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/execute_driver`**
|
||||
|
||||
Implementation of a command within a plugin
|
||||
|
||||
At minimum, `D` must be `ExternalDriver`, but a plugin can be more narrow about which drivers it supports.
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type |
|
||||
| :------ | :------ |
|
||||
| `script` | [script: string, scriptType: string, timeoutMs: number] |
|
||||
| `type?` | [script: string, scriptType: string, timeoutMs: number] |
|
||||
|
||||
#### Response
|
||||
|
||||
`unknown`
|
||||
@@ -1,89 +0,0 @@
|
||||
# Plugin: images
|
||||
|
||||
### `compareImages`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/compare_images`**
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type |
|
||||
| :------ | :------ |
|
||||
| `mode` | `any`[] |
|
||||
| `options?` | `any`[] |
|
||||
|
||||
#### Response
|
||||
|
||||
`ComparisonResult`
|
||||
|
||||
### `findElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element`**
|
||||
|
||||
Find a UI element given a locator strategy and a selector, erroring if it can't be found
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element](https://w3c.github.io/webdriver/#find-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `any` | the locator strategy |
|
||||
| `value` | `any` | the selector to combine with the strategy to find the specific element |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
The element object encoding the element id which can be used in element-related
|
||||
commands
|
||||
|
||||
### `findElements`
|
||||
|
||||
`POST` **`/session/:sessionId/elements`**
|
||||
|
||||
Find a a list of all UI elements matching a given a locator strategy and a selector
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-elements](https://w3c.github.io/webdriver/#find-elements)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `any` | the locator strategy |
|
||||
| `value` | `any` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
A possibly-empty list of element objects
|
||||
|
||||
### `performActions`
|
||||
|
||||
`POST` **`/session/:sessionId/actions`**
|
||||
|
||||
If the actions contains image elements as origin, convert them to viewport coordinates before sending it to the external driver
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#perform-actions](https://w3c.github.io/webdriver/#perform-actions)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `actions` | `ActionSequence[]` | an array of action sequences |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Intro to Commands
|
||||
---
|
||||
|
||||
Here you can find various commands exposed by the main Appium module through its base driver, as
|
||||
well as the commands available in several plugins.
|
||||
|
||||
!!! note
|
||||
|
||||
The Appium base driver only exposes a few commands, as it is not meant to be used on its own.
|
||||
Please refer to the documentation of your [Appium driver](../ecosystem/drivers.md) to learn
|
||||
about the commands it exposes, and then check your [Appium client](../ecosystem/clients.md)
|
||||
documentation for the exact syntax of that command.
|
||||
|
||||
The command listings can be found here:
|
||||
|
||||
* [Base Driver](./base-driver.md)
|
||||
* [Execute Driver Plugin](./execute-driver-plugin.md)
|
||||
* [Images Plugin](./images-plugin.md)
|
||||
* [Inspector](https://github.com/appium/appium-inspector/tree/main/plugins)
|
||||
* [Relaxed Caps Plugin](./relaxed-caps-plugin.md)
|
||||
* [Storage Plugin](./storage-plugin.md)
|
||||
* [Universal XML Plugin](./universal-xml-plugin.md)
|
||||
@@ -1,27 +0,0 @@
|
||||
# Plugin: relaxed-caps
|
||||
|
||||
### `createSession`
|
||||
|
||||
`POST` **`/session`**
|
||||
|
||||
Start a new automation session
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#new-session](https://w3c.github.io/webdriver/#new-session)
|
||||
|
||||
<!-- comment source: multiple -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `desiredCapabilities?` | `any` | the new session capabilities |
|
||||
| `requiredCapabilities?` | `any` | another place the new session capabilities could be sent (typically left undefined) |
|
||||
| `capabilities?` | `any` | another place the new session capabilities could be sent (typically left undefined) |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
The capabilities object representing the created session
|
||||
@@ -1,113 +0,0 @@
|
||||
# Plugin: storage
|
||||
|
||||
!!! tip
|
||||
|
||||
All these commands can be invoked without creating a session, allowing you to
|
||||
prepare your test environment in advance.
|
||||
|
||||
### `addStorageItem`
|
||||
|
||||
`POST` **`/storage/add`**
|
||||
|
||||
Add a new file to the storage
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `name` | `string` | the name used to save the file (must not include path separator characters) |
|
||||
| `sha1` | `string` | SHA1 hash of the file to be uploaded |
|
||||
|
||||
#### Example
|
||||
|
||||
```bash
|
||||
curl -X POST --header "Content-Type: application/json" --data '{"name":"app.ipa","sha1":"ccc963411b2621335657963322890305ebe96186"}' http://127.0.0.1:4723/storage/add
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
`AddRequestResult`
|
||||
|
||||
A JSON object in the following format:
|
||||
```json
|
||||
{
|
||||
"ws": {
|
||||
"stream": "/storage/add/ccc963411b2621335657963322890305ebe96186/stream",
|
||||
"events": "/storage/add/ccc963411b2621335657963322890305ebe96186/events"
|
||||
},
|
||||
"ttlMs": 300000
|
||||
}
|
||||
```
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `ws.stream` | `string` | the pathname of the streaming web socket used to upload the file content |
|
||||
| `ws.events` | `string` | the pathname of the events web socket used to notify about upload success or a failure |
|
||||
| `ttlMs` | `number` | the amount of milliseconds both web sockets will be kept active before they expire, or a file payload would be successfully uploaded |
|
||||
|
||||
|
||||
### `listStorageItems`
|
||||
|
||||
`GET` **`/storage/list`**
|
||||
|
||||
List all files present in the storage
|
||||
|
||||
#### Example
|
||||
|
||||
```bash
|
||||
curl http://127.0.0.1:4723/storage/list
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
`List<StorageItem>`
|
||||
|
||||
A list of items, where each item has the following properties:
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `name` | `string` | the name of the file in the storage |
|
||||
| `path` | `string` | full path to the file on the remote file system |
|
||||
| `size` | `number` | file size in bytes |
|
||||
|
||||
### `deleteStorageItem`
|
||||
|
||||
`POST` **`/storage/delete`**
|
||||
|
||||
Deletes a file in the storage with the specified name
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `name` | `string` | the name of the file to be deleted |
|
||||
|
||||
#### Example
|
||||
|
||||
```bash
|
||||
curl -X POST --header "Content-Type: application/json" --data '{"name":"app.ipa"}' http://127.0.0.1:4723/storage/delete
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
`boolean`
|
||||
|
||||
`false` if the file does not exist in the storage, or `true` upon successful file deletion
|
||||
|
||||
### `resetStorage`
|
||||
|
||||
`POST` **`/storage/reset`**
|
||||
|
||||
Deletes all uploaded files and stops any incomplete uploads.
|
||||
If the `APPIUM_STORAGE_KEEP_ALL` flag is enabled, all uploaded files will be preserved,
|
||||
and only the incomplete uploads will be stopped.
|
||||
|
||||
#### Example
|
||||
|
||||
```bash
|
||||
curl -X POST http://127.0.0.1:4723/storage/reset
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
`undefined`
|
||||
@@ -1,68 +0,0 @@
|
||||
# Plugin: universal-xml
|
||||
|
||||
### `findElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element`**
|
||||
|
||||
Find a UI element given a locator strategy and a selector, erroring if it can't be found
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element](https://w3c.github.io/webdriver/#find-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `any`[] | the locator strategy |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
The element object encoding the element id which can be used in element-related
|
||||
commands
|
||||
|
||||
### `findElements`
|
||||
|
||||
`POST` **`/session/:sessionId/elements`**
|
||||
|
||||
Find a a list of all UI elements matching a given a locator strategy and a selector
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-elements](https://w3c.github.io/webdriver/#find-elements)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------ | :------ |
|
||||
| `using` | `any`[] | the locator strategy |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
A possibly-empty list of element objects
|
||||
|
||||
### `getPageSource`
|
||||
|
||||
`GET` **`/session/:sessionId/source`**
|
||||
|
||||
Get the current page/app source as HTML/XML
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#get-page-source](https://w3c.github.io/webdriver/#get-page-source)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`string`
|
||||
|
||||
The UI hierarchy in a platform-appropriate format (e.g., HTML for a web page)
|
||||
@@ -2,8 +2,8 @@
|
||||
title: Appium's Config System
|
||||
---
|
||||
|
||||
Appium 2 supports [configuration files](../guides/config.md). A configuration file is intended to
|
||||
have (nearly) 1:1 parity with command-line arguments. An end user can supply Appium 2 with
|
||||
Appium includes support for [configuration files](../guides/config.md). A configuration file is
|
||||
intended to have (nearly) 1:1 parity with command-line arguments. An end user can supply Appium with
|
||||
a configuration file, CLI args, or both (the args have precedence over the config file).
|
||||
|
||||
This document will be a technical overview of how the configuration system works. It is intended
|
||||
@@ -323,7 +323,7 @@ One of the design goals of this system is the following:
|
||||
_An extension should be able to register custom CLI arguments with the Appium, and a user should be
|
||||
able to use them like any other argument_.
|
||||
|
||||
Previously, Appium 2 accepted arguments in this manner (via `--driverArgs`), but validation was
|
||||
Previously, Appium accepted arguments in this manner (via `--driverArgs`), but validation was
|
||||
hand-rolled and required extension implementors to use a custom API. It also required the user to
|
||||
awkwardly pass a JSON string as the configuration on the command-line. Further, no contextual help
|
||||
(via `--help`) existed for these arguments.
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Intro to Development
|
||||
title: Developing Appium Extensions
|
||||
---
|
||||
|
||||
Appium 2 is built with a modular structure, which means that Appium extensions (drivers and plugins)
|
||||
Appium is built with a modular structure, which means that Appium extensions (drivers and plugins)
|
||||
are decoupled from the main Appium module, and you only need to install the extensions that you
|
||||
want to use. This modular structure also unlocks the ability to develop entirely new extensions!
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium Clients
|
||||
---
|
||||
|
||||
@@ -9,35 +6,127 @@ You need a client to write and run Appium scripts. You'll want to become very
|
||||
familiar with your client documentation (as well as the documentation of any Selenium client that
|
||||
the Appium client depends on) since that will be your primary interface to Appium.
|
||||
|
||||
To learn more about clients, read our [Client Intro](../intro/clients.md).
|
||||
To learn more about clients, check out the [Client Intro](../intro/clients.md).
|
||||
|
||||
### Official Clients
|
||||
!!! note
|
||||
|
||||
If you maintain an Appium client that you would like to be listed here, feel free to create a PR!
|
||||
|
||||
## Official Clients
|
||||
|
||||
These clients are currently maintained by the Appium team:
|
||||
|
||||
|Client|Language|
|
||||
|-|-|
|
||||
|[Appium Java client](https://github.com/appium/java-client)|Java|
|
||||
|[Appium Python client](https://github.com/appium/python-client)|Python|
|
||||
|[Appium Ruby Core client](https://github.com/appium/ruby_lib_core) (Recommended)<br>[Appium Ruby client](https://github.com/appium/ruby_lib)|Ruby|
|
||||
|[Appium .NET client](https://github.com/appium/dotnet-client)|C#|
|
||||
### [Java Client](https://github.com/appium/java-client)
|
||||
|
||||
### Other Clients
|
||||
Language: :fontawesome-brands-java: Java
|
||||
|
||||
These clients are not maintained by the Appium team and can be used with other languages:
|
||||
=== "Setup With Maven"
|
||||
|
||||
|Client|Language|
|
||||
|-|-|
|
||||
|[WebdriverIO](https://webdriver.io/docs/appium)|Node.js|
|
||||
|[Nightwatch.js](https://nightwatchjs.org/guide/mobile-app-testing/introduction.html)|Node.js|
|
||||
|[RobotFramework](https://github.com/serhatbolsu/robotframework-appiumlibrary)|DSL|
|
||||
|[multicatch's appium-client](https://github.com/multicatch/appium-client)|Rust|
|
||||
|[SwiftAppium](https://github.com/milcgroup/swiftappium)|Swift|
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>io.appium</groupId>
|
||||
<artifactId>java-client</artifactId>
|
||||
<version>${version.you.require}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
```
|
||||
=== "Setup With Gradle"
|
||||
|
||||
```groovy
|
||||
dependencies {
|
||||
testImplementation 'io.appium:java-client:${version.you.require}'
|
||||
}
|
||||
```
|
||||
|
||||
### [Python Client](https://github.com/appium/python-client)
|
||||
|
||||
Language: :fontawesome-brands-python: Python
|
||||
|
||||
```sh title="Install From PyPi"
|
||||
pip install Appium-Python-Client
|
||||
```
|
||||
|
||||
### [Ruby Core Client](https://github.com/appium/ruby_lib_core)
|
||||
|
||||
Language: :material-language-ruby: Ruby
|
||||
|
||||
```sh title="Install From RubyGems"
|
||||
gem install appium_lib_core
|
||||
```
|
||||
|
||||
### [Ruby Client](https://github.com/appium/ruby_lib)
|
||||
|
||||
Language: :material-language-ruby: Ruby
|
||||
|
||||
This client is a wrapper for the Ruby Core Client with several helper methods, though this may
|
||||
add additional complexity, therefore the Ruby Core Client is recommended instead.
|
||||
|
||||
```sh title="Install From RubyGems"
|
||||
gem install appium_lib
|
||||
```
|
||||
|
||||
### [.NET Client](https://github.com/appium/dotnet-client)
|
||||
|
||||
Language: :simple-dotnet: C#
|
||||
|
||||
```sh title="Install Using .NET CLI"
|
||||
dotnet add package Appium.WebDriver
|
||||
```
|
||||
|
||||
## Other Clients
|
||||
|
||||
These clients are not maintained by the Appium team and can be used with other languages.
|
||||
|
||||
In general, any W3C WebDriver spec-compatible client will also integrate well with Appium, though
|
||||
some Appium-specific commands may not be implemented in other clients.
|
||||
|
||||
!!! note
|
||||
### [WebdriverIO](https://webdriver.io/docs/appium)
|
||||
|
||||
If you maintain an Appium client that you would like to be listed in the Appium docs, feel free
|
||||
to make a PR to add it to this section with a link to the documentation for the client.
|
||||
Language: :material-language-javascript: :material-language-typescript: JavaScript/TypeScript
|
||||
|
||||
```sh title="Setup Using npm"
|
||||
npm init wdio@latest .
|
||||
```
|
||||
|
||||
### [Nightwatch.js](https://nightwatchjs.org/guide/mobile-app-testing/introduction.html)
|
||||
|
||||
Language: :material-language-javascript: :material-language-typescript: JavaScript/TypeScript
|
||||
|
||||
=== "Setup For Android"
|
||||
|
||||
```sh
|
||||
npx @nightwatch/mobile-helper android --appium
|
||||
```
|
||||
|
||||
=== "Setup For iOS"
|
||||
|
||||
```sh
|
||||
npx @nightwatch/mobile-helper ios --appium
|
||||
```
|
||||
|
||||
### [RobotFramework AppiumLibrary](https://github.com/serhatbolsu/robotframework-appiumlibrary)
|
||||
|
||||
Language: :simple-robotframework: Robot Framework
|
||||
|
||||
```sh title="Install From PyPi"
|
||||
pip install robotframework-appiumlibrary
|
||||
```
|
||||
|
||||
### [multicatch's appium-client](https://github.com/multicatch/appium-client)
|
||||
|
||||
Language: :simple-rust: Rust
|
||||
|
||||
```sh title="Install Using Cargo"
|
||||
cargo add appium-client
|
||||
```
|
||||
|
||||
### [SwiftAppium](https://github.com/milcgroup/swiftappium)
|
||||
|
||||
Language: :material-language-swift: Swift
|
||||
|
||||
```sh title="Install and Setup"
|
||||
git clone https://github.com/milcgroup/SwiftAppium.git
|
||||
cd SwiftAppium
|
||||
swift build
|
||||
swift run swiftappium
|
||||
```
|
||||
|
||||
@@ -1,52 +1,207 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium Drivers
|
||||
---
|
||||
|
||||
You can't use Appium without at least one driver! Click on the link for each driver to see the
|
||||
specific installation instructions and documentation for that driver.
|
||||
|
||||
Generally, drivers can be installed using their listed installation key, with the following command:
|
||||
```
|
||||
appium driver install <installation key>
|
||||
```
|
||||
You can't use Appium without a driver! Here you can find a list of all known Appium drivers,
|
||||
along with their installation commands and links to their documentation.
|
||||
|
||||
To learn more about drivers, check out the [Driver Intro](../intro/drivers.md).
|
||||
|
||||
### Official Drivers
|
||||
!!! note
|
||||
|
||||
If you maintain an Appium driver that you would like to be listed here, feel free to create a PR!
|
||||
|
||||
## Official Drivers
|
||||
|
||||
These drivers are currently maintained by the Appium team:
|
||||
|
||||
|Driver|Installation Key|Platform(s)|Mode(s)|
|
||||
|--|--|--|--|
|
||||
|[Chromium](https://github.com/appium/appium-chromium-driver)|`chromium`|macOS, Windows, Linux|Web|
|
||||
|[Espresso](https://github.com/appium/appium-espresso-driver)|`espresso`|Android|Native|
|
||||
|[Gecko](https://github.com/appium/appium-geckodriver)|`gecko`|macOS, Windows, Linux, Android|Web|
|
||||
|[Mac2](https://github.com/appium/appium-mac2-driver)|`mac2`|macOS|Native|
|
||||
|[Safari](https://github.com/appium/appium-safari-driver)|`safari`|macOS, iOS|Web|
|
||||
|[UiAutomator2](https://github.com/appium/appium-uiautomator2-driver)|`uiautomator2`|Android|Native, Hybrid, Web|
|
||||
|[Windows](https://github.com/appium/appium-windows-driver)|`windows`|Windows|Native|
|
||||
|[XCUITest](https://github.com/appium/appium-xcuitest-driver)|`xcuitest`|iOS|Native, Hybrid, Web|
|
||||
### [Chromium](https://github.com/appium/appium-chromium-driver)
|
||||
|
||||
### Other Drivers
|
||||
* Target: Desktop and mobile Chromium browsers (Chrome, Microsoft Edge, etc.)
|
||||
* Mode: Web
|
||||
|
||||
These drivers are not maintained by the Appium team and can be used to target additional platforms:
|
||||
```sh title="Install This Driver"
|
||||
appium driver install chromium
|
||||
```
|
||||
|
||||
|Driver|Installation Key|Platform(s)|Mode(s)|Supported By|
|
||||
|--|--|--|--|--|
|
||||
|[Flutter](https://github.com/appium/appium-flutter-driver)|`--source=npm appium-flutter-driver`|iOS, Android|Native|Community|
|
||||
|[Flutter Integration](https://github.com/AppiumTestDistribution/appium-flutter-integration-driver)|`--source=npm appium-flutter-integration-driver`|iOS, Android|Native|Community / `@AppiumTestDistribution`|
|
||||
|[LG WebOS](https://github.com/headspinio/appium-lg-webos-driver)|`--source=npm appium-lg-webos-driver`|LG TV|Web|HeadSpin|
|
||||
|[Linux](https://github.com/fantonglang/appium-linux-driver)|`--source=npm @stdspa/appium-linux-driver`|Linux|Native|`@fantonglang`|
|
||||
|[Roku](https://github.com/headspinio/appium-roku-driver)|`--source=npm @headspinio/appium-roku-driver`|Roku|Native|HeadSpin|
|
||||
|[Tizen](https://github.com/Samsung/appium-tizen-driver)|`--source=npm appium-tizen-driver`|Android|Native|Community / Samsung|
|
||||
|[TizenTV](https://github.com/headspinio/appium-tizen-tv-driver)|`--source=npm appium-tizen-tv-driver`|Samsung TV|Web|HeadSpin|
|
||||
|[Youi](https://github.com/YOU-i-Labs/appium-youiengine-driver)|`--source=npm appium-youiengine-driver`|iOS, Android, macOS, Linux, tvOS|Native|Community / You.i|
|
||||
|[NovaWindows](https://github.com/AutomateThePlanet/appium-novawindows-driver)|`--source=npm appium-novawindows-driver`|Windows|Native|Community / Automate The Planet|
|
||||
### [Espresso](https://github.com/appium/appium-espresso-driver)
|
||||
|
||||
!!! note
|
||||
* Target: Android applications
|
||||
* Mode: Native
|
||||
|
||||
If you maintain an Appium driver that you would like to be listed in the Appium docs, feel free
|
||||
to make a PR to add it to this section with a link to the driver documentation.
|
||||
```sh title="Install This Driver"
|
||||
appium driver install espresso
|
||||
```
|
||||
|
||||
### [Gecko](https://github.com/appium/appium-geckodriver)
|
||||
|
||||
* Target: Desktop and mobile Gecko browsers (Firefox)
|
||||
* Mode: Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install gecko
|
||||
```
|
||||
|
||||
### [Mac2](https://github.com/appium/appium-mac2-driver)
|
||||
|
||||
* Target: macOS applications
|
||||
* Mode: Native
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install mac2
|
||||
```
|
||||
|
||||
### [Safari](https://github.com/appium/appium-safari-driver)
|
||||
|
||||
* Target: Desktop and mobile Safari browsers
|
||||
* Mode: Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install safari
|
||||
```
|
||||
|
||||
### [UiAutomator2](https://github.com/appium/appium-uiautomator2-driver)
|
||||
|
||||
* Target: Android, Android TV, Android Wear applications
|
||||
* Modes: Native, Hybrid, Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install uiautomator2
|
||||
```
|
||||
|
||||
### [Windows](https://github.com/appium/appium-windows-driver)
|
||||
|
||||
!!! warning
|
||||
|
||||
Only the Node.js-based driver part is maintained by the Appium team. The server part
|
||||
(WinAppDriver executable) is provided by Microsoft, but has not been maintained since 2022.
|
||||
|
||||
* Target: Windows applications
|
||||
* Mode: Native
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install windows
|
||||
```
|
||||
|
||||
### [XCUITest](https://appium.github.io/appium-xcuitest-driver/)
|
||||
|
||||
* Target: iOS, iPadOS, tvOS applications
|
||||
* Modes: Native, Hybrid, Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install xcuitest
|
||||
```
|
||||
|
||||
## Other Drivers
|
||||
|
||||
These drivers are not maintained by the Appium team and can be used to target other platforms:
|
||||
|
||||
### [Flutter](https://github.com/appium/appium-flutter-driver)
|
||||
|
||||
* Target: iOS and Android applications built with Flutter
|
||||
* Mode: Native
|
||||
* Supported by: Appium Team / Community
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-flutter-driver
|
||||
```
|
||||
|
||||
### [Flutter Integration](https://github.com/AppiumTestDistribution/appium-flutter-integration-driver)
|
||||
|
||||
* Target: iOS and Android applications built with Flutter
|
||||
* Mode: Native
|
||||
* Supported by: Community / `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-flutter-integration-driver
|
||||
```
|
||||
|
||||
### [LG WebOS](https://github.com/headspinio/appium-lg-webos-driver)
|
||||
|
||||
* Target: LG TV web applications
|
||||
* Mode: Web
|
||||
* Supported by: HeadSpin
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-lg-webos-driver
|
||||
```
|
||||
|
||||
### [Linux](https://github.com/fantonglang/appium-linux-driver)
|
||||
|
||||
!!! warning
|
||||
|
||||
This driver has not been maintained since 2022 and requires a custom Appium installation
|
||||
|
||||
* Target: Linux applications
|
||||
* Mode: Native
|
||||
* Supported by: `@fantonglang`
|
||||
|
||||
```sh title="Install This Driver"
|
||||
git clone https://github.com/fantonglang/appium
|
||||
cd appium
|
||||
yarn install
|
||||
node ./
|
||||
```
|
||||
|
||||
### [NovaWindows](https://github.com/AutomateThePlanet/appium-novawindows-driver)
|
||||
|
||||
!!! info
|
||||
|
||||
This driver is recommended as a drop-in replacement for the partially unmaintained
|
||||
[Windows driver](#windows)
|
||||
|
||||
* Target: Windows applications
|
||||
* Mode: Native
|
||||
* Supported by: Community / Automate The Planet
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-novawindows-driver
|
||||
```
|
||||
|
||||
### [Roku](https://github.com/headspinio/appium-roku-driver)
|
||||
|
||||
* Target: Roku channels (applications)
|
||||
* Mode: Native
|
||||
* Supported by: HeadSpin
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm @headspinio/appium-roku-driver
|
||||
```
|
||||
|
||||
### [Tizen](https://github.com/Samsung/appium-tizen-driver)
|
||||
|
||||
!!! warning
|
||||
|
||||
This driver has not been maintained since 2020 and is only compatible with Appium 1
|
||||
|
||||
* Target: Tizen applications
|
||||
* Mode: Native
|
||||
* Supported by: Community / Samsung
|
||||
|
||||
```sh title="Install This Driver"
|
||||
npm install appium-tizen-driver
|
||||
```
|
||||
|
||||
### [TizenTV](https://github.com/headspinio/appium-tizen-tv-driver)
|
||||
|
||||
* Target: Tizen TV web applications
|
||||
* Mode: Web
|
||||
* Supported by: HeadSpin
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-tizen-tv-driver
|
||||
```
|
||||
|
||||
### [You.i Engine](https://github.com/YOU-i-Labs/appium-youiengine-driver)
|
||||
|
||||
!!! warning
|
||||
|
||||
This driver has not been maintained since 2022 and is only compatible with Appium 1
|
||||
|
||||
* Target: iOS, Android, macOS, Linux, tvOS applications built with You.i Engine
|
||||
* Mode: Native
|
||||
* Supported by: Community / You.i
|
||||
|
||||
```sh title="Install This Driver"
|
||||
npm install appium-youiengine-driver
|
||||
```
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Ecosystem Overview
|
||||
title: The Appium Ecosystem
|
||||
---
|
||||
|
||||
Appium has a wide ecosystem of related software and tools. This section of the Appium documentation
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium Plugins
|
||||
---
|
||||
|
||||
@@ -9,39 +6,133 @@ Plugins offer various ways to extend or modify Appium's behaviour. They are _com
|
||||
and are not needed for standard automation functionality, but you may find them to be useful
|
||||
for more specialised automation workflows.
|
||||
|
||||
Generally, plugins can be installed using their listed installation key, with the following command:
|
||||
```
|
||||
appium plugin install <installation key>
|
||||
```
|
||||
!!! note
|
||||
|
||||
### Official Plugins
|
||||
If you maintain an Appium plugin that you would like to be listed here, feel free to create a PR!
|
||||
|
||||
## Official Plugins
|
||||
|
||||
These plugins are are currently maintained by the Appium team:
|
||||
|
||||
|<div style="width:7em">Plugin</div>|<div style="width:8em">Installation Key</div>|Description|
|
||||
|---|---|---|
|
||||
|[Execute Driver](https://github.com/appium/appium/tree/master/packages/execute-driver-plugin)|`execute-driver`|Run entire batches of commands in a single call to the Appium server|
|
||||
|[Images](https://github.com/appium/appium/tree/master/packages/images-plugin)|`images`|Image matching and comparison features|
|
||||
|[Inspector](https://github.com/appium/appium-inspector/tree/main/plugins)|`inspector`|Integrate the [Appium Inspector](https://github.com/appium/appium-inspector) directly into your Appium server installation, providing a web-based interface for inspecting and interacting with your application under test.|
|
||||
|[Relaxed Caps](https://github.com/appium/appium/tree/master/packages/relaxed-caps-plugin)|`relaxed-caps`|Relax Appium's requirement for vendor prefixes on capabilities|
|
||||
|[Storage](https://github.com/appium/appium/tree/master/packages/storage-plugin)|`storage`|Server-side storage with client-side management|
|
||||
|[Universal XML](https://github.com/appium/appium/tree/master/packages/universal-xml-plugin)|`universal-xml`|Instead of the standard XML format for iOS and Android, use an XML definition that is the same across both platforms|
|
||||
### [Execute Driver](https://github.com/appium/appium/tree/master/packages/execute-driver-plugin)
|
||||
|
||||
### Other Plugins
|
||||
Run entire batches of commands in a single call to the Appium server
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install execute-driver
|
||||
```
|
||||
|
||||
### [Images](https://github.com/appium/appium/tree/master/packages/images-plugin)
|
||||
|
||||
Add support for image matching and comparison features
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install images
|
||||
```
|
||||
|
||||
### [Inspector](https://github.com/appium/appium-inspector/tree/main/plugins)
|
||||
|
||||
Integrate the [Appium Inspector](https://appium.github.io/appium-inspector/) directly into your
|
||||
Appium server installation
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install inspector
|
||||
```
|
||||
|
||||
### [Relaxed Caps](https://github.com/appium/appium/tree/master/packages/relaxed-caps-plugin)
|
||||
|
||||
Relax Appium's requirement for vendor prefixes on capabilities
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install relaxed-caps
|
||||
```
|
||||
|
||||
### [Storage](https://github.com/appium/appium/tree/master/packages/storage-plugin)
|
||||
|
||||
Add server-side storage with client-side management
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install storage
|
||||
```
|
||||
|
||||
### [Universal XML](https://github.com/appium/appium/tree/master/packages/universal-xml-plugin)
|
||||
|
||||
Translate the default iOS and Android XML formats into a common format
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install universal-xml
|
||||
```
|
||||
|
||||
## Other Plugins
|
||||
|
||||
These plugins are not maintained by the Appium team and can provide additional functionality:
|
||||
|
||||
|<div style="width:6em">Plugin</div>|<div style="width:19em">Installation Key</div>|Description|<div style="width:13em">Supported By</div>|
|
||||
|---|---|---|---|
|
||||
|[AltUnity](https://github.com/headspinio/appium-altunity-plugin)|`--source=npm appium-altunity-plugin`|Target Unity games and apps for automation with a new context, via the AltUnityTester framework|HeadSpin|
|
||||
|[Device Farm](https://github.com/AppiumTestDistribution/appium-device-farm)|`--source=npm appium-device-farm`|Manage and create driver sessions on connected Android devices and iOS simulators|`@AppiumTestDistribution`|
|
||||
|[Gestures](https://github.com/AppiumTestDistribution/appium-gestures-plugin)|`--source=npm appium-gestures-plugin`|Perform basic gestures using W3C Actions|`@AppiumTestDistribution`|
|
||||
|[Interceptor](https://github.com/AppiumTestDistribution/appium-interceptor-plugin)|`--source=npm appium-interceptor`|Intercept and mock API requests and responses|`@AppiumTestDistribution`|
|
||||
|[OCR](https://github.com/jlipps/appium-ocr-plugin)|`--source=npm appium-ocr-plugin`|Find elements via OCR text|`@jlipps`|
|
||||
|[Reporter](https://github.com/AppiumTestDistribution/appium-reporter-plugin)|`--source=npm appium-reporter-plugin`|Generate standalone consolidated HTML reports with screenshots|`@AppiumTestDistribution`|
|
||||
|[Wait](https://github.com/AppiumTestDistribution/appium-wait-plugin)|`--source=npm appium-wait-plugin`|Manage global element wait timeouts|`@AppiumTestDistribution`|
|
||||
### [AltUnity](https://github.com/headspinio/appium-altunity-plugin)
|
||||
|
||||
!!! note
|
||||
Target Unity games and apps for automation via the AltUnityTester framework
|
||||
|
||||
If you maintain an Appium plugin that you would like to be listed in the Appium docs, feel free
|
||||
to make a PR to add it to this section with a link to the documentation for the plugin.
|
||||
Supported by: HeadSpin
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-altunity-plugin
|
||||
```
|
||||
|
||||
### [Device Farm](https://github.com/AppiumTestDistribution/appium-device-farm)
|
||||
|
||||
Manage and create driver sessions on connected Android devices and iOS simulators
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-device-farm
|
||||
```
|
||||
|
||||
### [Gestures](https://github.com/AppiumTestDistribution/appium-gestures-plugin)
|
||||
|
||||
Perform basic gestures using W3C Actions
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-gestures-plugin
|
||||
```
|
||||
|
||||
### [Interceptor](https://github.com/AppiumTestDistribution/appium-interceptor-plugin)
|
||||
|
||||
Intercept and mock API requests and responses
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-interceptor
|
||||
```
|
||||
|
||||
### [OCR](https://github.com/jlipps/appium-ocr-plugin)
|
||||
|
||||
Find elements via OCR text
|
||||
|
||||
Supported by: `@jlipps`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-ocr-plugin
|
||||
```
|
||||
|
||||
### [Reporter](https://github.com/AppiumTestDistribution/appium-reporter-plugin)
|
||||
|
||||
Generate standalone consolidated HTML reports with screenshots
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-reporter-plugin
|
||||
```
|
||||
|
||||
### [Wait](https://github.com/AppiumTestDistribution/appium-wait-plugin)
|
||||
|
||||
Manage global element wait timeouts
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-wait-plugin
|
||||
```
|
||||
|
||||
@@ -1,42 +1,57 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium-Related Tools
|
||||
---
|
||||
|
||||
There are several Appium tools that have been created to to assist with things not directly related
|
||||
to testing, such as Appium installation, test development, and more.
|
||||
The Appium ecosystem also includes several tools that have been created to assist with things not
|
||||
directly related to running tests, such as Appium installation, test development, and more.
|
||||
|
||||
### [Appium Inspector](https://appium.github.io/appium-inspector/latest/)
|
||||
!!! note
|
||||
|
||||
If you maintain an Appium tool that you would like to be listed here, feel free to create a PR!
|
||||
|
||||
## Official Tools
|
||||
|
||||
These tools are currently maintained by the Appium team:
|
||||
|
||||
### [Appium Inspector](https://appium.github.io/appium-inspector/)
|
||||
|
||||
Appium has a graphical client which can be used to inspect application screenshots, view the
|
||||
application hierarchy, run Appium commands, record app interactions, and more. It is very useful
|
||||
for Appium test development.
|
||||
application hierarchy, search for elements, run Appium commands, record app interactions, and more.
|
||||
It can be very useful for Appium test development.
|
||||
|
||||
Find downloads and more information on its GitHub page: [Appium Inspector](https://github.com/appium/appium-inspector)
|
||||
## Extension Tools
|
||||
|
||||
Appium driver or plugin developers can choose to include these tools in their driver/plugin:
|
||||
|
||||
### Appium Doctor
|
||||
|
||||
Appium Doctor is a command-line tool built into Appium drivers and plugins.
|
||||
The command is expected to be used to validate whether a driver or plugin has all of its prerequisites and other environment details set up correctly
|
||||
if the driver/plugin author implemented the `doctor` command.
|
||||
The Appium Doctor tool can be used to validate whether all prerequisites and other environment
|
||||
details needed for the driver/plugin have been set up correctly. The tool can be accessed via the
|
||||
[`doctor` command in the Appium CLI](../reference/cli/extensions.md#doctor):
|
||||
|
||||
For example, `uiautomator2` driver provides the `doctor` command below.
|
||||
|
||||
```
|
||||
appium driver doctor uiautomator2
|
||||
```sh
|
||||
appium {driver|plugin} doctor <extension-name>
|
||||
```
|
||||
|
||||
It shows no result if the driver/plugin author did not implement them.
|
||||
It shows no results if the driver/plugin author did not implement Doctor support.
|
||||
|
||||
More information on this command can be found in the [Command-Line Usage documentation](../cli/extensions.md#doctor).
|
||||
For driver/plugin developers, please read [Building Doctor Checks](../developing/build-doctor-checks.md).
|
||||
!!! note
|
||||
|
||||
### Other Tools
|
||||
If you maintain an Appium extension and would like to add Appium Doctor support for it, check
|
||||
out the documentation on [Building Doctor Checks](../developing/build-doctor-checks.md).
|
||||
|
||||
These tools are not maintained by the Appium team and can be used to assist with other problems:
|
||||
## Other Tools
|
||||
|
||||
|Name|Description|Supported By|
|
||||
|---|---|---|
|
||||
|[appium-installer](https://github.com/AppiumTestDistribution/appium-installer)|Help set up an Appium environment for Android and iOS|`@AppiumTestDistribution`|
|
||||
These tools are not maintained by the Appium team:
|
||||
|
||||
### [Appium Installer](https://github.com/AppiumTestDistribution/appium-installer)
|
||||
|
||||
Appium Installer is a command-line tool for simplifying setups of new Appium test environments.
|
||||
It includes commands for installing Appium, its drivers and plugins, as well as validating
|
||||
prerequisites for iOS or Android emulators or real devices.
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Tool"
|
||||
npm install -g appium-installer
|
||||
```
|
||||
|
||||
@@ -56,15 +56,15 @@ on per-process basis, so each test session initialized in scope of the same Appi
|
||||
of it. It is a [LRU Cache](https://www.npmjs.com/package/lru-cache) with the following limitations:
|
||||
|
||||
- Max items: 1024. You may customize it by providing a new value to
|
||||
the [APPIUM_APPS_CACHE_MAX_ITEMS](../cli/env-vars.md) environment variable.
|
||||
the [APPIUM_APPS_CACHE_MAX_ITEMS](../reference/cli/env-vars.md) environment variable.
|
||||
Do not set it to a lower number than the amount of apps in all parallel sessions per process.
|
||||
- Max time to live (TTL) for each entry: 24 hours.
|
||||
You may customize it by providing a new value to the
|
||||
[APPIUM_APPS_CACHE_MAX_AGE](../cli/env-vars.md) environment variable.
|
||||
[APPIUM_APPS_CACHE_MAX_AGE](../reference/cli/env-vars.md) environment variable.
|
||||
Do not set it to a lower number than the duration of a single session startup.
|
||||
- TTL is refreshed for each entry upon access
|
||||
- By default the full application URL is used as cache key. You may change this behavior
|
||||
by enabling the [APPIUM_APPS_CACHE_IGNORE_URL_QUERY](../cli/env-vars.md) environment variable.
|
||||
by enabling the [APPIUM_APPS_CACHE_IGNORE_URL_QUERY](../reference/cli/env-vars.md) environment variable.
|
||||
If the above option is enabled then the 'search' part of the app URL will be cut off from cache keys.
|
||||
See the corresponding [feature request](https://discuss.appium.io/t/regarding-app-caching-when-using-aws-s3-presigned-urls/42713)
|
||||
for more details.
|
||||
|
||||
@@ -144,7 +144,7 @@ drivers and plugins. It is of course up to each service provider how they wish t
|
||||
discovery, installation, and availability of any official or third party drivers or plugins. But
|
||||
the Appium team does provide several suggestions, for consistency across the industry. _These are
|
||||
recommendations only,_ and not a standard, but adopting it will help users to navigate the increased
|
||||
complexity that working with Appium 2 in a cloud environment may bring.
|
||||
complexity that working with Appium in a cloud environment may bring.
|
||||
|
||||
### Suggested capabilities
|
||||
|
||||
|
||||
@@ -68,6 +68,6 @@ generate various kinds of reports from event timings output:
|
||||
## Add a custom event
|
||||
|
||||
You can add custom events that will show up in the event timings data. You can send a custom event
|
||||
name to the Appium server using the [Log Custom Event API](../commands/base-driver.md#logcustomevent),
|
||||
and the server will store the timestamp. The [Get Log Events](../commands/base-driver.md#getlogevents)
|
||||
name to the Appium server using the [Log Custom Event API](../reference/api/appium.md#logcustomevent),
|
||||
and the server will store the timestamp. The [Get Log Events](../reference/api/appium.md#getlogevents)
|
||||
command can be used to retrieve named events' timestamps later on.
|
||||
|
||||
@@ -16,7 +16,7 @@ two basic strategies: using Appium's extension CLI interface, or managing extens
|
||||
|
||||
## Using Appium's Extension CLI
|
||||
|
||||
With Appium's [Extension CLI](../cli/extensions.md), you let Appium manage drivers and plugins for
|
||||
With Appium's [Extension CLI](../reference/cli/extensions.md), you let Appium manage drivers and plugins for
|
||||
you. You will use CLI commands to tell Appium which extensions you would like to install, update,
|
||||
or remove. Here's an example of how you might install a driver using the CLI:
|
||||
|
||||
|
||||
@@ -35,11 +35,11 @@ When it comes to installing Appium 2 drivers, there are several approaches you c
|
||||
```bash
|
||||
npm i -g appium --drivers=xcuitest,uiautomator2
|
||||
```
|
||||
* Use the [Appium Extension CLI](../cli/extensions.md), for example:
|
||||
* Use the [Appium Extension CLI](../reference/cli/extensions.md), for example:
|
||||
```bash
|
||||
appium driver install uiautomator2
|
||||
```
|
||||
* Use the [Appium Setup CLI command](../cli/setup.md) (added in Appium `2.6`), for example:
|
||||
* Use the [Appium Setup CLI command](../reference/cli/setup.md) (added in Appium `2.6`), for example:
|
||||
```bash
|
||||
appium setup mobile
|
||||
```
|
||||
@@ -73,7 +73,7 @@ server and drivers are separate packages, they can release new versions independ
|
||||
other - this means that you no longer need to wait for a new Appium server release, but can install
|
||||
the latest driver versions right away.
|
||||
|
||||
Checking for driver updates is done by using the [Appium Extension CLI](../cli/extensions.md):
|
||||
Checking for driver updates is done by using the [Appium Extension CLI](../reference/cli/extensions.md):
|
||||
|
||||
```bash
|
||||
appium driver list --updates
|
||||
@@ -96,7 +96,7 @@ server package.
|
||||
|
||||
!!! info "Actions Needed"
|
||||
|
||||
Make sure to use the [Appium Extension CLI](../cli/extensions.md) to manage your drivers
|
||||
Make sure to use the [Appium Extension CLI](../reference/cli/extensions.md) to manage your drivers
|
||||
|
||||
### Deprecated Packages No Longer Supported
|
||||
|
||||
@@ -125,7 +125,7 @@ path to `/`, therefore the default server URL is now `http://localhost:4723/`.
|
||||
|
||||
In your test scripts, change the base path of the target server URL from `/wd/hub` to `/`.
|
||||
Alternatively, you can retain the Appium 1 base path by launching Appium with the
|
||||
`--base-path=/wd/hub` [command-line argument](../cli/args.md).
|
||||
`--base-path=/wd/hub` [command-line argument](../reference/cli/server.md).
|
||||
|
||||
### Server Port 0 No Longer Supported
|
||||
|
||||
@@ -157,8 +157,7 @@ appium --driver-xcuitest-webdriveragent-port=5000 # Appium 2
|
||||
appium --chromedriver-version=100 # Appium 1
|
||||
CHROMEDRIVER_VERSION=100 appium # Appium 2
|
||||
```
|
||||
* Some options can now be passed as [capabilities](https://appium.io/docs/en/latest/guides/caps/),
|
||||
for example:
|
||||
* Some options can now be passed as [capabilities](./caps.md), for example:
|
||||
```
|
||||
appium --chromedriver-executable=/path/to/chromedriver # Appium 1
|
||||
{"appium:chromedriverExecutable": "/path/to/chromedriver"} # Appium 2
|
||||
@@ -345,7 +344,7 @@ wish to take advantage of with Appium 2:
|
||||
|
||||
You are no longer limited to official drivers or plugins, or ones that the Appium team even knows
|
||||
about! Developers can now create their own custom drivers or plugins, which can be installed via
|
||||
Appium's [Extension CLI](../cli/extensions.md) from `npm`, `git`, GitHub, or even the local
|
||||
Appium's [Extension CLI](../reference/cli/extensions.md) from `npm`, `git`, GitHub, or even the local
|
||||
filesystem. Interested in building a driver or plugin? Check out the
|
||||
[Building Drivers](../developing/build-drivers.md) and
|
||||
[Building Plugins](../developing/build-plugins.md) guides.
|
||||
|
||||
@@ -32,7 +32,8 @@ ended before the release of Appium 2, which meant that even users on outdated No
|
||||
able to use it.
|
||||
|
||||
Appium 3 drops support for outdated Node versions, and bumps the minimum required version to Node
|
||||
`20.19.0`, as well as the minimum `npm` version to `10`.
|
||||
`20.19.0` (with the semver range `^20.19.0 || ^22.12.0 || >=24.0.0`), as well as the minimum `npm`
|
||||
version to `10`.
|
||||
|
||||
!!! info "Actions Needed"
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ this is the responsibility of the server admin who configures and launches the A
|
||||
|
||||
## Security Server Args
|
||||
|
||||
The [Server CLI Args](../cli/args.md) doc outlines three relevant arguments which may be passed to
|
||||
The [Server CLI](../reference/cli/server.md) doc outlines three relevant arguments which may be passed to
|
||||
Appium when starting it from the command line:
|
||||
|
||||
|<div style="width:10em">Parameter</div>|Description|
|
||||
|
||||
@@ -49,11 +49,11 @@ Android TV, Samsung), and more!
|
||||
- Check out the [__Introduction__](./intro/index.md) to make sure you understand the key concepts
|
||||
- Go through the [__Quickstart__](./quickstart/index.md) to get set up and run a basic Android test
|
||||
- Visit the [__Ecosystem__](./ecosystem/index.md) page for a list of drivers, clients and plugins you may want to use
|
||||
- Refer to the [__CLI Reference__](./cli/index.md) for using Appium from the command line
|
||||
- See the [__Command Reference__](./commands/index.md) for a list of commands exposed by Appium and plugins
|
||||
- Read the different [__Guides__](./guides/migrating-1-to-2.md) for a variety of instructions, tips and tricks
|
||||
- Check out various third-party [__Resources__](./resources.md) to explore Appium around the web
|
||||
- Consult the [__Reference__](./reference/index.md) page for information on the Appium CLI and supported endpoints
|
||||
- Read the different [__Guides__](./guides/migrating-2-to-3.md) for a variety of instructions, tips and tricks
|
||||
- Check out various third-party [__Resources__](./resources/index.md) to explore Appium around the web
|
||||
- For creating your own Appium extensions, see the [__Developer__](./developing/index.md) documentation
|
||||
- For contributions to Appium itself, refer to the [__Contributing__](./contributing.md) page
|
||||
- For contributions to Appium itself, refer to the [__Contributing__](./contributing/index.md) page
|
||||
- Have a look at the [__Appium Blog__](./blog/index.md) to learn what's new in the project
|
||||
|
||||
</div>
|
||||
|
||||
@@ -107,7 +107,7 @@ differently from one another. The tools and requirements for building and using
|
||||
different platforms are completely different. And so Appium lets you use just the drivers that you
|
||||
need for your automation tasks. Choosing drivers and installing them so that you can use them with
|
||||
your Appium instance is so important that Appium has its very own [CLI for managing
|
||||
drivers](../cli/extensions.md).
|
||||
drivers](../reference/cli/extensions.md).
|
||||
|
||||
So, to answer our original question, the way that Appium provides access to automation capabilities
|
||||
for a given platform is that the Appium team (or anyone else[^3]) writes a *driver* for that
|
||||
@@ -190,9 +190,9 @@ will never have time to build. And so, with Appium 2, Appium has released a plug
|
||||
enables anyone to build and share modules that change how Appium works!
|
||||
|
||||
In the same way that drivers are easily shareable and consumable via the Appium driver CLI, plugins
|
||||
can be published and consumed via a parallel [Plugin CLI](../cli/extensions.md). Plugins can do all
|
||||
sorts of things, for example adding the ability for Appium to find and interact with screen regions
|
||||
based on a template image (as in the [`images`
|
||||
can be published and consumed via a parallel [Plugin CLI](../reference/cli/extensions.md). Plugins
|
||||
can do all sorts of things, for example adding the ability for Appium to find and interact with
|
||||
screen regions based on a template image (as in the [`images`
|
||||
plugin](https://github.com/appium/appium/tree/master/packages/images-plugin)). There are very few
|
||||
limitations on what you can do with plugins, so you might also be interested in learning how to
|
||||
[Build Plugins](../developing/build-plugins.md) in Node.js that can be used with Appium.
|
||||
|
||||
@@ -157,8 +157,7 @@ it was easy for users or third-party developers to build their own Appium
|
||||
on the Appium codebase, and to see support for new platforms added to Appium by
|
||||
groups other than the core team. That vision has begun to be fulfilled, with
|
||||
groups like Microsoft and Youi.tv adding drivers to Appium for Windows desktop
|
||||
app automation and Youi.tv app automation, respectively. Who knows what
|
||||
platforms will be added next?
|
||||
app automation and Youi.tv app automation, respectively.
|
||||
|
||||
## Appium To The People
|
||||
|
||||
@@ -172,11 +171,26 @@ foundation, we hope that the door will open even more widely for new
|
||||
contributors, either as individuals or representing one of the many companies
|
||||
which now have an interest in seeing Appium move forward.
|
||||
|
||||
Eventually, the JS Foundation merged into the [OpenJS Foundation](https://openjsf.org), and Appium
|
||||
is currently an Impact Project in the foundation.
|
||||
Eventually, the JS Foundation merged into the [OpenJS Foundation](https://openjsf.org),
|
||||
and Appium became an Impact Project in the foundation.
|
||||
|
||||
## Appium 2.0
|
||||
|
||||
Appium 2 was released in 2023, with a new focus on Appium as an ecosystem rather than a singular
|
||||
project. Drivers and plugins can be developed and shared by anyone, opening up a world of
|
||||
possibilities for automation-related development for platforms far beyond iOS and Android.
|
||||
Appium 2 was released in 2023 and introduced an entirely revamped architecture, shifting focus to Appium
|
||||
as an ecosystem rather than an all-in-one project. This unlocked the ability for anyone to develop
|
||||
and share their own Appium extensions (drivers and plugins), opening up a world of possibilities
|
||||
for automation-related development for platforms far beyond iOS and Android! As a result,
|
||||
many third-party extensions were created, such as new drivers for Flutter and Windows, plugins for
|
||||
mocking APIs and managing device farms, new Appium clients based on Rust and Swift, and much more.
|
||||
|
||||
Around this time was also when we started a sponsorship program for Appium, which attracted various
|
||||
major and minor sponsors alike. This allowed us to give back to the Appium community, by compensating
|
||||
contributors for their voluntary work on the project.
|
||||
|
||||
## Appium 3.0
|
||||
|
||||
2025 saw the release of Appium 3. This update was a lot smaller than Appium 2 and included only a
|
||||
few behavioral changes, instead focusing on removing deprecated code and updating compatibility for
|
||||
more modern ecosystems. Still, this reduced scope was also to be expected: since Appium 2, the
|
||||
main feature development efforts had shifted to individual drivers and plugins, many of which had
|
||||
gone through multiple major updates during the Appium 2 era.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Quickstart Intro
|
||||
title: Getting Started
|
||||
---
|
||||
|
||||
Let's get up and running with Appium! To successfully use this quickstart, it's recommended that
|
||||
|
||||
@@ -21,7 +21,7 @@ npm install -g appium
|
||||
|
||||
## Starting Appium
|
||||
|
||||
Appium can be started [using the command line](../cli/index.md):
|
||||
Appium can be started [using the command line](../reference/cli/index.md):
|
||||
|
||||
```
|
||||
appium
|
||||
|
||||
@@ -26,4 +26,4 @@ require the developer toolchain and SDKs for that platform to be installed.
|
||||
|
||||
In order to assist with driver requirements, each (official) driver comes with the Appium Doctor tool,
|
||||
which allows to verify if all requirements have been set up. Learn more about how to use this tool in
|
||||
the [Command-Line Usage documentation](../cli/extensions.md#doctor).
|
||||
the [Command-Line Usage documentation](../reference/cli/extensions.md#doctor).
|
||||
|
||||
@@ -12,7 +12,7 @@ Now, we get inside the directory and create a new [NUnit](https://nunit.org/) pr
|
||||
|
||||
```bash
|
||||
cd dotnet-client
|
||||
dotnet new nunit --name appiumtest
|
||||
dotnet new nunit --name appiumtest
|
||||
|
||||
cd appiumtest
|
||||
|
||||
@@ -61,10 +61,10 @@ public class Tests
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestBattery()
|
||||
public void TestFindApps()
|
||||
{
|
||||
_driver.StartActivity("com.android.settings", ".Settings");
|
||||
_driver.FindElement(By.XPath("//*[@text='Battery']")).Click();
|
||||
_driver.FindElement(By.XPath("//*[@text='Apps']")).Click();
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -74,7 +74,7 @@ public class Tests
|
||||
It's not within the scope of this guide to give a complete run-down on the dotnet client
|
||||
library or everything that's happening here, so we'll leave the code itself unexplained in
|
||||
detail for now. You may want to read up particularly on Appium
|
||||
[Capabilities](../guides/caps.md) in addition to familiarizing yourself with the
|
||||
[Capabilities](../guides/caps.md) in addition to familiarizing yourself with the
|
||||
[dotnet client driver documentation](https://github.com/appium/dotnet-client/) for a fuller explanation
|
||||
of the various API commands you see and what their purpose is.
|
||||
|
||||
@@ -83,7 +83,7 @@ Basically, this code is doing the following:
|
||||
1. Defining a set of "Capabilities" (parameters) to send to the Appium server so Appium knows what
|
||||
kind of thing you want to automate. Some of these parameters can be overridden using environment variables.
|
||||
1. Starting an Appium session on the built-in Android settings app.
|
||||
1. Finding the "Battery" list item and clicking it.
|
||||
1. Finding the "Apps" list item and clicking it.
|
||||
1. Ending the Appium session.
|
||||
|
||||
That's it! Let's give it a try. Before you run the test, make sure that you have an Appium server
|
||||
@@ -100,6 +100,6 @@ dotnet test
|
||||
# Passed! - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: 323 ms - appiumtest.dll (net7.0)
|
||||
```
|
||||
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Battery" view in the emulator before the app closes again.
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Apps" view in the emulator before the app closes again.
|
||||
|
||||
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
|
||||
|
||||
@@ -57,7 +57,7 @@ Basically, this code is doing the following:
|
||||
1. Defining a set of "Capabilities" (parameters) to send to the Appium server so Appium knows what
|
||||
kind of thing you want to automate.
|
||||
1. Starting an Appium session on the built-in Android settings app.
|
||||
1. Finding the "Battery" list item and clicking it.
|
||||
1. Finding the "Apps" list item and clicking it.
|
||||
1. Pausing for a moment purely for visual effect.
|
||||
1. Ending the Appium session.
|
||||
|
||||
@@ -69,7 +69,7 @@ to one. Then, you can execute the script:
|
||||
node test.js
|
||||
```
|
||||
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Battery" view before the
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Apps" view before the
|
||||
app closes again.
|
||||
|
||||
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
|
||||
|
||||
@@ -42,7 +42,7 @@ Basically, this code is doing the following:
|
||||
1. Defining a set of "Capabilities" (parameters) to send to the Appium server so Appium knows what
|
||||
kind of thing you want to automate.
|
||||
1. Starting an Appium session on the built-in Android settings app.
|
||||
1. Finding the "Battery" list item and clicking it.
|
||||
1. Finding the "Apps" list item and clicking it.
|
||||
1. Pausing for a moment purely for visual effect.
|
||||
1. Ending the Appium session.
|
||||
|
||||
@@ -54,7 +54,7 @@ to one. Then, you can execute the script:
|
||||
python test.py
|
||||
```
|
||||
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Battery" view before the
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Apps" view before the
|
||||
app closes again.
|
||||
|
||||
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
|
||||
|
||||
@@ -64,7 +64,7 @@ Basically, this code is doing the following:
|
||||
1. Defining a set of "Capabilities" (parameters) to send to the Appium server so Appium knows what
|
||||
kind of thing you want to automate.
|
||||
1. Starting an Appium session on the built-in Android settings app.
|
||||
1. Finding the "Battery" list item and clicking it.
|
||||
1. Finding the "Apps" list item and clicking it.
|
||||
1. Pausing for a moment purely for visual effect.
|
||||
1. Ending the Appium session.
|
||||
|
||||
@@ -77,7 +77,7 @@ to one. Then, you can execute the script:
|
||||
bundle exec ruby test.rb
|
||||
```
|
||||
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Battery" view before the
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Apps" view before the
|
||||
app closes again.
|
||||
|
||||
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
|
||||
|
||||
@@ -62,7 +62,7 @@ set up on your system, so you can get busy making Android apps if you want!
|
||||
|
||||
### Standard Install
|
||||
|
||||
Like all Appium drivers, the UiAutomator2 driver is installed via the [Appium Extension CLI](../cli/extensions.md).
|
||||
Like all Appium drivers, the UiAutomator2 driver is installed via the [Appium Extension CLI](../reference/cli/extensions.md).
|
||||
Since UiAutomator2 is maintained by the core Appium team, it has an 'official' driver name
|
||||
(`uiautomator2`), which makes the installation simpler.
|
||||
|
||||
@@ -89,7 +89,7 @@ must be used to select this driver for use during an Appium session (in this cas
|
||||
|
||||
!!! note
|
||||
|
||||
In this quickstart we have used the [Extension CLI](../cli/extensions.md) to install the
|
||||
In this quickstart we have used the [Extension CLI](../reference/cli/extensions.md) to install the
|
||||
UiAutomator2 driver, but if you are incorporating Appium into a Node.js project, you might
|
||||
prefer to use `npm` to manage Appium and its connected drivers. To learn more about this
|
||||
technique, visit the guide on [managing Appium extensions](../guides/managing-exts.md).
|
||||
@@ -108,7 +108,7 @@ Running this will install Appium's mobile-specific drivers: UiAutomator2, [XCUIT
|
||||
(only if running macOS), and [Espresso](https://github.com/appium/appium-espresso-driver).
|
||||
|
||||
You can also use this command to batch install drivers for desktop applications or desktop browsers.
|
||||
For more details on this, refer to the [Setup command documentation](../cli/setup.md).
|
||||
For more details on this, refer to the [Setup command documentation](../reference/cli/setup.md).
|
||||
|
||||
### Validating the Install
|
||||
|
||||
|
||||
@@ -0,0 +1,394 @@
|
||||
---
|
||||
title: Appium Protocol
|
||||
---
|
||||
<style>
|
||||
ul[data-md-component="toc"] .md-nav {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints used in Appium that are defined in the Appium extension of the
|
||||
W3C WebDriver protocol.
|
||||
|
||||
### getAppiumSessions
|
||||
|
||||
```
|
||||
GET /appium/sessions
|
||||
```
|
||||
|
||||
Retrieves information about all active server sessions.
|
||||
|
||||
!!! info
|
||||
|
||||
The `session_discovery` [insecure feature](../../guides/security.md) must be enabled to use this endpoint.
|
||||
|
||||
#### Response
|
||||
|
||||
`TimestampedMultiSessionData[]` - an array of session data objects. Each object has the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`capabilities`|Session capabilities|object|
|
||||
|`created`|Session creation time (in milliseconds) as a Unix timestamp|number|
|
||||
|`id`|Session ID|string|
|
||||
|
||||
### getAppiumSessionCapabilities
|
||||
|
||||
```
|
||||
GET /session/:sessionId/appium/capabilities
|
||||
```
|
||||
|
||||
Retrieves the [session capabilities](../../guides/caps.md).
|
||||
|
||||
#### Response
|
||||
|
||||
`SessionCapabilities` - an object with the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`capabilities`|Session capabilities|object|
|
||||
|
||||
### getSettings
|
||||
|
||||
```
|
||||
GET /session/:sessionId/appium/settings
|
||||
```
|
||||
|
||||
Retrieves the [current session settings](../../guides/settings.md).
|
||||
|
||||
#### Response
|
||||
|
||||
`Settings` - an object containing setting names and their values
|
||||
|
||||
### updateSettings
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/settings
|
||||
```
|
||||
|
||||
Updates the specified session settings. Any other previously set settings will remain unchanged.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`settings`|Object containing the names and values of the settings to be updated|object|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### listCommands
|
||||
|
||||
```
|
||||
GET /session/:sessionId/appium/commands
|
||||
```
|
||||
|
||||
Retrieves the URL endpoints and WebDriver BiDi commands supported in the current session.
|
||||
|
||||
#### Response
|
||||
|
||||
`ListCommandsResponse` - an object containing all supported endpoints and BiDi commands, grouped by
|
||||
their origin (base Appium, driver-specific, or plugin-specific). Refer to [the type definition file](https://github.com/appium/appium/blob/master/packages/types/lib/command.ts)
|
||||
for a detailed structure of this object.
|
||||
|
||||
### listExtensions
|
||||
|
||||
```
|
||||
GET /session/:sessionId/appium/extensions
|
||||
```
|
||||
|
||||
Retrieves the [execute methods](../../guides/execute-methods.md) supported in the current session.
|
||||
|
||||
#### Response
|
||||
|
||||
`ListExtensionsResponse` - an object containing all supported execute methods, grouped by their
|
||||
origin (driver-specific or plugin-specific). Refer to [the type definition file](https://github.com/appium/appium/blob/master/packages/types/lib/command.ts)
|
||||
for a detailed structure of this object.
|
||||
|
||||
### getLogEvents
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/events
|
||||
```
|
||||
|
||||
Retrieves events that have occurred in the current session. By default, only driver command
|
||||
executions are recorded in the log, but drivers or plugins may define additional event types.
|
||||
Clients can log events by using the [`logCustomEvent`](#logcustomevent) endpoint.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`type?`|One or more types to filter the returned events|string or array<string>|
|
||||
|
||||
#### Response
|
||||
|
||||
`EventHistory` - an object whose keys correspond to the types of logged events. Event types can be
|
||||
grouped into three categories, as shown by the following example response:
|
||||
|
||||
```json
|
||||
{
|
||||
"commands": [
|
||||
{ "cmd": "getStatus", "startTime": 1756887645447, "endTime": 1756887645454 }
|
||||
],
|
||||
"driverevent": [1756887645454],
|
||||
"namespace:event": [1756887645454]
|
||||
}
|
||||
```
|
||||
|
||||
* The `commands` key is always included in the endpoint response. Its value is an array of objects,
|
||||
where each object includes 3 parameters:
|
||||
* `cmd`: name of the executed command
|
||||
* `startTime`: the command execution start time (in milliseconds), as a Unix timestamp
|
||||
* `endTime`: the command execution end time (in milliseconds), as a Unix timestamp
|
||||
* Other non-namespaced keys are specific to driver/plugin implementations. Their value is an array
|
||||
of event times (in milliseconds), as Unix timestamps.
|
||||
* Namespaced keys can be added using the `logCustomEvent` endpoint, but may also be provided by
|
||||
drivers/plugins. Their value is an array of event times (in milliseconds), as Unix timestamps.
|
||||
|
||||
### logCustomEvent
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/log_event
|
||||
```
|
||||
|
||||
Logs a custom event, which can be retrieved using the [`getLogEvents`](#getlogevents) endpoint.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`vendor`|Name of the namespace (vendor) used to prefix the event|string|
|
||||
|`event`|Name of the event|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getDeviceTime
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/system_time
|
||||
```
|
||||
|
||||
Retrieves the current system time of the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`format?`|Format to use for the returned timestamp|string|`YYYY-MM-DDTHH:mm:ssZ`|
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - the device time
|
||||
|
||||
### activateApp
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/activate_app
|
||||
```
|
||||
|
||||
Activates an app on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`appId` or `bundleId`|App identifier such as Android app package or iOS bundle ID|string|
|
||||
|`options?`|Driver-specific launch options|unknown|
|
||||
|
||||
#### Response
|
||||
|
||||
`void`
|
||||
|
||||
### terminateApp
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/terminate_app
|
||||
```
|
||||
|
||||
Terminates an app on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`appId` or `bundleId`|App identifier such as Android app package or iOS bundle ID|string|
|
||||
|`options?`|Driver-specific termination options|unknown|
|
||||
|
||||
#### Response
|
||||
|
||||
`void`
|
||||
|
||||
### queryAppState
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/app_state
|
||||
```
|
||||
|
||||
Retrieves the state of an app on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`appId` or `bundleId`|App identifier such as Android app package or iOS bundle ID|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`number` - an integer value indicating the app state:
|
||||
|
||||
|Number|App State|
|
||||
|--|--|
|
||||
|`0`|Not installed|
|
||||
|`1`|Not running|
|
||||
|`2`|Running in background suspended|
|
||||
|`3`|Running in background|
|
||||
|`4`|Running in foreground|
|
||||
|
||||
### installApp
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/install_app
|
||||
```
|
||||
|
||||
Installs an app on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`appPath`|Absolute local filepath or URL to an app file|string|
|
||||
|`options?`|Driver-specific install options|unknown|
|
||||
|
||||
#### Response
|
||||
|
||||
`void`
|
||||
|
||||
### removeApp
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/remove_app
|
||||
```
|
||||
|
||||
Uninstalls an app from the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`appId` or `bundleId`|App identifier such as Android app package or iOS bundle ID|string|
|
||||
|`options?`|Driver-specific uninstall options|unknown|
|
||||
|
||||
#### Response
|
||||
|
||||
`boolean` - `true` if uninstall was successful, otherwise `false`
|
||||
|
||||
### isAppInstalled
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/app_installed
|
||||
```
|
||||
|
||||
Determines if an app is installed on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`appId` or `bundleId`|App identifier such as Android app package or iOS bundle ID|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`boolean` - `true` if app is installed, otherwise `false`
|
||||
|
||||
### hideKeyboard
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/hide_keyboard
|
||||
```
|
||||
|
||||
Attempts to hide the virtual keyboard on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`key?`|Text of a key to use to hide the keyboard|string|
|
||||
|`keyCode?`|Key code to trigger to hide the keyboard|string|
|
||||
|`keyName?`|Name of a key to use to hide the keyboard|string|
|
||||
|`strategy?`|Driver-specific name of a hiding strategy to follow|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`boolean` - `true` if the operation was successful, otherwise `false`. Note that some platforms
|
||||
may never return a `false` value.
|
||||
|
||||
### isKeyboardShown
|
||||
|
||||
```
|
||||
GET /session/:sessionId/appium/device/is_keyboard_shown
|
||||
```
|
||||
|
||||
Determines if the virtual keyboard is shown on the device under test.
|
||||
|
||||
#### Response
|
||||
|
||||
`boolean` - `true` if the keyboard is shown, otherwise `false`
|
||||
|
||||
### pushFile
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/push_file
|
||||
```
|
||||
|
||||
Pushes data to a file on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`data`|Base64-encoded data to be written to the file|string|
|
||||
|`path`|Remote path on the device to create the file at|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`void`
|
||||
|
||||
### pullFile
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/pull_file
|
||||
```
|
||||
|
||||
Retrieves data from a file on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`path`|Remote path of the file on the device|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - the Base64-encoded contents of the file
|
||||
|
||||
### pullFolder
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/device/pull_folder
|
||||
```
|
||||
|
||||
Retrieves data from a directory on the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`path`|Remote path of the directory on the device|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - the Base64-encoded zip file of the directory contents
|
||||
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: WebDriver BiDi Protocol
|
||||
---
|
||||
<style>
|
||||
ul[data-md-component="toc"] .md-nav {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of [W3C WebDriver BiDi protocol](https://w3c.github.io/webdriver-bidi/)
|
||||
commands supported in Appium.
|
||||
|
||||
Unlike other protocols that specify URL endpoints, the WebDriver BiDi protocol specifies commands
|
||||
sent as a websocket event, that both drivers and clients can emit or listen to.
|
||||
|
||||
### bidiStatus
|
||||
|
||||
```
|
||||
session.status
|
||||
```
|
||||
|
||||
> WebDriver BiDi documentation: [session.status](https://w3c.github.io/webdriver-bidi/#command-session-status)
|
||||
|
||||
Retrieves the current status of the Appium server.
|
||||
|
||||
#### Response
|
||||
|
||||
[`GetStatusResult`](./webdriver.md#response_2)
|
||||
|
||||
### bidiSubscribe
|
||||
|
||||
```
|
||||
session.subscribe
|
||||
```
|
||||
|
||||
> WebDriver BiDi documentation: [session.subscribe](https://w3c.github.io/webdriver-bidi/#command-session-subscribe)
|
||||
|
||||
Subscribes to one or more BiDi events.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`contexts?`|Contexts in which to subscribe to the specified events. By default, the global context scope is applied.|string[]|`['']`|
|
||||
|`events`|Names of events to subscribe to|string[]||
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### bidiUnsubscribe
|
||||
|
||||
```
|
||||
session.unsubscribe
|
||||
```
|
||||
|
||||
> WebDriver BiDi documentation: [session.unsubscribe](https://w3c.github.io/webdriver-bidi/#command-session-unsubscribe)
|
||||
|
||||
Unsubscribes from one or more BiDi events.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`contexts?`|Contexts in which to unsubscribe from the specified events. By default, the global scope is applied.|string[]|`['']`|
|
||||
|`events`|Names of events to unsubscribe from|string[]||
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: API Endpoints
|
||||
---
|
||||
|
||||
Here you can find various API endpoints exposed by the main Appium module through its base driver,
|
||||
as well as the endpoints added or modified by official plugins.
|
||||
|
||||
Since all Appium drivers inherit the Appium base driver, they support all of its endpoints as well,
|
||||
but may additionally define endpoints of their own. Refer to the documentation of your
|
||||
[Appium driver](../../ecosystem/drivers.md) to learn about its specific endpoints.
|
||||
|
||||
The recommended way of calling these API endpoints is through your [Appium client](../../ecosystem/clients.md).
|
||||
Refer to the documentation of your client for the exact commands used to invoke specific endpoints.
|
||||
|
||||
All endpoints are grouped by their protocol, with an additional group for plugin endpoints:
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
|
||||
- [__WebDriver Protocol__](./webdriver.md)
|
||||
- [__WebDriver BiDi Protocol__](./bidi.md)
|
||||
- [__JSON Wire Protocol__](./jsonwp.md)
|
||||
- [__Mobile JSON Wire Protocol__](./mjsonwp.md)
|
||||
- [__Appium Protocol__](./appium.md)
|
||||
- [__Other Protocols__](./others.md)
|
||||
- [__Endpoints Used by Official Plugins__](./plugins.md)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,214 @@
|
||||
---
|
||||
title: JSON Wire Protocol
|
||||
---
|
||||
<style>
|
||||
ul[data-md-component="toc"] .md-nav {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of legacy [JSON Wire Protocol (JSONWP)](https://www.selenium.dev/documentation/legacy/json_wire_protocol/)
|
||||
endpoints used in Appium.
|
||||
|
||||
### getSession
|
||||
|
||||
```
|
||||
GET /session/:sessionId
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionid)
|
||||
|
||||
Retrieves the capabilities of the current session.
|
||||
|
||||
Appium implements a modified version of this endpoint. If the `appium:eventTimings` capability is
|
||||
set to `true`, the returned result will additionally include the `events` key, whose value contains
|
||||
the event history and timings.
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
For retrieving capabilities, please use [`getAppiumSessionCapabilities`](./appium.md#getappiumsessioncapabilities).<br />
|
||||
For retrieving event history, please use [`getLogEvents`](./appium.md#getlogevents).
|
||||
|
||||
#### Response
|
||||
|
||||
`Capabilities` - an object containing the session capabilities, and the event history (if applicable)
|
||||
|
||||
### availableIMEEngines
|
||||
|
||||
```
|
||||
GET /session/:sessionId/ime/available_engines
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/ime/available_engines](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidimeavailable_engines)
|
||||
|
||||
Retrieves all IME (input method editor) engines available on the device under test.
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
In the future, this endpoint will be moved to the [UiAutomator2 and Espresso drivers](../../ecosystem/drivers.md)
|
||||
|
||||
#### Response
|
||||
|
||||
`string[]` - a list of available IME engines
|
||||
|
||||
### getActiveIMEEngine
|
||||
|
||||
```
|
||||
GET /session/:sessionId/ime/active_engine
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/ime/active_engine](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidimeactive_engine)
|
||||
|
||||
Retrieves the name of the active IME engine.
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
In the future, this endpoint will be moved to the UiAutomator2 and Espresso drivers
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - the name of the active IME engine
|
||||
|
||||
### isIMEActivated
|
||||
|
||||
```
|
||||
GET /session/:sessionId/ime/activated
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/ime/activated](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidimeactivated)
|
||||
|
||||
Determines if IME input is available and active.
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
In the future, this endpoint will be moved to the UiAutomator2 and Espresso drivers
|
||||
|
||||
#### Response
|
||||
|
||||
`boolean` - `true` if IME is active, otherwise `false`
|
||||
|
||||
### deactivateIMEEngine
|
||||
|
||||
```
|
||||
POST /session/:sessionId/ime/deactivate
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/ime/deactivate](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidimedeactivate)
|
||||
|
||||
Deactivates the currently active IME engine.
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
In the future, this endpoint will be moved to the UiAutomator2 and Espresso drivers
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### activateIMEEngine
|
||||
|
||||
```
|
||||
POST /session/:sessionId/ime/activate
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/ime/activate](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidimeactivate)
|
||||
|
||||
Activates an IME engine.
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
In the future, this endpoint will be moved to the UiAutomator2 and Espresso drivers
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`engine`|Name of the IME engine to activate|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getOrientation
|
||||
|
||||
```
|
||||
GET /session/:sessionId/orientation
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/orientation](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidorientation)
|
||||
|
||||
Retrieves the current orientation of the device under test.
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - either `PORTRAIT` or `LANDSCAPE`
|
||||
|
||||
### setOrientation
|
||||
|
||||
```
|
||||
POST /session/:sessionId/orientation
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/orientation](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidorientation)
|
||||
|
||||
Sets the orientation of the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`orientation`|New device orientation. Supported values are `PORTRAIT` or `LANDSCAPE`.|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getGeoLocation
|
||||
|
||||
```
|
||||
GET /session/:sessionId/location
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/location](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidlocation)
|
||||
|
||||
Retrieves the current location of the device under test.
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
Please use driver-specific extension methods such as `mobile: getGeoLocation` or
|
||||
`mobile: getSimulatedLocation`
|
||||
|
||||
#### Response
|
||||
|
||||
`Location` - an object with the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`altitude`|Altitude of the device location|number|
|
||||
|`latitude`|Latitude of the device location|number|
|
||||
|`longitude`|Longitude of the device location|number|
|
||||
|
||||
### setGeoLocation
|
||||
|
||||
```
|
||||
POST /session/:sessionId/location
|
||||
```
|
||||
|
||||
> JSONWP documentation: [/session/:sessionId/location](https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidlocation)
|
||||
|
||||
Sets the current location of the device under test.
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
Please use driver-specific extension methods such as `mobile: setGeoLocation` or
|
||||
`mobile: setSimulatedLocation`
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`location`|New device latitude, longitude and altitude|[`Location`](#response_6)|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
@@ -0,0 +1,151 @@
|
||||
---
|
||||
title: Mobile JSON Wire Protocol
|
||||
---
|
||||
<style>
|
||||
ul[data-md-component="toc"] .md-nav {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of legacy [Mobile JSON Wire Protocol (MJSONWP)](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md)
|
||||
endpoints used in Appium.
|
||||
|
||||
### getRotation
|
||||
|
||||
```
|
||||
GET /session/:sessionId/rotation
|
||||
```
|
||||
|
||||
> MJSONWP documentation: [Device Rotation](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#device-rotation)
|
||||
|
||||
Retrieves the current spatial orientation of the device under test.
|
||||
|
||||
#### Response
|
||||
|
||||
`Rotation` - an object with the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`x`|Degrees by which the device is rotated on its X axis|number|
|
||||
|`y`|Degrees by which the device is rotated on its Y axis|number|
|
||||
|`z`|Degrees by which the device is rotated on its Z axis|number|
|
||||
|
||||
### setRotation
|
||||
|
||||
```
|
||||
POST /session/:sessionId/rotation
|
||||
```
|
||||
|
||||
> MJSONWP documentation: [Device Rotation](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#device-rotation)
|
||||
|
||||
Sets the spatial orientation of the device under test.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`x`|Degrees by which the device is rotated on its X axis|number|
|
||||
|`y`|Degrees by which the device is rotated on its Y axis|number|
|
||||
|`z`|Degrees by which the device is rotated on its Z axis|number|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getCurrentContext
|
||||
|
||||
```
|
||||
GET /session/:sessionId/context
|
||||
```
|
||||
|
||||
> MJSONWP documentation: [Webviews and Other Contexts](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts)
|
||||
|
||||
Retrieves the active application context.
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - the name of the active context
|
||||
|
||||
### setContext
|
||||
|
||||
```
|
||||
POST /session/:sessionId/context
|
||||
```
|
||||
|
||||
> MJSONWP documentation: [Webviews and Other Contexts](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts)
|
||||
|
||||
Sets an application context as the active context.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`name`|Name of the context to set as the active one|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getContexts
|
||||
|
||||
```
|
||||
GET /session/:sessionId/contexts
|
||||
```
|
||||
|
||||
> MJSONWP documentation: [Webviews and Other Contexts](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts)
|
||||
|
||||
Retrieves all available application contexts.
|
||||
|
||||
#### Response
|
||||
|
||||
`string[]` - the names of available contexts
|
||||
|
||||
### getNetworkConnection
|
||||
|
||||
```
|
||||
GET /session/:sessionId/network_connection
|
||||
```
|
||||
|
||||
> MJSONWP documentation: [Device Modes](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#device-modes)
|
||||
|
||||
Retrieves the current state of network types (data, Wi-Fi, airplane mode).
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
Please use driver-specific extension methods such as `mobile: getConnectivity`
|
||||
|
||||
#### Response
|
||||
|
||||
`NetworkConnectionState` - a number indicating the current network state:
|
||||
|
||||
|Value|Data|Wi-Fi|Airplane Mode|
|
||||
|--|--|--|--|
|
||||
|`0`|OFF|OFF|OFF|
|
||||
|`1`|OFF|OFF|ON|
|
||||
|`2`|OFF|ON|OFF|
|
||||
|`4`|ON|OFF|OFF|
|
||||
|`6`|ON|ON|OFF|
|
||||
|
||||
### setNetworkConnection
|
||||
|
||||
```
|
||||
POST /session/:sessionId/network_connection
|
||||
```
|
||||
|
||||
> MJSONWP documentation: [Device Modes](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#device-modes)
|
||||
|
||||
Sets the state of network types (data, Wi-Fi, airplane mode).
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
Please use driver-specific extension methods such as `mobile: setConnectivity`
|
||||
|
||||
#### Parameters
|
||||
|
||||
|<div style="width:6em">Name</div>|Description|<div style="width:18em">Type</div>|
|
||||
|--|--|--|
|
||||
|`parameters`|Object containing the `type` key, whose value is the desired network state|`{"type": `[`NetworkConnectionState`](#response_5)`}`|
|
||||
|
||||
#### Response
|
||||
|
||||
[`NetworkConnectionState`](#response_5) - the new network state
|
||||
@@ -0,0 +1,234 @@
|
||||
---
|
||||
title: Other Protocols
|
||||
---
|
||||
<style>
|
||||
ul[data-md-component="toc"] .md-nav .md-nav {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints used in Appium that are defined in other protocols.
|
||||
|
||||
## Chromedriver Protocol
|
||||
|
||||
The Chromedriver protocol is an extension of the W3C WebDriver protocol, supported in Appium
|
||||
clients using Chromedriver. It specifies both its own extension commands, as well as
|
||||
vendor-agnostic commands.
|
||||
|
||||
!!! warning
|
||||
|
||||
Endpoints specified by this protocol are not officially documented.
|
||||
|
||||
### executeCdp
|
||||
|
||||
```
|
||||
POST /session/:sessionId/:vendor/cdp/execute
|
||||
```
|
||||
|
||||
Executes a Chrome DevTools Protocol (CDP) method, using the implementation of the vendor identified
|
||||
by `:vendor`. Refer to [the CDP documentation](https://chromedevtools.github.io/devtools-protocol/)
|
||||
for a list of available methods and their parameters.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`cmd`|Name of the CDP method to execute|string|
|
||||
|`params`|Parameters passed to the CDP method|object|
|
||||
|
||||
#### Response
|
||||
|
||||
`any` - the result of executing the CDP method
|
||||
|
||||
## Selenium Protocol
|
||||
|
||||
The Selenium protocol is an extension of the W3C WebDriver protocol, supported in Appium clients
|
||||
based on Selenium.
|
||||
|
||||
!!! warning
|
||||
|
||||
Endpoints specified by this protocol are not officially documented.
|
||||
|
||||
### getLog
|
||||
|
||||
```
|
||||
POST /session/:sessionId/se/log
|
||||
```
|
||||
|
||||
Retrieves the logs for a given log type. Supported log types depend on the driver, and can be
|
||||
retrieved using the [`getLogTypes`](#getlogtypes) endpoint.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`type`|Type of log to retrieve|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`GetLogEntry[]` - an array of log entries.
|
||||
|
||||
Typically a log entry is an object with the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`level`|Level at which the message was logged|string|
|
||||
|`message`|Contents of the actual log message|string|
|
||||
|`timestamp`|Message timestamp (in milliseconds) in Unix format|number|
|
||||
|
||||
### getLogTypes
|
||||
|
||||
```
|
||||
GET /session/:sessionId/se/log/types
|
||||
```
|
||||
|
||||
Retrieves the available log types that can be used to call the [`getLog`](#getlog) endpoint.
|
||||
|
||||
#### Response
|
||||
|
||||
`string[]` - an array of log types
|
||||
|
||||
## Web Authentication Protocol
|
||||
|
||||
The [Web Authentication protocol](https://w3c.github.io/webauthn/) (WebAuthn) is an extension of
|
||||
the W3C WebDriver protocol.
|
||||
|
||||
### addVirtualAuthenticator
|
||||
|
||||
```
|
||||
POST /session/:sessionId/webauthn/authenticator
|
||||
```
|
||||
|
||||
> WebAuthn documentation: [Add Virtual Authenticator](https://w3c.github.io/webauthn/#add-virtual-authenticator)
|
||||
|
||||
Creates a software [virtual authenticator](https://w3c.github.io/webauthn/#virtual-authenticators).
|
||||
|
||||
#### Parameters
|
||||
|
||||
|<div style="width:11em">Name</div>|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`isUserConsenting?`|Whether to always grant user consent|boolean|true|
|
||||
|`isUserVerified?`|Whether to always succeed in user verification. Ignored if `hasUserVerification` is set to `false`.|boolean|false|
|
||||
|`hasResidentKey?`|Whether client-side discoverable credentials are supported|boolean|false|
|
||||
|`hasUserVerification?`|Whether user verification is supported|boolean|false|
|
||||
|`protocol`|Protocol of this authenticator. Supported values are: `ctap1/u2f`, `ctap2`, or `ctap2_1`.|string||
|
||||
|`transport`|Type of transport used to communicate with clients. Supported values are: `ble`, `hybrid`, `internal`, `nfc`, `smart-card`, or `usb`.|string||
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - the ID of the created authenticator
|
||||
|
||||
### removeVirtualAuthenticator
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/webauthn/authenticator/:authenticatorId
|
||||
```
|
||||
|
||||
> WebAuthn documentation: [Remove Virtual Authenticator](https://w3c.github.io/webauthn/#remove-virtual-authenticator)
|
||||
|
||||
Removes the virtual authenticator identified by `:authenticatorId`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### addAuthCredential
|
||||
|
||||
```
|
||||
POST /session/:sessionId/webauthn/authenticator/:authenticatorId/credential
|
||||
```
|
||||
|
||||
> WebAuthn documentation: [Add Credential](https://w3c.github.io/webauthn/#add-credential)
|
||||
|
||||
Injects a [Public Key Credential Source](https://w3c.github.io/webauthn/#public-key-credential-source)
|
||||
into the virtual authenticator identified by `:authenticatorId`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|<div style="width:11em">Name</div>|Description|Type|
|
||||
|--|--|--|
|
||||
|`credentialId`|Credential ID, in Base64url encoding|string|
|
||||
|`isResidentCredential`|Whether to create a client-side discoverable credential. If set to `false`, a server-side credential is created instead.|boolean|
|
||||
|`privateKey`|Asymmetric key package containing a single private key, in Base64url encoding|string|
|
||||
|`rpId`|Relying Party ID the credential is scoped to|string|
|
||||
|`signCount?`|Initial value for the signature counter. Set to `0` if omitted.|number|
|
||||
|`userHandle?`|User handle associated with the credential, in Base64url encoding. Set to `null` if omitted.|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getAuthCredential
|
||||
|
||||
```
|
||||
GET /session/:sessionId/webauthn/authenticator/:authenticatorId/credentials
|
||||
```
|
||||
|
||||
> WebAuthn documentation: [Get Credentials](https://w3c.github.io/webauthn/#get-credentials)
|
||||
|
||||
Retrieves all Public Key Credential Sources stored in the virtual authenticator identified by
|
||||
`:authenticatorId`.
|
||||
|
||||
#### Response
|
||||
|
||||
`Credential[]` - an array of credential objects. Each object has the following properties:
|
||||
|
||||
|<div style="width:11em">Name</div>|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`credentialId`|Credential ID, in Base64url encoding|string||
|
||||
|`isResidentCredential`|Whether the credential is client-side discoverable (`true`) or server-side (`false`)|boolean||
|
||||
|`largeBlob`|Large, per-credential blog, in Base64url encoding|string|`null`|
|
||||
|`privateKey`|Asymmetric key package containing a single private key, in Base64url encoding|string||
|
||||
|`rpId`|Relying Party ID the credential is scoped to|string||
|
||||
|`signCount`|Initial value for the signature counter|number|`0`|
|
||||
|`userHandle`|User handle associated with the credential, in Base64url encoding|string|`null`|
|
||||
|
||||
### removeAuthCredential
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/webauthn/authenticator/:authenticatorId/credentials/:credentialId
|
||||
```
|
||||
|
||||
> WebAuthn documentation: [Remove Credential](https://w3c.github.io/webauthn/#remove-credential)
|
||||
|
||||
Removes the Public Key Credential Source identified by `:credentialId` from the virtual authenticator
|
||||
identified by `:authenticatorId`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### removeAllAuthCredentials
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/webauthn/authenticator/:authenticatorId/credentials
|
||||
```
|
||||
|
||||
> WebAuthn documentation: [Remove All Credentials](https://w3c.github.io/webauthn/#remove-all-credentials)
|
||||
|
||||
Removes all Public Key Credential Sources from the virtual authenticator identified by
|
||||
`:authenticatorId`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### setUserAuthVerified
|
||||
|
||||
```
|
||||
POST /session/:sessionId/webauthn/authenticator/:authenticatorId/uv
|
||||
```
|
||||
|
||||
> WebAuthn documentation: [Set User Verified](https://w3c.github.io/webauthn/#set-user-verified)
|
||||
|
||||
Sets the `isUserVerified` property of the virtual authenticator identified by `:authenticatorId`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`isUserVerified`|Whether to always succeed in user verification|boolean|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
@@ -0,0 +1,289 @@
|
||||
---
|
||||
title: Plugin Endpoints
|
||||
---
|
||||
<style>
|
||||
ul[data-md-component="toc"] .md-nav .md-nav {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints added or modified by official Appium plugins.
|
||||
|
||||
## Execute Driver Plugin
|
||||
|
||||
### executeDriverScript
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/execute_driver
|
||||
```
|
||||
|
||||
Executes a driver script in a child process.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`script`|Script to be executed|string||
|
||||
|`type?`|Name of the library executing the script|string|`webdriverio`|
|
||||
|`timeout?`|Timeout (in milliseconds) for the script process|number|`3600000`|
|
||||
|
||||
#### Response
|
||||
|
||||
`RunScriptResult` - an object with the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`result`|Result returned by the script|any|
|
||||
|`logs`|Logs generated during script execution|object|
|
||||
|
||||
## Images Plugin
|
||||
|
||||
### compareImages
|
||||
|
||||
```
|
||||
POST /session/:sessionId/appium/compare_images
|
||||
```
|
||||
|
||||
Compares two images using the specified mode of comparison:
|
||||
|
||||
* `matchFeatures`: whether `firstImage` is a rotated, scaled, or otherwise modified version of `secondImage`
|
||||
* `matchTemplate`: whether `firstImage` contains one or more occurrences of `secondImage`
|
||||
* `getSimilarity`: calculate similarity score between two images of equal size
|
||||
|
||||
#### Parameters
|
||||
|
||||
|<div style="width:7em">Name</div>|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`mode`|Mode of comparison. Supported values are: `matchFeatures`, `getSimilarity`, or `matchTemplate`.|string||
|
||||
|`firstImage`|Base64-encoded image file|string or Buffer||
|
||||
|`secondImage`|Base64-encoded image file|string or Buffer||
|
||||
|`options?`|Options specific to the `mode` value (see below)|object|`{}`|
|
||||
|
||||
**`options` for `mode=matchFeatures`**
|
||||
|
||||
|<div style="width:10em">Name</div>|Description|Type|<div style="width:6em">Default</div>|
|
||||
|--|--|--|--|
|
||||
|`detectorName?`|Name of the OpenCV feature detector to use. Supported values are: `AKAZE`, `AgastFeatureDetector`, `BRISK`, `FastFeatureDetector`, `GFTTDetector`, `KAZE`, `MSER`, or `ORB`.|string|`ORB`|
|
||||
|`goodMatchesFactor?`|Maximum number of 'good' matches; or a function accepting current distance, min distance and max distance, and returning a boolean indicating whether the match should be included or not.|number or function||
|
||||
|`matchFunc?`|Name of the OpenCV descriptor matcher to use. Supported values are: `FlannBased`, `BruteForce`, `BruteForce-L1`, `BruteForce-Hamming`, `BruteForce-HammingLUT`, or `BruteForce-SL2`.|string|`BruteForce`|
|
||||
|`visualize?`|Whether to include an image of the matcher visualization in the response|boolean|`false`|
|
||||
|
||||
**`options` for `mode=matchTemplate`**
|
||||
|
||||
|<div style="width:13em">Name</div>|Description|Type|<div style="width:9em">Default</div>|
|
||||
|--|--|--|--|
|
||||
|`matchNeighbourThreshold?`|Maximum pixel distance between two matches to consider them the same match|number|`10`|
|
||||
|`method?`|Name of the OpenCV template matching method to use. Supported values are: `TM_CCOEFF`, `TM_CCOEFF_NORMED`, `TM_CCORR`, `TM_CCORR_NORMED`, `TM_SQDIFF`, or `TM_SQDIFF_NORMED`.|string|`TM_CCOEFF_NORMED`|
|
||||
|`multiple?`|Whether to look for multiple occurrences of the image|boolean|`false`|
|
||||
|`threshold?`|Threshold to use for accepting/rejecting a match|number|`0.5`|
|
||||
|`visualize?`|Whether to include an image of the matcher visualization in the response|boolean|`false`|
|
||||
|
||||
**`options` for `mode=getSimilarity`**
|
||||
|
||||
|<div style="width:6em">Name</div>|Description|Type|<div style="width:9em">Default</div>|
|
||||
|--|--|--|--|
|
||||
|`method?`|Name of the OpenCV template matching method to use. Supported values are: `TM_CCOEFF`, `TM_CCOEFF_NORMED`, `TM_CCORR`, `TM_CCORR_NORMED`, `TM_SQDIFF`, or `TM_SQDIFF_NORMED`.|string|`TM_CCOEFF_NORMED`|
|
||||
|`visualize?`|Whether to include an image of the matcher visualization in the response|boolean|`false`|
|
||||
|
||||
#### Response
|
||||
|
||||
`ComparisonResult` - an object whose properties depend on the `mode` input parameter:
|
||||
|
||||
**`ComparisonResult` for `mode=matchFeatures`**
|
||||
|
||||
|<div style="width:8em">Name</div>|Description|Type|
|
||||
|--|--|--|
|
||||
|`count`|Number of matched edges on both images, after applying `goodMatchesFactor` (if specified).|number|
|
||||
|`points1`|Array of matching points on `firstImage`|`{x, y}[]`|
|
||||
|`points2`|Array of matching points on `secondImage`|`{x, y}[]`|
|
||||
|`rect1`|Bounding rectangle for `points1`|`{x, y, width, height}`|
|
||||
|`rect2`|Bounding rectangle for `points2`|`{x, y, width, height}`|
|
||||
|`totalCount`|Total number of matched edges on both images, before applying `goodMatchesFactor` (if specified)|number|
|
||||
|`visualization?`|Image of the matcher visualization. Only included if the `visualize` input option was enabled.|Buffer|
|
||||
|
||||
**`ComparisonResult` for `mode=matchTemplate`**
|
||||
|
||||
|<div style="width:8em">Name</div>|Description|Type|
|
||||
|--|--|--|
|
||||
|`rect`|Region of `firstImage` where a match was found for `secondImage`|`{x, y, width, height}`|
|
||||
|`multiple?`|Array of all comparison results. Only included if the `multiple` input option was enabled.|`{rect, score, visualization?}`|
|
||||
|`score`|Similarity score between both images in the range `[0.0, 1.0]`|number|
|
||||
|`visualization?`|Image of the matcher visualization. Only included if the `visualize` input option was enabled.|Buffer|
|
||||
|
||||
**`ComparisonResult` for `mode=getSimilarity`**
|
||||
|
||||
|<div style="width:8em">Name</div>|Description|Type|
|
||||
|--|--|--|
|
||||
|`score`|Similarity score between both images in the range `[0.0, 1.0]`|number|
|
||||
|`visualization?`|Image of the matcher visualization. Only included if the `visualize` input option was enabled.|Buffer|
|
||||
|
||||
### findElement
|
||||
|
||||
```
|
||||
POST /session/:sessionId/element
|
||||
```
|
||||
|
||||
Modifies the [`findElement`](./webdriver.md#findelement) endpoint:
|
||||
|
||||
* Adds `-image` to the supported values for the `using` parameter (the location strategy)
|
||||
|
||||
### findElements
|
||||
|
||||
```
|
||||
POST /session/:sessionId/elements
|
||||
```
|
||||
|
||||
Modifies the [`findElements`](./webdriver.md#findelements) endpoint:
|
||||
|
||||
* Adds `-image` to the supported values for the `using` parameter (the location strategy)
|
||||
|
||||
### performActions
|
||||
|
||||
```
|
||||
POST /session/:sessionId/actions
|
||||
```
|
||||
|
||||
Modifies the [`performActions`](./webdriver.md#performactions) endpoint:
|
||||
|
||||
* If any action in `actions` includes `origin`, whose value is an image element:
|
||||
* Removes the `origin` property
|
||||
* Increments the `x` and `y` properties by the center coordinates of the image element
|
||||
|
||||
## Relaxed Caps Plugin
|
||||
|
||||
### createSession
|
||||
|
||||
```
|
||||
POST /session
|
||||
```
|
||||
|
||||
Modifies the [`createSession`](./webdriver.md#createsession) endpoint:
|
||||
|
||||
* Adds the `appium:` prefix to all keys in `capabilities`, unless they match a standard W3C
|
||||
capability, or already have any prefix
|
||||
|
||||
## Storage Plugin
|
||||
|
||||
!!! tip
|
||||
|
||||
All endpoints for this plugin can be invoked without creating a session, allowing you to prepare
|
||||
your test environment in advance.
|
||||
|
||||
### addStorageItem
|
||||
|
||||
```
|
||||
POST /storage/add
|
||||
```
|
||||
|
||||
Adds a new file to the storage.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`name`|Name used for saving the file (must not include path separator characters)|string|
|
||||
|`sha1`|SHA1 hash of the file to be uploaded|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`AddRequestResult` - an object with the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`ttlMs`|Timeout (in milliseconds) for both web sockets to remain active, or for a file payload to be successfully uploaded|number|
|
||||
|`ws.events`|Path for the events web socket used to notify about upload success or failure|string|
|
||||
|`ws.stream`|Path for the streaming web socket used to upload the file content|string|
|
||||
|
||||
Example:
|
||||
```json
|
||||
{
|
||||
"ws": {
|
||||
"stream": "/storage/add/ccc963411b2621335657963322890305ebe96186/stream",
|
||||
"events": "/storage/add/ccc963411b2621335657963322890305ebe96186/events"
|
||||
},
|
||||
"ttlMs": 300000
|
||||
}
|
||||
```
|
||||
|
||||
### deleteStorageItem
|
||||
|
||||
```
|
||||
POST /storage/delete
|
||||
```
|
||||
|
||||
Deletes a file in the storage.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`name`|Name of the file to be deleted|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`boolean` - `true` upon successful file deletion, or `false` if the file does not exist in
|
||||
the storage
|
||||
|
||||
### listStorageItems
|
||||
|
||||
```
|
||||
GET /storage/list
|
||||
```
|
||||
|
||||
List all files present in the storage.
|
||||
|
||||
#### Response
|
||||
|
||||
`List<StorageItem>` - a list of items, where each item has the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`name`|Name of the file in the storage|string|
|
||||
|`path`|Full path to the file on the remote file system|string|
|
||||
|`size`|File size in bytes|number|
|
||||
|
||||
### resetStorage
|
||||
|
||||
```
|
||||
POST /storage/reset
|
||||
```
|
||||
|
||||
Deletes all uploaded files and stops any incomplete uploads.
|
||||
If the [`APPIUM_STORAGE_KEEP_ALL` flag](../cli/env-vars.md) is set, all uploaded files will be
|
||||
preserved, and only the incomplete uploads will be stopped.
|
||||
|
||||
#### Response
|
||||
|
||||
`void`
|
||||
|
||||
## Universal XML Plugin
|
||||
|
||||
### findElement
|
||||
|
||||
```
|
||||
POST /session/:sessionId/element
|
||||
```
|
||||
|
||||
Modifies the [`findElement`](./webdriver.md#findelement) endpoint:
|
||||
|
||||
* Adds support for universal node/attribute names for the `value` parameter (the selector)
|
||||
|
||||
### findElements
|
||||
|
||||
```
|
||||
POST /session/:sessionId/elements
|
||||
```
|
||||
|
||||
Modifies the [`findElements`](./webdriver.md#findelements) endpoint:
|
||||
|
||||
* Adds support for universal node/attribute names for the `value` parameter (the selector)
|
||||
|
||||
### getPageSource
|
||||
|
||||
```
|
||||
GET /session/:sessionId/source
|
||||
```
|
||||
|
||||
Modifies the [`getPageSource`](./webdriver.md#getpagesource) endpoint:
|
||||
|
||||
* After retrieving the result, translates node/attribute names to their universal names
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,31 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Environment Variables
|
||||
---
|
||||
|
||||
The primary ways of configuring the Appium server are via [Command-Line Arguments](./server.md) or
|
||||
the [Config File](../../guides/config.md). However, some more advanced features are toggled or
|
||||
configured via environment variables. To set environment variables, refer to the documentation for
|
||||
your operating system and terminal.
|
||||
|
||||
These are the environment variables that the Appium server understands:
|
||||
|
||||
|<div style="width:18em">Variable</div>|Description|
|
||||
|--------|-----------|
|
||||
|`APPIUM_APPS_CACHE_IGNORE_URL_QUERY`|Set this to a truthy value to remove any query part of a URL when using it as a cache key. See the corresponding [feature request](https://discuss.appium.io/t/regarding-app-caching-when-using-aws-s3-presigned-urls/42713) for more details.|
|
||||
|`APPIUM_APPS_CACHE_MAX_AGE`|Set the maximum age (in minutes) for [cached applications](../../guides/caching.md). Do not set it to a lower number than the duration of a single session startup. Default: `60 * 24` (24 hours)|
|
||||
|`APPIUM_APPS_CACHE_MAX_ITEMS`|Set the maximum amount of [cached applications](../../guides/caching.md). Do not set it to a lower number than the amount of apps in all parallel sessions per process. Default: `1024`|
|
||||
|`APPIUM_HOME`|Set the path to the Appium home directory, which is used for [Managing Extensions](../../guides/managing-exts.md). Default: `.appium` in the home directory of the current user|
|
||||
|`APPIUM_OMIT_PEER_DEPS`|Set this to `1` to add `--omit=peer` to all the NPM commands run internally by Appium. Mostly an internal feature.|
|
||||
|`APPIUM_RELOAD_EXTENSIONS`|Set this to a truthy value to cause Appium to re-require extensions when new sessions are created. This feature is mostly useful for [building extensions](../../developing/build-drivers.md).|
|
||||
|`APPIUM_TMP_DIR`|Set the path to the directory used for temporary files. Same as the `--tmp` command line argument.|
|
||||
|
||||
Appium drivers and plugins may define additional environment variables. The following variables are
|
||||
used by official plugins:
|
||||
|
||||
|<div style="width:13em">Variable</div>|Plugin|Description|
|
||||
|--------|-----------|-----------|
|
||||
|`APPIUM_STORAGE_KEEP_ALL`|`storage`|Set this to `1`, `true` or `yes` to preserve files in the storage after the server process is terminated. By default, stopping the server process also deletes all files in the storage.|
|
||||
|`APPIUM_STORAGE_ROOT`|`storage`|Set the path to the directory used for storage. If set to an existing folder, all files in it will be retained after terminating the server, unless specified otherwise using `APPIUM_STORAGE_KEEP_ALL`.|
|
||||
@@ -0,0 +1,239 @@
|
||||
---
|
||||
title: appium driver/plugin
|
||||
---
|
||||
<style>
|
||||
ul[data-md-component="toc"] .md-nav {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
Provides management options for a specific extension (driver or plugin). Both the `appium driver` and
|
||||
`appium plugin` subcommands support the same options.
|
||||
|
||||
The following sub-subcommands are supported: `doctor`, `install`, `list`, `run`, `update`,
|
||||
and `uninstall`.
|
||||
|
||||
## `doctor`
|
||||
|
||||
Runs doctor checks for an installed extension, which validate whether the extension has its prerequisites
|
||||
configured correctly. Note that not all extensions include doctor checks.
|
||||
|
||||
!!! note
|
||||
|
||||
If you maintain an Appium extension and would like to add Appium Doctor support for it, check
|
||||
out the documentation on [Building Doctor Checks](../../developing/build-doctor-checks.md).
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium {driver|plugin} doctor <extension-name>
|
||||
```
|
||||
|
||||
|Argument|Description|
|
||||
|--|--|
|
||||
|`extension-name`|The short name of the installed extension|
|
||||
|
||||
#### Options
|
||||
|
||||
|Argument|Description|Type|
|
||||
|--|--|--|
|
||||
|`--json`|Return the result in JSON format|boolean|
|
||||
|
||||
#### Example
|
||||
|
||||
- Run doctor checks for the UiAutomator2 driver:
|
||||
|
||||
```
|
||||
appium driver doctor uiautomator2
|
||||
```
|
||||
|
||||
## `install`
|
||||
|
||||
Installs an extension.
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium {driver|plugin} install <install-spec>
|
||||
```
|
||||
|
||||
|<div style="width:7em">Argument</div>|Description|
|
||||
|--|--|
|
||||
|`install-spec`|The short name of an official extension, with optional `npm` version or tag modifier. If using the `--source` option, the expected format of this argument will change ([see below](#source-vs-install-spec)).|
|
||||
|
||||
#### Options
|
||||
|
||||
|Argument|Description|Type|
|
||||
|--|--|--|
|
||||
|`--json`|Return the result in JSON format|boolean|
|
||||
|`--package`|The Node.js package name of the extension. Required if `--source` is set to `git` or `github`.|string|
|
||||
|`--source`|The location where Appium should look for the given extension. Supported values are `git`, `github`, `local`, or `npm`. Changes the expected format of `install-spec` ([see below](#source-vs-install-spec)).|string|
|
||||
|
||||
#### Source vs Install Spec
|
||||
|
||||
|`source`|Format of `<install-spec>`|
|
||||
|--|--|
|
||||
|None|The short name of an official extension, with optional modifiers as supported by `npm install` (e.g. version or tag)|
|
||||
|`git`|The Git URL of the extension|
|
||||
|`github`|The GitHub repository URL of the extension|
|
||||
|`local`|The local path to the extension containing its `package.json` file|
|
||||
|`npm`|The name of the `npm` package, with optional modifiers as supported by `npm install` (e.g. version or tag)|
|
||||
|
||||
#### Examples
|
||||
|
||||
- Install the latest XCUITest driver:
|
||||
|
||||
```
|
||||
appium driver install xcuitest
|
||||
```
|
||||
|
||||
- Install the XCUITest driver at version 9.0.0:
|
||||
|
||||
```
|
||||
appium driver install xcuitest@9.0.0
|
||||
```
|
||||
|
||||
- Install the `beta` version of `@appium/fake-driver` from `npm`:
|
||||
|
||||
```
|
||||
appium driver install @appium/fake-driver@beta --source=npm
|
||||
```
|
||||
|
||||
- Install a locally-developed plugin:
|
||||
|
||||
```
|
||||
appium plugin install /path/to/my/plugin --source=local
|
||||
```
|
||||
|
||||
- Install the XCUITest driver from GitHub:
|
||||
|
||||
```
|
||||
appium driver install https://github.com/appium/appium-xcuitest-driver --source=github --package=appium-xcuitest-driver
|
||||
```
|
||||
|
||||
- Install the XCUITest driver using a Git URL:
|
||||
|
||||
```
|
||||
appium driver install git://github.com/appium/appium-xcuitest-driver.git --source=git --package=appium-xcuitest-driver
|
||||
```
|
||||
|
||||
## `list`
|
||||
|
||||
Lists all installed extensions, plus all official extensions that are not installed.
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium {driver|plugin} list
|
||||
```
|
||||
|
||||
#### Options
|
||||
|
||||
|<div style="width:7em">Argument</div>|Description|Type|
|
||||
|--|--|--|
|
||||
|`--installed`|Only list all installed extensions|boolean|
|
||||
|`--json`|Return the result in JSON format|boolean|
|
||||
|`--updates`|List all extensions along with information on whether newer versions are available. Only supported for extensions installed via `npm`.|boolean|
|
||||
|
||||
#### Example
|
||||
|
||||
- List all installed drivers and check if they have newer versions available:
|
||||
|
||||
```
|
||||
appium driver list --installed --updates
|
||||
```
|
||||
|
||||
## `run`
|
||||
|
||||
Runs an extension script, which can assist with setup or perform other tasks. Note that not all
|
||||
extensions include scripts.
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium {driver|plugin} run <extension-name> <script-name> [script-args]
|
||||
```
|
||||
|
||||
|Argument|Description|
|
||||
|--|--|
|
||||
|`extension-name`|The short name of the installed extension|
|
||||
|`script-name`|The name of the script to be run|
|
||||
|`script-args`|Any additional arguments passed to the script|
|
||||
|
||||
#### Options
|
||||
|
||||
|Argument|Description|Type|
|
||||
|--|--|--|
|
||||
|`--json`|Return the result in JSON format|boolean|
|
||||
|
||||
#### Example
|
||||
|
||||
- Run the `reset` script included in the UiAutomator2 driver:
|
||||
|
||||
```
|
||||
appium driver run uiautomator2 reset
|
||||
```
|
||||
|
||||
## `update`
|
||||
|
||||
Updates one or more extensions. Only supported for extensions installed via `npm`. By default,
|
||||
Appium will only update minor and patch versions, in order to prevent any breaking changes.
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium {driver|plugin} update <extension-name>
|
||||
```
|
||||
|
||||
|Argument|Description|
|
||||
|--|--|
|
||||
|`extension-name`|The short name of the installed extension, or `installed` to update all installed extensions|
|
||||
|
||||
#### Options
|
||||
|
||||
|Argument|Description|Type|
|
||||
|--|--|--|
|
||||
|`--json`|Return the result in JSON format|boolean|
|
||||
|`--unsafe`|Allow updates of major versions, which may cause breaking changes|boolean|
|
||||
|
||||
#### Examples
|
||||
|
||||
- Update the UiAutomator2 driver to its latest major version:
|
||||
|
||||
```
|
||||
appium driver update uiautomator2 --unsafe
|
||||
```
|
||||
|
||||
- Update all installed plugins:
|
||||
|
||||
```
|
||||
appium plugin update installed
|
||||
```
|
||||
|
||||
## `uninstall`
|
||||
|
||||
Removes an installed extension.
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium {driver|plugin} uninstall <extension-name>
|
||||
```
|
||||
|
||||
|Argument|Description|
|
||||
|--|--|
|
||||
|`extension-name`|The short name of the installed extension|
|
||||
|
||||
#### Options
|
||||
|
||||
|Argument|Description|Type|
|
||||
|--|--|--|
|
||||
|`--json`|Return the result in JSON format|boolean|
|
||||
|
||||
#### Example
|
||||
|
||||
- Remove the `images` plugin:
|
||||
|
||||
```
|
||||
appium plugin uninstall images
|
||||
```
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Command Line Interface
|
||||
---
|
||||
|
||||
Appium provides a command-line executable (`appium`), which can be used to configure and launch
|
||||
the Appium server, as well as manage Appium extensions (drivers and plugins).
|
||||
|
||||
The executable has four main subcommands: `server`, `driver`, `plugin`, and `setup`. All subcommands
|
||||
(and sub-subcommands) can be run with the `--help`/`-h` option for usage instructions.
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
|
||||
- [__`appium server`__](./server.md) (or simply `appium`)
|
||||
|
||||
Start an Appium server
|
||||
|
||||
- [__`appium driver`__](./extensions.md)
|
||||
|
||||
Manage individual drivers
|
||||
|
||||
- [__`appium plugin`__](./extensions.md)
|
||||
|
||||
Manage individual plugins
|
||||
|
||||
- [__`appium setup`__](./setup.md)
|
||||
|
||||
Manage multiple drivers/plugins
|
||||
|
||||
</div>
|
||||
|
||||
Appium also recognizes several [environment variables](./env-vars.md), which may be used for
|
||||
advanced configuration.
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: appium server
|
||||
---
|
||||
|
||||
Launches an Appium server.
|
||||
|
||||
```
|
||||
appium server
|
||||
```
|
||||
|
||||
You can also omit the `server` subcommand:
|
||||
|
||||
```
|
||||
appium
|
||||
```
|
||||
|
||||
### Options
|
||||
|
||||
!!! note
|
||||
|
||||
All of these options can also be set via a [Configuration File](../../guides/config.md). Options
|
||||
set on the command line will override any options found in a configuration file.
|
||||
|
||||
|<div style="width:15em">Argument</div>|Description|Type|<div style="width:7em">Default</div>|
|
||||
|--|--|--|--|
|
||||
|`--address`, `-a`|IPv4/IPv6 address to listen on|string|`0.0.0.0`|
|
||||
|`--allow-cors`|Allow web browser connections from any host|boolean|`false`|
|
||||
|`--allow-insecure`|List of [insecure features](../../guides/security.md) that should be allowed in this server's sessions. Individual features can be overridden by `--deny-insecure`. Has no effect in combination with `--relaxed-security`.|array<string>|`[]`|
|
||||
|`--base-path`, `-pa`|Base path to use as the prefix for all webdriver routes running on the server|string|`""`|
|
||||
|`--callback-address`, `-ca`|Callback IP address|string|`0.0.0.0`|
|
||||
|`--callback-port`, `-cp`|Callback port|integer|`4723`|
|
||||
|`--config`|Path to an [Appium configuration JSON file](../../guides/config.md)|string||
|
||||
|`--debug-log-spacing`|Add exaggerated spacing in logs to help with visual inspection|boolean|`false`|
|
||||
|`--default-capabilities`, `-dc`|Capabilities that will be used for each session, unless overridden by received capabilities|object||
|
||||
|`--deny-insecure`|List of [insecure features](../../guides/security.md) that should be disabled in this server's sessions. Since all insecure features are disabled by default, this argument has no effect without either `--allow-insecure` or `--relaxed-security`, and is applied after both.|array<string>|`[]`|
|
||||
|`--driver`|Driver-specific configuration. Keys should correspond to driver package names|object||
|
||||
|`--drivers-import-chunk-size`|Maximum number of drivers that can be imported in parallel on server startup|number|`3`|
|
||||
|`--keep-alive-timeout`, `-ka`|Timeout (in seconds) to use as both the keep-alive timeout and the connection timeout for all client requests. Disabled if set to `0`.|integer|`600`|
|
||||
|`--request-timeout`|Timeout (in seconds) for waiting to receive the entire HTTP request from the client. Disabled if set to `0`. Requests exceeding this timeout will be rejected with the code `HTTP 408`.|integer|`3600`|
|
||||
|`--local-timezone`|Use local timezone for log timestamps|boolean|`false`|
|
||||
|`--log`, `-g`|Path to a file where the server logs should be output. This does not affect output on the console.|string||
|
||||
|`--log-filters`|List of log filtering rules. See the [log filtering guide](../../guides/log-filters.md) for details.|array||
|
||||
|`--log-level`|The log level for the server logs. Supported values are `debug`, `info`, `warn`, or `error`. Combining two supported values using a colon (e.g. `warn:debug`) allows to set separate log levels for the console and file outputs, respectively.|string|`debug`|
|
||||
|`--log-format`|The log format of the server logs. Supported values are `text`, `json`, or `pretty_json`. Setting the value to `json` disables colors.|string|`text`|
|
||||
|`--log-no-colors`|Disable colors in the server log|boolean|`false`|
|
||||
|`--log-timestamp`|Show timestamps in the server log|boolean|`false`|
|
||||
|`--long-stacktrace`|Add long stack traces to log entries. Recommended for debugging only.|boolean|`false`|
|
||||
|`--no-perms-check`|Skip various permission checks on the server startup|boolean|`false`|
|
||||
|`--nodeconfig`|JSON configuration for registering Appium as a node with Selenium Grid 3|object||
|
||||
|`--plugin`|Plugin-specific configuration. Keys should correspond to plugin package names|object||
|
||||
|`--plugins-import-chunk-size`|Maximum number of plugins that can be imported in parallel on server startup|number|`7`|
|
||||
|`--port`, `-p`|Port to listen on|integer|`4723`|
|
||||
|`--relaxed-security`|Allow all [insecure features](../../guides/security.md). Only use this if all clients are in a trusted network and could not potentially break out of the session sandbox. Specific features can be overridden by using `--deny-insecure`.|boolean|`false`|
|
||||
|`--session-override`|Enable session override (clobbering)|boolean|`false`|
|
||||
|`--shutdown-timeout`|Timeout (in milliseconds) for waiting on all active connections to close, when shutting down the server|number|`5000`|
|
||||
|`--ssl-cert-path`|Absolute path to the `.cert` file if TLS is used. Must be provided together with `--ssl-key-path`. See the [SSL/TLS/SPDY Support guide](../../guides/tls.md) for details.|string||
|
||||
|`--ssl-key-path`|Absolute path to the `.key` file if TLS is used. Must be provided together with `--ssl-cert-path`. See the [SSL/TLS/SPDY Support guide](../../guides/tls.md) for details.|string||
|
||||
|`--strict-caps`|Prevent creation of new client sessions that use unsupported capabilities|boolean|`false`|
|
||||
|`--tmp`|Absolute path to the directory used for temporary files|string|[`os.tmpdir()`](https://nodejs.org/api/os.html#ostmpdir)|
|
||||
|`--use-drivers`|List of drivers to activate. By default, all installed drivers are activated.|array<string>|`[]`|
|
||||
|`--use-plugins`|List of plugins to activate. By default, no plugins are activated. Set to `["all"]` to activate all installed plugins.|array<string>|`[]`|
|
||||
|`--webhook`, `-G`|URL for an HTTP listener where the server logs should be output. This does not affect output on the console.|string||
|
||||
|
||||
### Info Options
|
||||
|
||||
The following options are used for reference or debug purposes. They are only supported for the base `appium` command (not `appium server`), and will not launch the server.
|
||||
|
||||
|<div style="width:10em">Argument</div>|Description|
|
||||
|--|--|
|
||||
|`--show-build-info`|Print detailed information on the Appium server version|
|
||||
|`--show-config`|Print the current Appium server configuration details|
|
||||
|`--show-debug-info`|Print information on the current environment: details about the operating system, Node.js, and Appium itself|
|
||||
|`--version`, `-v`|Print the Appium server version|
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
title: appium setup
|
||||
---
|
||||
<style>
|
||||
ul[data-md-component="toc"] .md-nav {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
Installs a specific preset of extensions (drivers and plugins), or uninstalls all extensions.
|
||||
When installing a preset, any already installed extensions are kept intact.
|
||||
|
||||
The following sub-subcommands are supported: `browser`, `desktop`, `mobile`, and `reset`.
|
||||
|
||||
Refer to the [Ecosystem documentation](../../ecosystem/index.md) to learn more about the extensions
|
||||
mentioned below.
|
||||
|
||||
## `browser`
|
||||
|
||||
Installs the following extensions for browser webview testing:
|
||||
|
||||
* Drivers: `safari`[^1], `gecko`, `chromium`
|
||||
* Plugins: `images`
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium setup browser
|
||||
```
|
||||
|
||||
## `desktop`
|
||||
|
||||
Installs the following extensions for desktop application testing:
|
||||
|
||||
* Drivers: `mac2`[^1], `windows`[^2]
|
||||
* Plugins: `images`
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium setup desktop
|
||||
```
|
||||
|
||||
## `mobile`
|
||||
|
||||
Installs the following extensions for mobile testing:
|
||||
|
||||
* Drivers: `uiautomator2`, `xcuitest`[^1], `espresso`
|
||||
* Plugins: `images`
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium setup mobile
|
||||
```
|
||||
|
||||
You can also omit the `mobile` sub-subcommand:
|
||||
|
||||
```
|
||||
appium setup
|
||||
```
|
||||
|
||||
## `reset`
|
||||
|
||||
Uninstalls all installed extensions, along with their manifest files, from the Appium home
|
||||
directory. This can be useful if you experience configuration issues on server startup, for
|
||||
example, due to a failed upgrade attempt from an older Appium version.
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
appium setup reset
|
||||
```
|
||||
|
||||
[^1]: Only installed if the host machine is running macOS.
|
||||
[^2]: Only installed if the host machine is running Windows.
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Reference
|
||||
---
|
||||
|
||||
This section of the Appium documentation provides a reference to the two main interfaces within the
|
||||
Appium server: the command-line executable, and the supported API endpoints.
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
|
||||
- :octicons-command-palette-16: [__Command Line Interface__](./cli/index.md)
|
||||
|
||||
---
|
||||
|
||||
Learn how to use the Appium command-line executable
|
||||
|
||||
- :material-cloud-braces: [__API Endpoints__](./api/index.md)
|
||||
|
||||
---
|
||||
|
||||
View endpoints supported by the Appium server
|
||||
|
||||
</div>
|
||||
@@ -18,3 +18,11 @@ maintainers, Jonathan Lipps, with lots of useful guides
|
||||
- [Appium and Selenium Fundamentals](https://ui.headspin.io/university/learn/appium-selenium-fundamentals-2020) - a comprehensive video course on learning Python, Selenium, and Appium by Jonathan Lipps
|
||||
- [Mobile Test Automation with Appium](https://testautomationu.applitools.com/appium-java-tutorial/) - a video course by Moataz Nabil
|
||||
- [Advanced Appium](https://www.linkedin.com/learning/advanced-appium) - a video course by Jonathan Lipps
|
||||
|
||||
## Conference Archives
|
||||
|
||||
- [AppiumConf 2018](https://www.youtube.com/playlist?list=PLhr2WKNPXcZOmOf1k2aqkbMZwnZb2pSZL)
|
||||
- [AppiumConf 2019](https://www.youtube.com/playlist?list=PL9Z-JgiTsOYSfJh9YKI9Stj3FMwHERw6w)
|
||||
- [AppiumConf 2021](https://www.youtube.com/playlist?list=PL9Z-JgiTsOYRCcJhDfmKAah9XmAp2b903)
|
||||
- [AppiumConf 2024](https://www.youtube.com/playlist?list=PL9Z-JgiTsOYQaU5i5LJtAWlh5WVZPi3If)
|
||||
- [SeleniumConf & AppiumConf 2025](https://www.youtube.com/playlist?list=PLRdSclUtJDYV2R92TLbmwxws6clruuTjH)
|
||||
@@ -1,71 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Server Command-Line Arguments
|
||||
---
|
||||
|
||||
To start the Appium server, you may either run `appium` or `appium server`. The `server` subcommand
|
||||
is considered to be the default, so if you omit it, Appium will interpret this as your request to
|
||||
run the Appium server.
|
||||
|
||||
The invocation of `appium` (or `appium server`) can take a number of arguments, which are detailed
|
||||
below.
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
All of these arguments can be set via a [Configuration File](../guides/config.md) instead if
|
||||
you want. Any arguments set on the command line will override any arguments found in
|
||||
a configuration file.
|
||||
```
|
||||
|
||||
| <div style="width:12em">Argument</div> | Description | Type | <div style="width:8em">Default</div> | Aliases |
|
||||
| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | ------------------------------------------------------------------------------ | ------- |
|
||||
| `--address` | IP address to listen on | string | `0.0.0.0` | `-a` |
|
||||
| `--allow-cors` | Whether the Appium server should allow web browser connections from any host | boolean | `false` | |
|
||||
| `--allow-insecure` | Set which [insecure features](../guides/security.md) are allowed to run in this server's sessions. Most features are defined on a driver level; see driver documentation for more details. Individual features can be overridden by `--deny-insecure`. Has no effect in combination with `--relaxed-security`. | array<string> | `[]` | |
|
||||
| `--base-path` | Base path to use as the prefix for all webdriver routes running on the server | string | `""` | `-pa` |
|
||||
| `--callback-address` | Callback IP address (default: same as `--address`) | string | | `-ca` |
|
||||
| `--callback-port` | Callback port (default: same as `--port`) (Value must be between `1` and `65535`) | integer | `4723` | `-cp` |
|
||||
| `--config` | Path to an [Appium configuration JSON file](../guides/config.md) | string | | |
|
||||
| `--debug-log-spacing` | Add exaggerated spacing in logs to help with visual inspection | boolean | `false` | |
|
||||
| `--default-capabilities` | Set the default desired capabilities, which will be set on each session unless overridden by received capabilities. If a string, a path to a JSON file containing the capabilities, or raw JSON. | object | | `-dc` |
|
||||
| `--deny-insecure` | Set which [insecure features](../guides/security.md) are not allowed to run in this server's sessions. Most features are defined on a driver level; see driver documentation for more details. Since all insecure features are disabled by default, this argument has no effect without either `--allow-insecure` or `--relaxed-security`, and is applied after both. | array<string> | `[]` | |
|
||||
| `--driver` | Driver-specific configuration. Keys should correspond to driver package names | object | | |
|
||||
| `--drivers-import-chunk-size` | The maximum amount of drivers that could be imported in parallel on server startup | number | `3` | |
|
||||
| `--keep-alive-timeout` | Number of seconds the Appium server should apply as both the keep-alive timeout and the connection timeout for all requests. Setting this to `0` disables the timeout. | integer | `600` | `-ka` |
|
||||
| `--request-timeout` | Number of seconds the Appium server should apply for receiving the entire HTTP request from the client. A value of 0 disables the timeout. Set it to a non-zero value to protect against potential Denial-of-Service attacks in case the server is deployed without a reverse proxy in front. HTTP requests that are running longer than allowed by this timeout would be rejected with the status code 408. | integer | `3600` | |
|
||||
| `--local-timezone` | Use local timezone for timestamps | boolean | `false` | |
|
||||
| `--log` | Also send log output to this file | string | | `-g` |
|
||||
| `--log-filters` | One or more log filtering rules | array | | |
|
||||
| `--log-level` | Log level (console[:file]) (Value must be one of: `info`, `info:debug`, `info:info`, `info:warn`, `info:error`, `warn`, `warn:debug`, `warn:info`, `warn:warn`, `warn:error`, `error`, `error:debug`, `error:info`, `error:warn`, `error:error`, `debug`, `debug:debug`, `debug:info`, `debug:warn`, `debug:error`) | string | `debug` | |
|
||||
| `--log-format` | Log format (Value must be to one of: `text`, `json`, `pretty_json`). If logs are printed as JSON then the text coloring is always disabled. | string | `text` | |
|
||||
| `--log-no-colors` | Do not use color in console output | boolean | `false` | |
|
||||
| `--log-timestamp` | Show timestamps in console output | boolean | `false` | |
|
||||
| `--long-stacktrace` | Add long stack traces to log entries. Recommended for debugging only. | boolean | `false` | |
|
||||
| `--no-perms-check` | Skip various permission checks on the server startup | boolean | `false` | |
|
||||
| `--nodeconfig` | Path to configuration JSON file to register Appium as a node with Selenium Grid 3; otherwise the configuration itself | string | | |
|
||||
| `--plugin` | Plugin-specific configuration. Keys should correspond to plugin package names | object | | |
|
||||
| `--plugins-import-chunk-size` | The maximum amount of plugins that could be imported in parallel on server startup | number | `7` | |
|
||||
| `--port` | Port to listen on (Value must be between `1` and `65535`) | integer | `4723` | `-p` |
|
||||
| `--relaxed-security` | Allow all [insecure features](../guides/security.md). Only use this if all clients are in a trusted network and could not potentially break out of the session sandbox. Specific features can be overridden by using `--deny-insecure`. | boolean | `false` | |
|
||||
| `--session-override` | Enables session override (clobbering) | boolean | `false` | |
|
||||
| `--ssl-cert-path` | Absolute path to the `.cert` file if TLS is used. Must be provided together with `--ssl-key-path`. See the [SSL/TLS/SPDY Support guide](../guides/tls.md) for details | string | | |
|
||||
| `--ssl-key-path` | Absolute path to the `.key` file if TLS is used. Must be provided together with `--ssl-cert-path`. See the [SSL/TLS/SPDY Support guide](../guides/tls.md) for details | string | | |
|
||||
| `--strict-caps` | Cause sessions to fail if desired caps are sent in that Appium does not recognize as valid for the selected device | boolean | `false` | |
|
||||
| `--tmp` | Absolute path to directory Appium can use to manage temp files | string | Windows: `C:\Windows\Temp`<br>Others: `/tmp` | |
|
||||
| `--trace-dir` | Absolute path to directory Appium can use to save iOS instrument traces | string | `<tmp>/appium-instruments` | |
|
||||
| `--use-drivers` | A list of drivers to activate. By default, all installed drivers will be activated. | array<string> | `[]` | |
|
||||
| `--use-plugins` | A list of plugins to activate. To activate all plugins, the value should be an array with a single item `"all"`. | array<string> | `[]` | |
|
||||
| `--webhook` | Also send log output to this http listener | string | | `-G` |
|
||||
|
||||
The following arguments are used for information retrieval, after which the server will automatically exit. They are therefore meant for reference or debug purposes.
|
||||
|
||||
| <div style="width:10em">Argument</div> | Description | Alias |
|
||||
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
|
||||
| `--help` | Print instructions on using the Appium command-line. This argument can also be used for any Appium subcommands. | `-h` |
|
||||
| `--show-build-info` | Print detailed information on the Appium server version | |
|
||||
| `--show-config` | Print the current Appium server configuration details | |
|
||||
| `--show-debug-info` | Print information on the current environment: details about the operating system, Node.js, and Appium itself | |
|
||||
| `--version` | Print the Appium server version | `-v` |
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Server Environment Variables
|
||||
---
|
||||
|
||||
The primary way of configuring the Appium server is via [Command-Line Arguments](./args.md). However, some more
|
||||
advanced features are toggled or configured via environment variables. To set environment
|
||||
variables, refer to the documentation for your operating system and terminal. These are the
|
||||
environment variables that the Appium server understands:
|
||||
|
||||
| Variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Description |
|
||||
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `APPIUM_HOME` | By default, Appium creates a directory called `.appium` in the home directory for your system user. You can adjust the directory with this variable, as detailed in the [Managing Extensions](../guides/managing-exts.md) guide. |
|
||||
| `APPIUM_TMP_DIR` | By default, Appium uses a random temporary directory for many of its operations. If you wish to use a specific directory, you may do so by including an absolute path as the value of this variable. The behaviour is equivalent to using the `--tmp` CLI arg. |
|
||||
| `APPIUM_PREFER_SYSTEM_UNZIP` | Set to `0` or `false` to request that Appium not use the `unzip` binary included on your system for unzipping downloaded apps or other artifacts. Instead it will use a JS-based unzip library. This could help on some systems with non-existent or non-standard `unzip` commands. Note that if unzipping fails using the system library, the fallback library will be attempted in any case, so setting this env var merely saves time in the event you know the system unzip will fail. |
|
||||
| `APPIUM_HOST` | Same as the `--address` CLI arg |
|
||||
| `APPIUM_PORT` | Same as the `--port` CLI arg |
|
||||
| `APPIUM_RELOAD_EXTENSIONS` | Set to `1` to cause Appium to re-require extensions when new sessions are created. This is mostly useful for [building extensions](../developing/build-drivers.md) |
|
||||
| `APPIUM_OMIT_PEER_DEPS` | Adds `--omit=peer` to all the NPM commands run internally by Appium. Mostly an internal feature. |
|
||||
| `APPIUM_APPS_CACHE_MAX_AGE` | Allows to set the maximum age (in minutes) for [cached applications](../guides/caching.md). The default value is `60 * 24` (24 hours). Do not set it to a lower number than the duration of a single session startup. |
|
||||
| `APPIUM_APPS_CACHE_MAX_ITEMS` | Allows to set the maximum amount of [cached applications](../guides/caching.md). The default value is `1024`. Do not set it to a lower number than the amount of apps in all parallel sessions per process. |
|
||||
| `APPIUM_APPS_CACHE_IGNORE_URL_QUERY` | If the above option is enabled then the 'search' part of the app URL will be cut off from cache keys. See the corresponding [feature request](https://discuss.appium.io/t/regarding-app-caching-when-using-aws-s3-presigned-urls/42713) for more details. Disabled by default. |
|
||||
@@ -1,228 +0,0 @@
|
||||
---
|
||||
title: Extension Command-Line Usage
|
||||
---
|
||||
|
||||
Appium allows for the flexible installation and management of various _extensions_, such as _drivers_
|
||||
(which provide Appium with the capability to automate a given platform) and _plugins_ (which can
|
||||
augment or alter the way individual Appium commands work). For a conceptual understanding of these
|
||||
entities, please review the [Introduction](../intro/index.md).
|
||||
|
||||
Management of drivers and plugins is handled by Appium's Extension CLI (command-line interface).
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
This reference uses placeholders to refer to various options. Anywhere you see one of these
|
||||
placeholders in the reference, ensure you replace it with the correct type of actual content.
|
||||
```
|
||||
|
||||
| Placeholder | Meaning |
|
||||
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `<ext-type>` | "Extension type". It should be either `driver` or `plugin`. All the Extension CLI commands can be used with either drivers or plugins, so you must specify which type of extension will be used |
|
||||
| `<ext-name>` | "Extension name". This is the short name of the extension found in a call to `appium <ext-type> list`. This is distinct from the NPM package name of the extension or, in general, the "install spec" of the extension. |
|
||||
| `<install-spec>` | "Install specification". This refers to the string used to indicate what extension Appium should install. |
|
||||
| `<install-source>` | This refers to the method that Appium should use to install an extension. |
|
||||
|
||||
## Commands
|
||||
|
||||
All Extension CLI commands begin with `appium <ext-type>`, i.e., either `appium driver` or `appium
|
||||
plugin`.
|
||||
|
||||
All Extension CLI commands can take an optional `--json` argument, which will return the result of
|
||||
the command as a machine-readable JSON string rather than the standard output, which is colourized
|
||||
and tuned for human consumption.
|
||||
|
||||
### `doctor`
|
||||
|
||||
Run doctor checks for the given extension, which validate whether the extension has its prerequisites
|
||||
configured correctly. Note that not all extensions include doctor checks. See the
|
||||
[Building Doctor Checks](../developing/build-doctor-checks.md) tutorial for more details on
|
||||
how to create them.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> doctor <ext-name>
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<ext-name>`: the name of the extension whose doctor checks you want to run
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
Example (run doctor checks for the UiAutomator2 driver):
|
||||
|
||||
```
|
||||
appium driver doctor uiautomator2
|
||||
```
|
||||
|
||||
### `install`
|
||||
|
||||
Install an extension. If successful, respond with the short name of the extension which can be used
|
||||
in other invocations of the Extension CLI. If the extension is a driver, also note which platforms
|
||||
may be used with the driver.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> install <install-spec> [--source=<install-source>] [--package=<package-name>] [--json]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<install-spec>`: this is the name, location, and/or version of the extension you want to
|
||||
install. Its possible values are dependent on the `<install-source>` (see below).
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--source`: this directs Appium where to find your extension. See below for a table of possible
|
||||
source types and corresponding install specification.
|
||||
- `--package`: when `<install-source>` is `git` or `github`, `--package` is required. It should be
|
||||
the Node.js package name of the extension. Without this information, Appium will not be able to
|
||||
find the installed package.
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
| Install source type | Behaviour |
|
||||
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| None | This is the default behaviour when no `--source` is used. In this case, Appium will look at `<install-spec>` and match it against the name of extensions available when running `appium <ext-type> list`, i.e., against the officially recognized extension names. If found, it will install that extension at the latest version via NPM |
|
||||
| `npm` | Install an extension based on its NPM package name. Here, `<install-spec>` must be the NPM package name with any additional NPM installation modifiers, like version (see below) |
|
||||
| `github` | Install an extension via a GitHub spec of the form `<org>/<repo>` |
|
||||
| `git` | Install an extension via a Git URL (e.g., `git+ssh://git-host.com/repo.git`) |
|
||||
| `local` | Install an extension via a local path. This must be a path to the directory where the Node.js package information for the driver is located. |
|
||||
|
||||
#### NPM-based `<install-spec>`
|
||||
|
||||
When Appium is installing an extension via NPM (as is the case when `--source` is either omitted or
|
||||
set to `npm`), the `<install-spec>` can be complex, and can include any kind of information allowed
|
||||
by `npm install`:
|
||||
|
||||
- `[@scope]/<name>`
|
||||
- `[@scope]/<name>@<version>`
|
||||
- `[@scope]/<name>@<tag>`
|
||||
- `[@scope]/<name>@<version range>`
|
||||
|
||||
#### Examples
|
||||
|
||||
- Install the latest XCUITest driver:
|
||||
|
||||
```
|
||||
appium driver install xcuitest
|
||||
```
|
||||
|
||||
- Install the XCUITest driver at version 4.11.1:
|
||||
|
||||
```
|
||||
appium driver install xcuitest@4.11.1
|
||||
```
|
||||
|
||||
- Install the `beta` version of the `@appium/fake-driver` from NPM:
|
||||
|
||||
```
|
||||
appium driver install --source=npm @appium/fake-driver@beta
|
||||
```
|
||||
|
||||
- Install a locally-developed plugin:
|
||||
|
||||
```
|
||||
appium plugin install --source=local /path/to/my/plugin
|
||||
```
|
||||
|
||||
### `list`
|
||||
|
||||
List installed and available extensions. "Available" extensions include those which are officially
|
||||
recognized by the Appium team, but you are not limited to installing only the extensions displayed
|
||||
in this list.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> list [--installed] [--updates] [--json]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--installed`: show only installed extensions, not installed plus available extensions
|
||||
- `--updates`: for extensions installed via NPM, display a message if there are any updates
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
### `run`
|
||||
|
||||
Run a script included in an extension package. Extension authors can include runnable scripts that
|
||||
assist with setup or perform other tasks. These scripts are given names (called the `<script-name>`
|
||||
in this reference) by extension authors and will generally be documented in extension
|
||||
documentation.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> run <ext-name> [--json] <script-name> [script-args]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<ext-name>`: the name of the extension whose script you want to run
|
||||
- `<script-name>`: the name of the script the extension has published
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `script-args`: any arguments that Appium does not interpret as belonging to its own set of
|
||||
arguments will be passed along to the extension script
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
Example (run the `reset` script included with the UiAutomator2 driver):
|
||||
|
||||
```
|
||||
appium driver run uiautomator2 reset
|
||||
```
|
||||
|
||||
### `update`
|
||||
|
||||
Update one or more extensions that have been installed via NPM. By default, Appium will not
|
||||
automatically update any extension past a major version boundary, so as to prevent
|
||||
unintended breaking changes.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> update <ext-name> [--unsafe] [--json]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<ext-name>`: the name of the extension to update, or the string `installed` (which will update
|
||||
all installed extensions)
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--unsafe`: direct Appium to go ahead and update past a major version boundary
|
||||
- `--json`: return the result in JSON format
|
||||
|
||||
### `uninstall`
|
||||
|
||||
Remove an installed extension.
|
||||
|
||||
Usage:
|
||||
|
||||
```
|
||||
appium <ext-type> uninstall <ext-name> [--json]
|
||||
```
|
||||
|
||||
Required arguments:
|
||||
|
||||
- `<ext-type>`: must be `driver` or `plugin`
|
||||
- `<ext-name>`: the name of the extension to uninstall
|
||||
|
||||
Optional arguments:
|
||||
|
||||
- `--json`: return the result in JSON format
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Command-Line Overview
|
||||
---
|
||||
|
||||
Appium provides a command-line executable (`appium`), which will likely be your main way of interacting with
|
||||
the Appium server. This section of the Appium documentation describes how to use this executable.
|
||||
|
||||
To start off, you can run `appium -v` or `appium --version` to return the installed version,
|
||||
or run `appium -h` or `appium --help` to return the help message.
|
||||
|
||||
The main `appium` executable provides the following subcommands:
|
||||
|
||||
1. `appium server` (or simply `appium`) - launch an Appium server
|
||||
- [See here for accepted arguments](./args.md)
|
||||
- For advanced features, [see here for accepted environment variables](./env-vars.md)
|
||||
2. `appium driver` - manage Appium drivers
|
||||
- [See here for details](./extensions.md)
|
||||
3. `appium plugin` - manage Appium plugins
|
||||
- [See here for details](./extensions.md)
|
||||
4. `appium setup` - batch install a preset of drivers and plugins
|
||||
- [See here for details](./setup.md)
|
||||
|
||||
Like the main command, you can also run each subcommand with the `-h` or `--help` flag to learn more about it.
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Setup Command-Line Usage
|
||||
---
|
||||
|
||||
The `setup` command aims to simplify the initial procedure of setting up Appium. It allows to install
|
||||
multiple extensions (drivers/plugins) in one go, without the need to run
|
||||
`appium <ext-name> install <ext-name>` multiple times.
|
||||
|
||||
The command has several presets that can be used to install different sets of extensions.
|
||||
The presets are as follows:
|
||||
|
||||
| Preset | Installation Command | Included Drivers | Included Plugins |
|
||||
| ------------------- | --------------------------------------- | ------------------------------------------ | ---------------- |
|
||||
| Mobile | `appium setup mobile` or `appium setup` | `uiautomator2`, `xcuitest`[^1], `espresso` | `images` |
|
||||
| Desktop application | `appium setup desktop` | `mac2`[^1], `windows`[^2] | `images` |
|
||||
| Desktop browser | `appium setup browser` | `safari`[^1], `gecko`, `chromium` | `images` |
|
||||
|
||||
Attempting to install a preset while already having one or more of its included extensions installed
|
||||
will only install the missing extensions.
|
||||
|
||||
Refer to the [Ecosystem documentation](../ecosystem/index.md) to learn more about the extensions
|
||||
listed above.
|
||||
|
||||
This commands also supports the functionality that allows to fully reset your Appium server
|
||||
deployment if you experience various configuration issues,
|
||||
for example, due to a failed upgrade attempt from an older Appium version, on server startup.
|
||||
By running `appium setup reset` the server would uninstall all installed drivers, plugins and their related manifest files from the currently used Appium home folder.
|
||||
|
||||
[^1]: Only installed if the host machine is running macOS.
|
||||
|
||||
[^2]: Only installed if the host machine is running Windows.
|
||||
@@ -1,502 +0,0 @@
|
||||
# Driver: base-driver
|
||||
|
||||
### `createSession`
|
||||
|
||||
`POST` **`/session`**
|
||||
|
||||
Historically the first two arguments were reserved for JSONWP capabilities.
|
||||
Appium 2 has dropped the support of these, so now we only accept capability
|
||||
objects in W3C format and thus allow any of the three arguments to represent
|
||||
the latter.
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#new-session](https://w3c.github.io/webdriver/#new-session)
|
||||
|
||||
<!-- comment source: multiple -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :---------------------- | :---------------------------------------------- | :----------------------------------------------------------------------------------------------------- |
|
||||
| `desiredCapabilities?` | `W3CDriverCaps`<`C`\> | the new session capabilities |
|
||||
| `requiredCapabilities?` | `W3CDriverCaps`<`C`\> | another place the new session capabilities could be sent (typically left undefined) |
|
||||
| `capabilities?` | `W3CDriverCaps`<`C`\> | another place the new session capabilities could be sent (typically left undefined) |
|
||||
|
||||
#### Response
|
||||
|
||||
`CreateResult`
|
||||
|
||||
The capabilities object representing the created session
|
||||
|
||||
### `deleteSession`
|
||||
|
||||
`DELETE` **`/session/:sessionId`**
|
||||
|
||||
Returns capabilities for the session and event history (if applicable)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`SingularSessionData`<`C`, `SessionData`\>
|
||||
|
||||
A session data object
|
||||
|
||||
### `getSession`
|
||||
|
||||
`GET` **`/session/:sessionId`**
|
||||
|
||||
Returns capabilities for the session and event history (if applicable).
|
||||
|
||||
!!! warning "Deprecated"
|
||||
|
||||
```
|
||||
Please use `getAppiumSessionCapabilities` to get the session capabilities.
|
||||
Please use `getLogEvents` to get event history.
|
||||
```
|
||||
|
||||
<!-- comment source: multiple -->
|
||||
|
||||
#### Response
|
||||
|
||||
`SingularSessionData`<`C`, `SessionData`\>
|
||||
|
||||
A session data object
|
||||
|
||||
### `getAppiumSessionCapabilities`
|
||||
|
||||
`GET` **`/session/:sessionId/appium/capabilities`**
|
||||
|
||||
Returns capabilities for the session.
|
||||
|
||||
<!-- comment source: multiple -->
|
||||
|
||||
#### Response
|
||||
|
||||
`AppiumSessionCapabilities`
|
||||
|
||||
A session data object
|
||||
|
||||
### `findElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element`**
|
||||
|
||||
Find a UI element given a locator strategy and a selector, erroring if it can't be found
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element](https://w3c.github.io/webdriver/#find-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------- | :--------------------------------------------------------------------- |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific element |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>
|
||||
|
||||
The element object encoding the element id which can be used in element-related
|
||||
commands
|
||||
|
||||
### `findElementFromElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element/:elementId/element`**
|
||||
|
||||
Find a UI element given a locator strategy and a selector, erroring if it can't be found. Only
|
||||
look for elements among the set of descendants of a given element
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element-from-element](https://w3c.github.io/webdriver/#find-element-from-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------- | :--------------------------------------------------------------------- |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific element |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>
|
||||
|
||||
The element object encoding the element id which can be used in element-related
|
||||
commands
|
||||
|
||||
### `findElementFromShadowRoot`
|
||||
|
||||
`POST` **`/session/:sessionId/shadow/:shadowId/element`**
|
||||
|
||||
Find an element from a shadow root
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element-from-shadow-root](https://w3c.github.io/webdriver/#find-element-from-shadow-root)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------- | :---------------------------------------------------------------------- |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>
|
||||
|
||||
The element inside the shadow root matching the selector
|
||||
|
||||
### `findElements`
|
||||
|
||||
`POST` **`/session/:sessionId/elements`**
|
||||
|
||||
Find a a list of all UI elements matching a given a locator strategy and a selector
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-elements](https://w3c.github.io/webdriver/#find-elements)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------- | :---------------------------------------------------------------------- |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>[]
|
||||
|
||||
A possibly-empty list of element objects
|
||||
|
||||
### `findElementsFromElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element/:elementId/elements`**
|
||||
|
||||
Find a a list of all UI elements matching a given a locator strategy and a selector. Only
|
||||
look for elements among the set of descendants of a given element
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-elements-from-element](https://w3c.github.io/webdriver/#find-elements-from-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------- | :---------------------------------------------------------------------- |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>[]
|
||||
|
||||
A possibly-empty list of element objects
|
||||
|
||||
### `findElementsFromShadowRoot`
|
||||
|
||||
`POST` **`/session/:sessionId/shadow/:shadowId/elements`**
|
||||
|
||||
Find elements from a shadow root
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element-from-shadow-root](https://w3c.github.io/webdriver/#find-element-from-shadow-root)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :------- | :---------------------------------------------------------------------- |
|
||||
| `using` | `string` | the locator strategy |
|
||||
| `value` | `string` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`Element`<`string`\>[]
|
||||
|
||||
A possibly empty list of elements inside the shadow root matching the selector
|
||||
|
||||
### `getLog`
|
||||
|
||||
`POST` **`/session/:sessionId/se/log`**
|
||||
|
||||
Get the log for a given log type.
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :----- | :------- | :------------------------------------------------------------------------------------------------- |
|
||||
| `type` | `string` | Name/key of log type as defined in ILogCommands.supportedLogTypes. |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
### `getLogEvents`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/events`**
|
||||
|
||||
Get a list of events that have occurred in the current session
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :--------------------------------------------------------------------------- | :-------------------------------------------------------- |
|
||||
| `type?` | `string` \\| `string`[] | filter the returned events by including one or more types |
|
||||
|
||||
#### Response
|
||||
|
||||
`EventHistory` \| `Record`<`string`, `number`\>
|
||||
|
||||
The event history for the session
|
||||
|
||||
### `getLogTypes`
|
||||
|
||||
`GET` **`/session/:sessionId/se/log/types`**
|
||||
|
||||
Get available log types as a list of strings
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`string`[]
|
||||
|
||||
### `getPageSource`
|
||||
|
||||
`GET` **`/session/:sessionId/source`**
|
||||
|
||||
Get the current page/app source as HTML/XML
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#get-page-source](https://w3c.github.io/webdriver/#get-page-source)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`string`
|
||||
|
||||
The UI hierarchy in a platform-appropriate format (e.g., HTML for a web page)
|
||||
|
||||
### `getAppiumSessions`
|
||||
|
||||
`GET` **`/appium/sessions`**
|
||||
|
||||
Get data for all sessions running on an Appium server
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
A list of session data objects, where each object contains 3 keys:
|
||||
|
||||
- `id`: the session ID
|
||||
- `created`: the session creation time as a Unix timestamp in milliseconds
|
||||
- `capabilities`: the session capabilities
|
||||
|
||||
Data is only returned if the `session_discovery` [insecure feature](../guides/security.md)
|
||||
is enabled on the server.
|
||||
|
||||
#### Example
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id":"ba30c6da-c266-4734-8ddb-c16f5bb53e16",
|
||||
"created": 1736092760555,
|
||||
"capabilities":{ "platformName":"ios","browserName":"safari","automationName":"xcuitest","platformVersion":"17.2","deviceName":"iPhone 15" }
|
||||
},
|
||||
{
|
||||
"id":"1441110c-1ece-4e45-abbf-ebf404f45f0a",
|
||||
"created": 1736092760555,
|
||||
"capabilities":{ "platformName":"ios","browserName":"safari","automationName":"xcuitest","platformVersion":"17.0","deviceName":"iPhone 14" }
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
### `getSettings`
|
||||
|
||||
`GET` **`/session/:sessionId/appium/settings`**
|
||||
|
||||
Update the session's settings dictionary with a new settings object
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### `updateSettings`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/settings`**
|
||||
|
||||
Update the session's settings dictionary with a new settings object
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :--------- | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `settings` | `Settings` | A key-value map of setting names to values. Settings not named in the map will not have their value adjusted. |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### `getStatus`
|
||||
|
||||
`GET` **`/status`**
|
||||
|
||||
**`Summary`**
|
||||
|
||||
Retrieve the server's current status.
|
||||
|
||||
**`Description`**
|
||||
|
||||
Returns information about whether a remote end is in a state in which it can create new sessions and can additionally include arbitrary meta information that is specific to the implementation.
|
||||
|
||||
The readiness state is represented by the ready property of the body, which is false if an attempt to create a session at the current time would fail. However, the value true does not guarantee that a New Session command will succeed.
|
||||
|
||||
Implementations may optionally include additional meta information as part of the body, but the top-level properties ready and message are reserved and must not be overwritten.
|
||||
|
||||
<!-- comment source: builtin-interface -->
|
||||
|
||||
#### Examples
|
||||
|
||||
<!-- BEGIN:EXAMPLES -->
|
||||
|
||||
##### JavaScript
|
||||
|
||||
<!-- BEGIN:EXAMPLE lang=JavaScript -->
|
||||
|
||||
```js
|
||||
// webdriver.io example
|
||||
await driver.status();
|
||||
```
|
||||
|
||||
<!-- END:EXAMPLE -->
|
||||
|
||||
##### Python
|
||||
|
||||
<!-- BEGIN:EXAMPLE lang=Python -->
|
||||
|
||||
```python
|
||||
driver.get_status()
|
||||
```
|
||||
|
||||
<!-- END:EXAMPLE -->
|
||||
|
||||
##### Java
|
||||
|
||||
<!-- BEGIN:EXAMPLE lang=Java -->
|
||||
|
||||
```java
|
||||
driver.getStatus();
|
||||
```
|
||||
|
||||
<!-- END:EXAMPLE -->
|
||||
|
||||
##### Ruby
|
||||
|
||||
<!-- BEGIN:EXAMPLE lang=Ruby -->
|
||||
|
||||
```ruby
|
||||
# ruby_lib example
|
||||
remote_status
|
||||
|
||||
# ruby_lib_core example
|
||||
@driver.remote_status
|
||||
```
|
||||
|
||||
<!-- END:EXAMPLE -->
|
||||
|
||||
<!-- END:EXAMPLES -->
|
||||
|
||||
#### Response
|
||||
|
||||
`Object`
|
||||
|
||||
### `getTimeouts`
|
||||
|
||||
`GET` **`/session/:sessionId/timeouts`**
|
||||
|
||||
Set the various timeouts associated with a session
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#set-timeouts](https://w3c.github.io/webdriver/#set-timeouts)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### `timeouts`
|
||||
|
||||
`POST` **`/session/:sessionId/timeouts`**
|
||||
|
||||
Set the various timeouts associated with a session
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#set-timeouts](https://w3c.github.io/webdriver/#set-timeouts)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :---------- | :--------------------- | :--------------------------------------------------------------------------------- |
|
||||
| `type?` | `string` | used only for the old (JSONWP) command, the type of the timeout |
|
||||
| `ms?` | `string` \\| `number` | used only for the old (JSONWP) command, the ms for the timeout |
|
||||
| `script?` | `number` | the number in ms for the script timeout, used for the W3C command |
|
||||
| `pageLoad?` | `number` | the number in ms for the pageLoad timeout, used for the W3C command |
|
||||
| `implicit?` | `string` \\| `number` | the number in ms for the implicit wait timeout, used for the W3C command |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### `logCustomEvent`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/log_event`**
|
||||
|
||||
Add a custom-named event to the Appium event log
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------- | :------- | :-------------------------------------------------------------------------- |
|
||||
| `vendor` | `string` | the name of the vendor or tool the event belongs to, to namespace the event |
|
||||
| `event` | `string` | the name of the event itself |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
@@ -1,22 +0,0 @@
|
||||
# Plugin: execute-driver
|
||||
|
||||
### `executeDriverScript`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/execute_driver`**
|
||||
|
||||
Implementation of a command within a plugin
|
||||
|
||||
At minimum, `D` must be `ExternalDriver`, but a plugin can be more narrow about which drivers it supports.
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type |
|
||||
| :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `script` | [script: string, scriptType: string, timeoutMs: number] |
|
||||
| `type?` | [script: string, scriptType: string, timeoutMs: number] |
|
||||
|
||||
#### Response
|
||||
|
||||
`unknown`
|
||||
@@ -1,89 +0,0 @@
|
||||
# Plugin: images
|
||||
|
||||
### `compareImages`
|
||||
|
||||
`POST` **`/session/:sessionId/appium/compare_images`**
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type |
|
||||
| :--------- | :---------------------------------------------------------- |
|
||||
| `mode` | `any`[] |
|
||||
| `options?` | `any`[] |
|
||||
|
||||
#### Response
|
||||
|
||||
`ComparisonResult`
|
||||
|
||||
### `findElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element`**
|
||||
|
||||
Find a UI element given a locator strategy and a selector, erroring if it can't be found
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element](https://w3c.github.io/webdriver/#find-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :---- | :--------------------------------------------------------------------- |
|
||||
| `using` | `any` | the locator strategy |
|
||||
| `value` | `any` | the selector to combine with the strategy to find the specific element |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
The element object encoding the element id which can be used in element-related
|
||||
commands
|
||||
|
||||
### `findElements`
|
||||
|
||||
`POST` **`/session/:sessionId/elements`**
|
||||
|
||||
Find a a list of all UI elements matching a given a locator strategy and a selector
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-elements](https://w3c.github.io/webdriver/#find-elements)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :---- | :---------------------------------------------------------------------- |
|
||||
| `using` | `any` | the locator strategy |
|
||||
| `value` | `any` | the selector to combine with the strategy to find the specific elements |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
A possibly-empty list of element objects
|
||||
|
||||
### `performActions`
|
||||
|
||||
`POST` **`/session/:sessionId/actions`**
|
||||
|
||||
If the actions contains image elements as origin, convert them to viewport coordinates before sending it to the external driver
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#perform-actions](https://w3c.github.io/webdriver/#perform-actions)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :-------- | :----------------- | :--------------------------- |
|
||||
| `actions` | `ActionSequence[]` | an array of action sequences |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Intro to Commands
|
||||
---
|
||||
|
||||
Here you can find various commands exposed by the main Appium module through its base driver, as
|
||||
well as the commands available in several plugins.
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
The Appium base driver only exposes a few commands, as it is not meant to be used on its own.
|
||||
Please refer to the documentation of your [Appium driver](../ecosystem/drivers.md) to learn
|
||||
about the commands it exposes, and then check your [Appium client](../ecosystem/clients.md)
|
||||
documentation for the exact syntax of that command.
|
||||
```
|
||||
|
||||
The command listings can be found here:
|
||||
|
||||
- [Base Driver](./base-driver.md)
|
||||
- [Execute Driver Plugin](./execute-driver-plugin.md)
|
||||
- [Images Plugin](./images-plugin.md)
|
||||
- [Inspector](https://github.com/appium/appium-inspector/tree/main/plugins)
|
||||
- [Relaxed Caps Plugin](./relaxed-caps-plugin.md)
|
||||
- [Storage Plugin](./storage-plugin.md)
|
||||
- [Universal XML Plugin](./universal-xml-plugin.md)
|
||||
@@ -1,27 +0,0 @@
|
||||
# Plugin: relaxed-caps
|
||||
|
||||
### `createSession`
|
||||
|
||||
`POST` **`/session`**
|
||||
|
||||
Start a new automation session
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#new-session](https://w3c.github.io/webdriver/#new-session)
|
||||
|
||||
<!-- comment source: multiple -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :---------------------- | :---- | :----------------------------------------------------------------------------------------------------- |
|
||||
| `desiredCapabilities?` | `any` | the new session capabilities |
|
||||
| `requiredCapabilities?` | `any` | another place the new session capabilities could be sent (typically left undefined) |
|
||||
| `capabilities?` | `any` | another place the new session capabilities could be sent (typically left undefined) |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
The capabilities object representing the created session
|
||||
@@ -1,113 +0,0 @@
|
||||
# Plugin: storage
|
||||
|
||||
!!! tip
|
||||
|
||||
All these commands can be invoked without creating a session, allowing you to
|
||||
prepare your test environment in advance.
|
||||
|
||||
### `addStorageItem`
|
||||
|
||||
`POST` **`/storage/add`**
|
||||
|
||||
Add a new file to the storage
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :----- | :------- | :--------------------------------------------------------------------------------------------- |
|
||||
| `name` | `string` | the name used to save the file (must not include path separator characters) |
|
||||
| `sha1` | `string` | SHA1 hash of the file to be uploaded |
|
||||
|
||||
#### Example
|
||||
|
||||
```bash
|
||||
curl -X POST --header "Content-Type: application/json" --data '{"name":"app.ipa","sha1":"ccc963411b2621335657963322890305ebe96186"}' http://127.0.0.1:4723/storage/add
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
`AddRequestResult`
|
||||
|
||||
A JSON object in the following format:
|
||||
|
||||
```json
|
||||
{
|
||||
"ws": {
|
||||
"stream": "/storage/add/ccc963411b2621335657963322890305ebe96186/stream",
|
||||
"events": "/storage/add/ccc963411b2621335657963322890305ebe96186/events"
|
||||
},
|
||||
"ttlMs": 300000
|
||||
}
|
||||
```
|
||||
|
||||
| Name | Type | Description |
|
||||
| :---------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `ws.stream` | `string` | the pathname of the streaming web socket used to upload the file content |
|
||||
| `ws.events` | `string` | the pathname of the events web socket used to notify about upload success or a failure |
|
||||
| `ttlMs` | `number` | the amount of milliseconds both web sockets will be kept active before they expire, or a file payload would be successfully uploaded |
|
||||
|
||||
### `listStorageItems`
|
||||
|
||||
`GET` **`/storage/list`**
|
||||
|
||||
List all files present in the storage
|
||||
|
||||
#### Example
|
||||
|
||||
```bash
|
||||
curl http://127.0.0.1:4723/storage/list
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
`List<StorageItem>`
|
||||
|
||||
A list of items, where each item has the following properties:
|
||||
|
||||
| Name | Type | Description |
|
||||
| :----- | :------- | :---------------------------------------------- |
|
||||
| `name` | `string` | the name of the file in the storage |
|
||||
| `path` | `string` | full path to the file on the remote file system |
|
||||
| `size` | `number` | file size in bytes |
|
||||
|
||||
### `deleteStorageItem`
|
||||
|
||||
`POST` **`/storage/delete`**
|
||||
|
||||
Deletes a file in the storage with the specified name
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :----- | :------- | :--------------------------------- |
|
||||
| `name` | `string` | the name of the file to be deleted |
|
||||
|
||||
#### Example
|
||||
|
||||
```bash
|
||||
curl -X POST --header "Content-Type: application/json" --data '{"name":"app.ipa"}' http://127.0.0.1:4723/storage/delete
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
`boolean`
|
||||
|
||||
`false` if the file does not exist in the storage, or `true` upon successful file deletion
|
||||
|
||||
### `resetStorage`
|
||||
|
||||
`POST` **`/storage/reset`**
|
||||
|
||||
Deletes all uploaded files and stops any incomplete uploads.
|
||||
If the `APPIUM_STORAGE_KEEP_ALL` flag is enabled, all uploaded files will be preserved,
|
||||
and only the incomplete uploads will be stopped.
|
||||
|
||||
#### Example
|
||||
|
||||
```bash
|
||||
curl -X POST http://127.0.0.1:4723/storage/reset
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
`undefined`
|
||||
@@ -1,68 +0,0 @@
|
||||
# Plugin: universal-xml
|
||||
|
||||
### `findElement`
|
||||
|
||||
`POST` **`/session/:sessionId/element`**
|
||||
|
||||
Find a UI element given a locator strategy and a selector, erroring if it can't be found
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-element](https://w3c.github.io/webdriver/#find-element)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :---------------------------------------------------------- | :------------------- |
|
||||
| `using` | `any`[] | the locator strategy |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
The element object encoding the element id which can be used in element-related
|
||||
commands
|
||||
|
||||
### `findElements`
|
||||
|
||||
`POST` **`/session/:sessionId/elements`**
|
||||
|
||||
Find a a list of all UI elements matching a given a locator strategy and a selector
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#find-elements](https://w3c.github.io/webdriver/#find-elements)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Type | Description |
|
||||
| :------ | :---------------------------------------------------------- | :------------------- |
|
||||
| `using` | `any`[] | the locator strategy |
|
||||
|
||||
#### Response
|
||||
|
||||
`any`
|
||||
|
||||
A possibly-empty list of element objects
|
||||
|
||||
### `getPageSource`
|
||||
|
||||
`GET` **`/session/:sessionId/source`**
|
||||
|
||||
Get the current page/app source as HTML/XML
|
||||
|
||||
**`See`**
|
||||
|
||||
[https://w3c.github.io/webdriver/#get-page-source](https://w3c.github.io/webdriver/#get-page-source)
|
||||
|
||||
<!-- comment source: method-signature -->
|
||||
|
||||
#### Response
|
||||
|
||||
`string`
|
||||
|
||||
The UI hierarchy in a platform-appropriate format (e.g., HTML for a web page)
|
||||
+5
-9
@@ -47,12 +47,10 @@ We are always open to pull requests for improving the Appium code or documentati
|
||||
|
||||
!!! info
|
||||
|
||||
```
|
||||
Developer information may not be kept up to date as frequently as user-facing information, or
|
||||
it may be most relevant in its current form on the online repository, not in this published
|
||||
version. Make sure to check the repo or discuss with maintainers. We would be glad to help
|
||||
new contributors get started!
|
||||
```
|
||||
Developer information may not be kept up to date as frequently as user-facing information, or
|
||||
it may be most relevant in its current form on the online repository, not in this published
|
||||
version. Make sure to check the repo or discuss with maintainers. We would be glad to help
|
||||
new contributors get started!
|
||||
|
||||
Start by cloning the repository (we recommend [forking](https://github.com/appium/appium/fork)
|
||||
it first):
|
||||
@@ -64,9 +62,7 @@ cd appium
|
||||
|
||||
!!! info
|
||||
|
||||
```
|
||||
If you are VS Code user, you can easily check out the project using [Runme](https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Fappium%2Fappium.git&fileToOpen=packages%2Fappium%2Fdocs%2Fen%2Fcontributing%2Findex.md).
|
||||
```
|
||||
If you are VS Code user, you can easily check out the project using [Runme](https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Fappium%2Fappium.git&fileToOpen=packages%2Fappium%2Fdocs%2Fen%2Fcontributing%2Findex.md).
|
||||
|
||||
Install dependencies:
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
title: Appium's Config System
|
||||
---
|
||||
|
||||
Appium 2 supports [configuration files](../guides/config.md). A configuration file is intended to
|
||||
have (nearly) 1:1 parity with command-line arguments. An end user can supply Appium 2 with
|
||||
Appium includes support for [configuration files](../guides/config.md). A configuration file is
|
||||
intended to have (nearly) 1:1 parity with command-line arguments. An end user can supply Appium with
|
||||
a configuration file, CLI args, or both (the args have precedence over the config file).
|
||||
|
||||
This document will be a technical overview of how the configuration system works. It is intended
|
||||
@@ -336,7 +336,7 @@ One of the design goals of this system is the following:
|
||||
_An extension should be able to register custom CLI arguments with the Appium, and a user should be
|
||||
able to use them like any other argument_.
|
||||
|
||||
Previously, Appium 2 accepted arguments in this manner (via `--driverArgs`), but validation was
|
||||
Previously, Appium accepted arguments in this manner (via `--driverArgs`), but validation was
|
||||
hand-rolled and required extension implementors to use a custom API. It also required the user to
|
||||
awkwardly pass a JSON string as the configuration on the command-line. Further, no contextual help
|
||||
(via `--help`) existed for these arguments.
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Intro to Development
|
||||
title: Developing Appium Extensions
|
||||
---
|
||||
|
||||
Appium 2 is built with a modular structure, which means that Appium extensions (drivers and plugins)
|
||||
Appium is built with a modular structure, which means that Appium extensions (drivers and plugins)
|
||||
are decoupled from the main Appium module, and you only need to install the extensions that you
|
||||
want to use. This modular structure also unlocks the ability to develop entirely new extensions!
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium Clients
|
||||
---
|
||||
|
||||
@@ -9,37 +6,138 @@ You need a client to write and run Appium scripts. You'll want to become very
|
||||
familiar with your client documentation (as well as the documentation of any Selenium client that
|
||||
the Appium client depends on) since that will be your primary interface to Appium.
|
||||
|
||||
To learn more about clients, read our [Client Intro](../intro/clients.md).
|
||||
|
||||
### Official Clients
|
||||
|
||||
These clients are currently maintained by the Appium team:
|
||||
|
||||
| Client | Language |
|
||||
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
|
||||
| [Appium Java client](https://github.com/appium/java-client) | Java |
|
||||
| [Appium Python client](https://github.com/appium/python-client) | Python |
|
||||
| [Appium Ruby Core client](https://github.com/appium/ruby_lib_core) (Recommended)<br>[Appium Ruby client](https://github.com/appium/ruby_lib) | Ruby |
|
||||
| [Appium .NET client](https://github.com/appium/dotnet-client) | C# |
|
||||
|
||||
### Other Clients
|
||||
|
||||
These clients are not maintained by the Appium team and can be used with other languages:
|
||||
|
||||
| Client | Language |
|
||||
| ---------------------------------------------------------------------------------------------------- | ----------------------- |
|
||||
| [WebdriverIO](https://webdriver.io/docs/appium) | Node.js |
|
||||
| [Nightwatch.js](https://nightwatchjs.org/guide/mobile-app-testing/introduction.html) | Node.js |
|
||||
| [RobotFramework](https://github.com/serhatbolsu/robotframework-appiumlibrary) | DSL |
|
||||
| [multicatch's appium-client](https://github.com/multicatch/appium-client) | Rust |
|
||||
| [SwiftAppium](https://github.com/milcgroup/swiftappium) | Swift |
|
||||
|
||||
In general, any W3C WebDriver spec-compatible client will also integrate well with Appium, though
|
||||
some Appium-specific commands may not be implemented in other clients.
|
||||
To learn more about clients, check out the [Client Intro](../intro/clients.md).
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
If you maintain an Appium client that you would like to be listed in the Appium docs, feel free
|
||||
to make a PR to add it to this section with a link to the documentation for the client.
|
||||
If you maintain an Appium client that you would like to be listed here, feel free to create a PR!
|
||||
```
|
||||
|
||||
## Official Clients
|
||||
|
||||
These clients are currently maintained by the Appium team:
|
||||
|
||||
### [Java Client](https://github.com/appium/java-client)
|
||||
|
||||
Language: :fontawesome-brands-java: Java
|
||||
|
||||
\=== "Setup With Maven"
|
||||
|
||||
````
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>io.appium</groupId>
|
||||
<artifactId>java-client</artifactId>
|
||||
<version>${version.you.require}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
```
|
||||
````
|
||||
|
||||
\=== "Setup With Gradle"
|
||||
|
||||
````
|
||||
```groovy
|
||||
dependencies {
|
||||
testImplementation 'io.appium:java-client:${version.you.require}'
|
||||
}
|
||||
```
|
||||
````
|
||||
|
||||
### [Python Client](https://github.com/appium/python-client)
|
||||
|
||||
Language: :fontawesome-brands-python: Python
|
||||
|
||||
```sh title="Install From PyPi"
|
||||
pip install Appium-Python-Client
|
||||
```
|
||||
|
||||
### [Ruby Core Client](https://github.com/appium/ruby_lib_core)
|
||||
|
||||
Language: :material-language-ruby: Ruby
|
||||
|
||||
```sh title="Install From RubyGems"
|
||||
gem install appium_lib_core
|
||||
```
|
||||
|
||||
### [Ruby Client](https://github.com/appium/ruby_lib)
|
||||
|
||||
Language: :material-language-ruby: Ruby
|
||||
|
||||
This client is a wrapper for the Ruby Core Client with several helper methods, though this may
|
||||
add additional complexity, therefore the Ruby Core Client is recommended instead.
|
||||
|
||||
```sh title="Install From RubyGems"
|
||||
gem install appium_lib
|
||||
```
|
||||
|
||||
### [.NET Client](https://github.com/appium/dotnet-client)
|
||||
|
||||
Language: :simple-dotnet: C#
|
||||
|
||||
```sh title="Install Using .NET CLI"
|
||||
dotnet add package Appium.WebDriver
|
||||
```
|
||||
|
||||
## Other Clients
|
||||
|
||||
These clients are not maintained by the Appium team and can be used with other languages.
|
||||
|
||||
In general, any W3C WebDriver spec-compatible client will also integrate well with Appium, though
|
||||
some Appium-specific commands may not be implemented in other clients.
|
||||
|
||||
### [WebdriverIO](https://webdriver.io/docs/appium)
|
||||
|
||||
Language: :material-language-javascript: :material-language-typescript: JavaScript/TypeScript
|
||||
|
||||
```sh title="Setup Using npm"
|
||||
npm init wdio@latest .
|
||||
```
|
||||
|
||||
### [Nightwatch.js](https://nightwatchjs.org/guide/mobile-app-testing/introduction.html)
|
||||
|
||||
Language: :material-language-javascript: :material-language-typescript: JavaScript/TypeScript
|
||||
|
||||
\=== "Setup For Android"
|
||||
|
||||
````
|
||||
```sh
|
||||
npx @nightwatch/mobile-helper android --appium
|
||||
```
|
||||
````
|
||||
|
||||
\=== "Setup For iOS"
|
||||
|
||||
````
|
||||
```sh
|
||||
npx @nightwatch/mobile-helper ios --appium
|
||||
```
|
||||
````
|
||||
|
||||
### [RobotFramework AppiumLibrary](https://github.com/serhatbolsu/robotframework-appiumlibrary)
|
||||
|
||||
Language: :simple-robotframework: Robot Framework
|
||||
|
||||
```sh title="Install From PyPi"
|
||||
pip install robotframework-appiumlibrary
|
||||
```
|
||||
|
||||
### [multicatch's appium-client](https://github.com/multicatch/appium-client)
|
||||
|
||||
Language: :simple-rust: Rust
|
||||
|
||||
```sh title="Install Using Cargo"
|
||||
cargo add appium-client
|
||||
```
|
||||
|
||||
### [SwiftAppium](https://github.com/milcgroup/swiftappium)
|
||||
|
||||
Language: :material-language-swift: Swift
|
||||
|
||||
```sh title="Install and Setup"
|
||||
git clone https://github.com/milcgroup/SwiftAppium.git
|
||||
cd SwiftAppium
|
||||
swift build
|
||||
swift run swiftappium
|
||||
```
|
||||
|
||||
@@ -1,55 +1,219 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium Drivers
|
||||
---
|
||||
|
||||
You can't use Appium without at least one driver! Click on the link for each driver to see the
|
||||
specific installation instructions and documentation for that driver.
|
||||
|
||||
Generally, drivers can be installed using their listed installation key, with the following command:
|
||||
|
||||
```
|
||||
appium driver install <installation key>
|
||||
```
|
||||
You can't use Appium without a driver! Here you can find a list of all known Appium drivers,
|
||||
along with their installation commands and links to their documentation.
|
||||
|
||||
To learn more about drivers, check out the [Driver Intro](../intro/drivers.md).
|
||||
|
||||
### Official Drivers
|
||||
|
||||
These drivers are currently maintained by the Appium team:
|
||||
|
||||
| Driver | Installation Key | Platform(s) | Mode(s) |
|
||||
| -------------------------------------------------------------------- | ---------------- | ------------------------------ | -------------------------- |
|
||||
| [Chromium](https://github.com/appium/appium-chromium-driver) | `chromium` | macOS, Windows, Linux | Web |
|
||||
| [Espresso](https://github.com/appium/appium-espresso-driver) | `espresso` | Android | Native |
|
||||
| [Gecko](https://github.com/appium/appium-geckodriver) | `gecko` | macOS, Windows, Linux, Android | Web |
|
||||
| [Mac2](https://github.com/appium/appium-mac2-driver) | `mac2` | macOS | Native |
|
||||
| [Safari](https://github.com/appium/appium-safari-driver) | `safari` | macOS, iOS | Web |
|
||||
| [UiAutomator2](https://github.com/appium/appium-uiautomator2-driver) | `uiautomator2` | Android | Native, Hybrid, Web |
|
||||
| [Windows](https://github.com/appium/appium-windows-driver) | `windows` | Windows | Native |
|
||||
| [XCUITest](https://github.com/appium/appium-xcuitest-driver) | `xcuitest` | iOS | Native, Hybrid, Web |
|
||||
|
||||
### Other Drivers
|
||||
|
||||
These drivers are not maintained by the Appium team and can be used to target additional platforms:
|
||||
|
||||
| Driver | Installation Key | Platform(s) | Mode(s) | Supported By |
|
||||
| -------------------------------------------------------------------------------------------------- | ------------------------------------------------ | -------------------------------- | -------------------------- | ------------------------------------- |
|
||||
| [Flutter](https://github.com/appium/appium-flutter-driver) | `--source=npm appium-flutter-driver` | iOS, Android | Native | Community |
|
||||
| [Flutter Integration](https://github.com/AppiumTestDistribution/appium-flutter-integration-driver) | `--source=npm appium-flutter-integration-driver` | iOS, Android | Native | Community / `@AppiumTestDistribution` |
|
||||
| [LG WebOS](https://github.com/headspinio/appium-lg-webos-driver) | `--source=npm appium-lg-webos-driver` | LG TV | Web | HeadSpin |
|
||||
| [Linux](https://github.com/fantonglang/appium-linux-driver) | `--source=npm @stdspa/appium-linux-driver` | Linux | Native | `@fantonglang` |
|
||||
| [Roku](https://github.com/headspinio/appium-roku-driver) | `--source=npm @headspinio/appium-roku-driver` | Roku | Native | HeadSpin |
|
||||
| [Tizen](https://github.com/Samsung/appium-tizen-driver) | `--source=npm appium-tizen-driver` | Android | Native | Community / Samsung |
|
||||
| [TizenTV](https://github.com/headspinio/appium-tizen-tv-driver) | `--source=npm appium-tizen-tv-driver` | Samsung TV | Web | HeadSpin |
|
||||
| [Youi](https://github.com/YOU-i-Labs/appium-youiengine-driver) | `--source=npm appium-youiengine-driver` | iOS, Android, macOS, Linux, tvOS | Native | Community / You.i |
|
||||
| [NovaWindows](https://github.com/AutomateThePlanet/appium-novawindows-driver) | `--source=npm appium-novawindows-driver` | Windows | Native | Community / Automate The Planet |
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
If you maintain an Appium driver that you would like to be listed in the Appium docs, feel free
|
||||
to make a PR to add it to this section with a link to the driver documentation.
|
||||
If you maintain an Appium driver that you would like to be listed here, feel free to create a PR!
|
||||
```
|
||||
|
||||
## Official Drivers
|
||||
|
||||
These drivers are currently maintained by the Appium team:
|
||||
|
||||
### [Chromium](https://github.com/appium/appium-chromium-driver)
|
||||
|
||||
- Target: Desktop and mobile Chromium browsers (Chrome, Microsoft Edge, etc.)
|
||||
- Mode: Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install chromium
|
||||
```
|
||||
|
||||
### [Espresso](https://github.com/appium/appium-espresso-driver)
|
||||
|
||||
- Target: Android applications
|
||||
- Mode: Native
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install espresso
|
||||
```
|
||||
|
||||
### [Gecko](https://github.com/appium/appium-geckodriver)
|
||||
|
||||
- Target: Desktop and mobile Gecko browsers (Firefox)
|
||||
- Mode: Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install gecko
|
||||
```
|
||||
|
||||
### [Mac2](https://github.com/appium/appium-mac2-driver)
|
||||
|
||||
- Target: macOS applications
|
||||
- Mode: Native
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install mac2
|
||||
```
|
||||
|
||||
### [Safari](https://github.com/appium/appium-safari-driver)
|
||||
|
||||
- Target: Desktop and mobile Safari browsers
|
||||
- Mode: Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install safari
|
||||
```
|
||||
|
||||
### [UiAutomator2](https://github.com/appium/appium-uiautomator2-driver)
|
||||
|
||||
- Target: Android, Android TV, Android Wear applications
|
||||
- Modes: Native, Hybrid, Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install uiautomator2
|
||||
```
|
||||
|
||||
### [Windows](https://github.com/appium/appium-windows-driver)
|
||||
|
||||
!!! warning
|
||||
|
||||
```
|
||||
Only the Node.js-based driver part is maintained by the Appium team. The server part
|
||||
(WinAppDriver executable) is provided by Microsoft, but has not been maintained since 2022.
|
||||
```
|
||||
|
||||
- Target: Windows applications
|
||||
- Mode: Native
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install windows
|
||||
```
|
||||
|
||||
### [XCUITest](https://appium.github.io/appium-xcuitest-driver/)
|
||||
|
||||
- Target: iOS, iPadOS, tvOS applications
|
||||
- Modes: Native, Hybrid, Web
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install xcuitest
|
||||
```
|
||||
|
||||
## Other Drivers
|
||||
|
||||
These drivers are not maintained by the Appium team and can be used to target other platforms:
|
||||
|
||||
### [Flutter](https://github.com/appium/appium-flutter-driver)
|
||||
|
||||
- Target: iOS and Android applications built with Flutter
|
||||
- Mode: Native
|
||||
- Supported by: Appium Team / Community
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-flutter-driver
|
||||
```
|
||||
|
||||
### [Flutter Integration](https://github.com/AppiumTestDistribution/appium-flutter-integration-driver)
|
||||
|
||||
- Target: iOS and Android applications built with Flutter
|
||||
- Mode: Native
|
||||
- Supported by: Community / `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-flutter-integration-driver
|
||||
```
|
||||
|
||||
### [LG WebOS](https://github.com/headspinio/appium-lg-webos-driver)
|
||||
|
||||
- Target: LG TV web applications
|
||||
- Mode: Web
|
||||
- Supported by: HeadSpin
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-lg-webos-driver
|
||||
```
|
||||
|
||||
### [Linux](https://github.com/fantonglang/appium-linux-driver)
|
||||
|
||||
!!! warning
|
||||
|
||||
```
|
||||
This driver has not been maintained since 2022 and requires a custom Appium installation
|
||||
```
|
||||
|
||||
- Target: Linux applications
|
||||
- Mode: Native
|
||||
- Supported by: `@fantonglang`
|
||||
|
||||
```sh title="Install This Driver"
|
||||
git clone https://github.com/fantonglang/appium
|
||||
cd appium
|
||||
yarn install
|
||||
node ./
|
||||
```
|
||||
|
||||
### [NovaWindows](https://github.com/AutomateThePlanet/appium-novawindows-driver)
|
||||
|
||||
!!! info
|
||||
|
||||
```
|
||||
This driver is recommended as a drop-in replacement for the partially unmaintained
|
||||
[Windows driver](#windows)
|
||||
```
|
||||
|
||||
- Target: Windows applications
|
||||
- Mode: Native
|
||||
- Supported by: Community / Automate The Planet
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-novawindows-driver
|
||||
```
|
||||
|
||||
### [Roku](https://github.com/headspinio/appium-roku-driver)
|
||||
|
||||
- Target: Roku channels (applications)
|
||||
- Mode: Native
|
||||
- Supported by: HeadSpin
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm @headspinio/appium-roku-driver
|
||||
```
|
||||
|
||||
### [Tizen](https://github.com/Samsung/appium-tizen-driver)
|
||||
|
||||
!!! warning
|
||||
|
||||
```
|
||||
This driver has not been maintained since 2020 and is only compatible with Appium 1
|
||||
```
|
||||
|
||||
- Target: Tizen applications
|
||||
- Mode: Native
|
||||
- Supported by: Community / Samsung
|
||||
|
||||
```sh title="Install This Driver"
|
||||
npm install appium-tizen-driver
|
||||
```
|
||||
|
||||
### [TizenTV](https://github.com/headspinio/appium-tizen-tv-driver)
|
||||
|
||||
- Target: Tizen TV web applications
|
||||
- Mode: Web
|
||||
- Supported by: HeadSpin
|
||||
|
||||
```sh title="Install This Driver"
|
||||
appium driver install --source=npm appium-tizen-tv-driver
|
||||
```
|
||||
|
||||
### [You.i Engine](https://github.com/YOU-i-Labs/appium-youiengine-driver)
|
||||
|
||||
!!! warning
|
||||
|
||||
```
|
||||
This driver has not been maintained since 2022 and is only compatible with Appium 1
|
||||
```
|
||||
|
||||
- Target: iOS, Android, macOS, Linux, tvOS applications built with You.i Engine
|
||||
- Mode: Native
|
||||
- Supported by: Community / You.i
|
||||
|
||||
```sh title="Install This Driver"
|
||||
npm install appium-youiengine-driver
|
||||
```
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Ecosystem Overview
|
||||
title: The Appium Ecosystem
|
||||
---
|
||||
|
||||
Appium has a wide ecosystem of related software and tools. This section of the Appium documentation
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium Plugins
|
||||
---
|
||||
|
||||
@@ -9,42 +6,135 @@ Plugins offer various ways to extend or modify Appium's behaviour. They are _com
|
||||
and are not needed for standard automation functionality, but you may find them to be useful
|
||||
for more specialised automation workflows.
|
||||
|
||||
Generally, plugins can be installed using their listed installation key, with the following command:
|
||||
|
||||
```
|
||||
appium plugin install <installation key>
|
||||
```
|
||||
|
||||
### Official Plugins
|
||||
|
||||
These plugins are are currently maintained by the Appium team:
|
||||
|
||||
| <div style="width:7em">Plugin</div> | <div style="width:8em">Installation Key</div> | Description |
|
||||
| --------------------------------------------------------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| [Execute Driver](https://github.com/appium/appium/tree/master/packages/execute-driver-plugin) | `execute-driver` | Run entire batches of commands in a single call to the Appium server |
|
||||
| [Images](https://github.com/appium/appium/tree/master/packages/images-plugin) | `images` | Image matching and comparison features |
|
||||
| [Inspector](https://github.com/appium/appium-inspector/tree/main/plugins) | `inspector` | Integrate the [Appium Inspector](https://github.com/appium/appium-inspector) directly into your Appium server installation, providing a web-based interface for inspecting and interacting with your application under test. |
|
||||
| [Relaxed Caps](https://github.com/appium/appium/tree/master/packages/relaxed-caps-plugin) | `relaxed-caps` | Relax Appium's requirement for vendor prefixes on capabilities |
|
||||
| [Storage](https://github.com/appium/appium/tree/master/packages/storage-plugin) | `storage` | Server-side storage with client-side management |
|
||||
| [Universal XML](https://github.com/appium/appium/tree/master/packages/universal-xml-plugin) | `universal-xml` | Instead of the standard XML format for iOS and Android, use an XML definition that is the same across both platforms |
|
||||
|
||||
### Other Plugins
|
||||
|
||||
These plugins are not maintained by the Appium team and can provide additional functionality:
|
||||
|
||||
| <div style="width:6em">Plugin</div> | <div style="width:19em">Installation Key</div> | Description | <div style="width:13em">Supported By</div> |
|
||||
| ---------------------------------------------------------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------ |
|
||||
| [AltUnity](https://github.com/headspinio/appium-altunity-plugin) | `--source=npm appium-altunity-plugin` | Target Unity games and apps for automation with a new context, via the AltUnityTester framework | HeadSpin |
|
||||
| [Device Farm](https://github.com/AppiumTestDistribution/appium-device-farm) | `--source=npm appium-device-farm` | Manage and create driver sessions on connected Android devices and iOS simulators | `@AppiumTestDistribution` |
|
||||
| [Gestures](https://github.com/AppiumTestDistribution/appium-gestures-plugin) | `--source=npm appium-gestures-plugin` | Perform basic gestures using W3C Actions | `@AppiumTestDistribution` |
|
||||
| [Interceptor](https://github.com/AppiumTestDistribution/appium-interceptor-plugin) | `--source=npm appium-interceptor` | Intercept and mock API requests and responses | `@AppiumTestDistribution` |
|
||||
| [OCR](https://github.com/jlipps/appium-ocr-plugin) | `--source=npm appium-ocr-plugin` | Find elements via OCR text | `@jlipps` |
|
||||
| [Reporter](https://github.com/AppiumTestDistribution/appium-reporter-plugin) | `--source=npm appium-reporter-plugin` | Generate standalone consolidated HTML reports with screenshots | `@AppiumTestDistribution` |
|
||||
| [Wait](https://github.com/AppiumTestDistribution/appium-wait-plugin) | `--source=npm appium-wait-plugin` | Manage global element wait timeouts | `@AppiumTestDistribution` |
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
If you maintain an Appium plugin that you would like to be listed in the Appium docs, feel free
|
||||
to make a PR to add it to this section with a link to the documentation for the plugin.
|
||||
If you maintain an Appium plugin that you would like to be listed here, feel free to create a PR!
|
||||
```
|
||||
|
||||
## Official Plugins
|
||||
|
||||
These plugins are are currently maintained by the Appium team:
|
||||
|
||||
### [Execute Driver](https://github.com/appium/appium/tree/master/packages/execute-driver-plugin)
|
||||
|
||||
Run entire batches of commands in a single call to the Appium server
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install execute-driver
|
||||
```
|
||||
|
||||
### [Images](https://github.com/appium/appium/tree/master/packages/images-plugin)
|
||||
|
||||
Add support for image matching and comparison features
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install images
|
||||
```
|
||||
|
||||
### [Inspector](https://github.com/appium/appium-inspector/tree/main/plugins)
|
||||
|
||||
Integrate the [Appium Inspector](https://appium.github.io/appium-inspector/) directly into your
|
||||
Appium server installation
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install inspector
|
||||
```
|
||||
|
||||
### [Relaxed Caps](https://github.com/appium/appium/tree/master/packages/relaxed-caps-plugin)
|
||||
|
||||
Relax Appium's requirement for vendor prefixes on capabilities
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install relaxed-caps
|
||||
```
|
||||
|
||||
### [Storage](https://github.com/appium/appium/tree/master/packages/storage-plugin)
|
||||
|
||||
Add server-side storage with client-side management
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install storage
|
||||
```
|
||||
|
||||
### [Universal XML](https://github.com/appium/appium/tree/master/packages/universal-xml-plugin)
|
||||
|
||||
Translate the default iOS and Android XML formats into a common format
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install universal-xml
|
||||
```
|
||||
|
||||
## Other Plugins
|
||||
|
||||
These plugins are not maintained by the Appium team and can provide additional functionality:
|
||||
|
||||
### [AltUnity](https://github.com/headspinio/appium-altunity-plugin)
|
||||
|
||||
Target Unity games and apps for automation via the AltUnityTester framework
|
||||
|
||||
Supported by: HeadSpin
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-altunity-plugin
|
||||
```
|
||||
|
||||
### [Device Farm](https://github.com/AppiumTestDistribution/appium-device-farm)
|
||||
|
||||
Manage and create driver sessions on connected Android devices and iOS simulators
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-device-farm
|
||||
```
|
||||
|
||||
### [Gestures](https://github.com/AppiumTestDistribution/appium-gestures-plugin)
|
||||
|
||||
Perform basic gestures using W3C Actions
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-gestures-plugin
|
||||
```
|
||||
|
||||
### [Interceptor](https://github.com/AppiumTestDistribution/appium-interceptor-plugin)
|
||||
|
||||
Intercept and mock API requests and responses
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-interceptor
|
||||
```
|
||||
|
||||
### [OCR](https://github.com/jlipps/appium-ocr-plugin)
|
||||
|
||||
Find elements via OCR text
|
||||
|
||||
Supported by: `@jlipps`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-ocr-plugin
|
||||
```
|
||||
|
||||
### [Reporter](https://github.com/AppiumTestDistribution/appium-reporter-plugin)
|
||||
|
||||
Generate standalone consolidated HTML reports with screenshots
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-reporter-plugin
|
||||
```
|
||||
|
||||
### [Wait](https://github.com/AppiumTestDistribution/appium-wait-plugin)
|
||||
|
||||
Manage global element wait timeouts
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Plugin"
|
||||
appium plugin install --source=npm appium-wait-plugin
|
||||
```
|
||||
|
||||
@@ -1,42 +1,61 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium-Related Tools
|
||||
---
|
||||
|
||||
There are several Appium tools that have been created to to assist with things not directly related
|
||||
to testing, such as Appium installation, test development, and more.
|
||||
The Appium ecosystem also includes several tools that have been created to assist with things not
|
||||
directly related to running tests, such as Appium installation, test development, and more.
|
||||
|
||||
### [Appium Inspector](https://appium.github.io/appium-inspector/latest/)
|
||||
!!! note
|
||||
|
||||
```
|
||||
If you maintain an Appium tool that you would like to be listed here, feel free to create a PR!
|
||||
```
|
||||
|
||||
## Official Tools
|
||||
|
||||
These tools are currently maintained by the Appium team:
|
||||
|
||||
### [Appium Inspector](https://appium.github.io/appium-inspector/)
|
||||
|
||||
Appium has a graphical client which can be used to inspect application screenshots, view the
|
||||
application hierarchy, run Appium commands, record app interactions, and more. It is very useful
|
||||
for Appium test development.
|
||||
application hierarchy, search for elements, run Appium commands, record app interactions, and more.
|
||||
It can be very useful for Appium test development.
|
||||
|
||||
Find downloads and more information on its GitHub page: [Appium Inspector](https://github.com/appium/appium-inspector)
|
||||
## Extension Tools
|
||||
|
||||
Appium driver or plugin developers can choose to include these tools in their driver/plugin:
|
||||
|
||||
### Appium Doctor
|
||||
|
||||
Appium Doctor is a command-line tool built into Appium drivers and plugins.
|
||||
The command is expected to be used to validate whether a driver or plugin has all of its prerequisites and other environment details set up correctly
|
||||
if the driver/plugin author implemented the `doctor` command.
|
||||
The Appium Doctor tool can be used to validate whether all prerequisites and other environment
|
||||
details needed for the driver/plugin have been set up correctly. The tool can be accessed via the
|
||||
[`doctor` command in the Appium CLI](../reference/cli/extensions.md#doctor):
|
||||
|
||||
For example, `uiautomator2` driver provides the `doctor` command below.
|
||||
|
||||
```
|
||||
appium driver doctor uiautomator2
|
||||
```sh
|
||||
appium {driver|plugin} doctor <extension-name>
|
||||
```
|
||||
|
||||
It shows no result if the driver/plugin author did not implement them.
|
||||
It shows no results if the driver/plugin author did not implement Doctor support.
|
||||
|
||||
More information on this command can be found in the [Command-Line Usage documentation](../cli/extensions.md#doctor).
|
||||
For driver/plugin developers, please read [Building Doctor Checks](../developing/build-doctor-checks.md).
|
||||
!!! note
|
||||
|
||||
### Other Tools
|
||||
```
|
||||
If you maintain an Appium extension and would like to add Appium Doctor support for it, check
|
||||
out the documentation on [Building Doctor Checks](../developing/build-doctor-checks.md).
|
||||
```
|
||||
|
||||
These tools are not maintained by the Appium team and can be used to assist with other problems:
|
||||
## Other Tools
|
||||
|
||||
| Name | Description | Supported By |
|
||||
| ------------------------------------------------------------------------------ | ----------------------------------------------------- | ------------------------- |
|
||||
| [appium-installer](https://github.com/AppiumTestDistribution/appium-installer) | Help set up an Appium environment for Android and iOS | `@AppiumTestDistribution` |
|
||||
These tools are not maintained by the Appium team:
|
||||
|
||||
### [Appium Installer](https://github.com/AppiumTestDistribution/appium-installer)
|
||||
|
||||
Appium Installer is a command-line tool for simplifying setups of new Appium test environments.
|
||||
It includes commands for installing Appium, its drivers and plugins, as well as validating
|
||||
prerequisites for iOS or Android emulators or real devices.
|
||||
|
||||
Supported by: `@AppiumTestDistribution`
|
||||
|
||||
```sh title="Install This Tool"
|
||||
npm install -g appium-installer
|
||||
```
|
||||
|
||||
@@ -28,16 +28,16 @@ In order to validate whether an app bundle downloaded from the given URL could b
|
||||
steps are applied:
|
||||
|
||||
1. The script checks if the given URL is already present in the cache.
|
||||
If yes then it tries to fetch previously remembered
|
||||
[Last-Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified)
|
||||
or [ETag](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) header values for it.
|
||||
If yes then it tries to fetch previously remembered
|
||||
[Last-Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified)
|
||||
or [ETag](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) header values for it.
|
||||
2. If `ETag` value is present then it is put into
|
||||
[If-None-Match request header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match).
|
||||
Else if `Last-Modified` header value is present then it is put into
|
||||
[If-Modified-Since request header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since).
|
||||
Otherwise, no caching is applied.
|
||||
[If-None-Match request header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match).
|
||||
Else if `Last-Modified` header value is present then it is put into
|
||||
[If-Modified-Since request header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since).
|
||||
Otherwise, no caching is applied.
|
||||
3. If the response status is equal to `304` then the previously cached binary is used,
|
||||
otherwise the cached entry is reset and refreshed.
|
||||
otherwise the cached entry is reset and refreshed.
|
||||
|
||||
## Caching of Local Application Bundles
|
||||
|
||||
@@ -45,9 +45,9 @@ It only makes sense to cache application bundles if they need some preprocessing
|
||||
For example, on iOS `.ipa` bundles must be unzipped, because the system installer only works with `.app` folders.
|
||||
|
||||
1. The script verifies if the given bundle path is already present in the cache. If the bundle was not in the cache yet
|
||||
then it gets preprocessed and added there.
|
||||
then it gets preprocessed and added there.
|
||||
2. The script validates the hashsum of the bundle and compares it to the previously stored one. If hash sums don't match
|
||||
then the cached item gets deleted and the preprocessing of the bundle repeats.
|
||||
then the cached item gets deleted and the preprocessing of the bundle repeats.
|
||||
|
||||
## How The Cache File System Is Configured
|
||||
|
||||
@@ -56,15 +56,15 @@ on per-process basis, so each test session initialized in scope of the same Appi
|
||||
of it. It is a [LRU Cache](https://www.npmjs.com/package/lru-cache) with the following limitations:
|
||||
|
||||
- Max items: 1024. You may customize it by providing a new value to
|
||||
the [APPIUM_APPS_CACHE_MAX_ITEMS](../cli/env-vars.md) environment variable.
|
||||
the [APPIUM_APPS_CACHE_MAX_ITEMS](../reference/cli/env-vars.md) environment variable.
|
||||
Do not set it to a lower number than the amount of apps in all parallel sessions per process.
|
||||
- Max time to live (TTL) for each entry: 24 hours.
|
||||
You may customize it by providing a new value to the
|
||||
[APPIUM_APPS_CACHE_MAX_AGE](../cli/env-vars.md) environment variable.
|
||||
[APPIUM_APPS_CACHE_MAX_AGE](../reference/cli/env-vars.md) environment variable.
|
||||
Do not set it to a lower number than the duration of a single session startup.
|
||||
- TTL is refreshed for each entry upon access
|
||||
- By default the full application URL is used as cache key. You may change this behavior
|
||||
by enabling the [APPIUM_APPS_CACHE_IGNORE_URL_QUERY](../cli/env-vars.md) environment variable.
|
||||
by enabling the [APPIUM_APPS_CACHE_IGNORE_URL_QUERY](../reference/cli/env-vars.md) environment variable.
|
||||
If the above option is enabled then the 'search' part of the app URL will be cut off from cache keys.
|
||||
See the corresponding [feature request](https://discuss.appium.io/t/regarding-app-caching-when-using-aws-s3-presigned-urls/42713)
|
||||
for more details.
|
||||
|
||||
@@ -128,7 +128,7 @@ drivers and plugins. It is of course up to each service provider how they wish t
|
||||
discovery, installation, and availability of any official or third party drivers or plugins. But
|
||||
the Appium team does provide several suggestions, for consistency across the industry. _These are
|
||||
recommendations only,_ and not a standard, but adopting it will help users to navigate the increased
|
||||
complexity that working with Appium 2 in a cloud environment may bring.
|
||||
complexity that working with Appium in a cloud environment may bring.
|
||||
|
||||
### Suggested capabilities
|
||||
|
||||
|
||||
@@ -70,6 +70,6 @@ In the past, events were available as a part of `GET /session/:id` response
|
||||
## Add a custom event
|
||||
|
||||
You can add custom events that will show up in the event timings data. You can send a custom event
|
||||
name to the Appium server using the [Log Custom Event API](../commands/base-driver.md#logcustomevent),
|
||||
and the server will store the timestamp. The [Get Log Events](../commands/base-driver.md#getlogevents)
|
||||
name to the Appium server using the [Log Custom Event API](../reference/api/appium.md#logcustomevent),
|
||||
and the server will store the timestamp. The [Get Log Events](../reference/api/appium.md#getlogevents)
|
||||
command can be used to retrieve named events' timestamps later on.
|
||||
|
||||
@@ -18,7 +18,7 @@ Other package managers are not currently supported.
|
||||
|
||||
## Using Appium's Extension CLI
|
||||
|
||||
With Appium's [Extension CLI](../cli/extensions.md), you let Appium manage drivers and plugins for
|
||||
With Appium's [Extension CLI](../reference/cli/extensions.md), you let Appium manage drivers and plugins for
|
||||
you. You will use CLI commands to tell Appium which extensions you would like to install, update,
|
||||
or remove. Here's an example of how you might install a driver using the CLI:
|
||||
|
||||
@@ -64,9 +64,9 @@ like any other dependency. Basically, whenever you run Appium, if you have not e
|
||||
|
||||
1. Try to determine whether the _current directory_ is inside an `npm` package.
|
||||
2. If so, it will check whether `appium` is a dependency (dev, prod, or peer) in the project's
|
||||
`package.json`
|
||||
`package.json`
|
||||
3. If so, _unless you have specified `APPIUM_HOME` in your environment_, Appium will ignore load
|
||||
drivers and plugins defined in that `package.json` file instead.
|
||||
drivers and plugins defined in that `package.json` file instead.
|
||||
|
||||
This means you are freely able to add Appium drivers and plugins as regular package dependencies or
|
||||
dev dependencies. For example, if your project has a `package.json` which includes the following:
|
||||
|
||||
@@ -34,13 +34,13 @@ When it comes to installing Appium 2 drivers, there are several approaches you c
|
||||
npm i -g appium --drivers=xcuitest,uiautomator2
|
||||
```
|
||||
|
||||
- Use the [Appium Extension CLI](../cli/extensions.md), for example:
|
||||
- Use the [Appium Extension CLI](../reference/cli/extensions.md), for example:
|
||||
|
||||
```bash
|
||||
appium driver install uiautomator2
|
||||
```
|
||||
|
||||
- Use the [Appium Setup CLI command](../cli/setup.md) (added in Appium `2.6`), for example:
|
||||
- Use the [Appium Setup CLI command](../reference/cli/setup.md) (added in Appium `2.6`), for example:
|
||||
|
||||
```bash
|
||||
appium setup mobile
|
||||
@@ -78,7 +78,7 @@ server and drivers are separate packages, they can release new versions independ
|
||||
other - this means that you no longer need to wait for a new Appium server release, but can install
|
||||
the latest driver versions right away.
|
||||
|
||||
Checking for driver updates is done by using the [Appium Extension CLI](../cli/extensions.md):
|
||||
Checking for driver updates is done by using the [Appium Extension CLI](../reference/cli/extensions.md):
|
||||
|
||||
```bash
|
||||
appium driver list --updates
|
||||
@@ -102,7 +102,7 @@ server package.
|
||||
!!! info "Actions Needed"
|
||||
|
||||
```
|
||||
Make sure to use the [Appium Extension CLI](../cli/extensions.md) to manage your drivers
|
||||
Make sure to use the [Appium Extension CLI](../reference/cli/extensions.md) to manage your drivers
|
||||
```
|
||||
|
||||
### Deprecated Packages No Longer Supported
|
||||
@@ -135,7 +135,7 @@ path to `/`, therefore the default server URL is now `http://localhost:4723/`.
|
||||
```
|
||||
In your test scripts, change the base path of the target server URL from `/wd/hub` to `/`.
|
||||
Alternatively, you can retain the Appium 1 base path by launching Appium with the
|
||||
`--base-path=/wd/hub` [command-line argument](../cli/args.md).
|
||||
`--base-path=/wd/hub` [command-line argument](../reference/cli/server.md).
|
||||
```
|
||||
|
||||
### Server Port 0 No Longer Supported
|
||||
@@ -173,8 +173,7 @@ appium --chromedriver-version=100 # Appium 1
|
||||
CHROMEDRIVER_VERSION=100 appium # Appium 2
|
||||
```
|
||||
|
||||
- Some options can now be passed as [capabilities](https://appium.io/docs/en/latest/guides/caps/),
|
||||
for example:
|
||||
- Some options can now be passed as [capabilities](./caps.md), for example:
|
||||
|
||||
```
|
||||
appium --chromedriver-executable=/path/to/chromedriver # Appium 1
|
||||
@@ -203,8 +202,8 @@ Appium 2 no longer attempts to parse the contents of filepaths passed to these o
|
||||
two ways to specify the value for these options:
|
||||
|
||||
- As strings, directly on the command line
|
||||
- `--nodeconfig` / `--default-capabilities`: JSON string
|
||||
- `--allow-insecure` / `--deny-insecure`: comma-separated list
|
||||
- `--nodeconfig` / `--default-capabilities`: JSON string
|
||||
- `--allow-insecure` / `--deny-insecure`: comma-separated list
|
||||
- In the [Appium Configuration file](./config.md)
|
||||
|
||||
!!! info "Actions Needed"
|
||||
@@ -339,14 +338,14 @@ support for these parameters. The following is a list of these changed endpoints
|
||||
parameters they no longer accept, as well as the parameters they continue to accept in Appium 2.
|
||||
|
||||
- `POST /session/:sessionId/appium/device/gsm_signal`
|
||||
- :octicons-x-24: `signalStrengh`
|
||||
- :octicons-check-24: `signalStrength`
|
||||
- :octicons-x-24: `signalStrengh`
|
||||
- :octicons-check-24: `signalStrength`
|
||||
- `POST /session/:sessionId/appium/element/:elementId/value`
|
||||
- :octicons-x-24: `value`
|
||||
- :octicons-check-24: `text`
|
||||
- :octicons-x-24: `value`
|
||||
- :octicons-check-24: `text`
|
||||
- `POST /session/:sessionId/appium/element/:elementId/replace_value`
|
||||
- :octicons-x-24: `value`
|
||||
- :octicons-check-24: `text`
|
||||
- :octicons-x-24: `value`
|
||||
- :octicons-check-24: `text`
|
||||
|
||||
!!! info "Actions Needed"
|
||||
|
||||
@@ -381,7 +380,7 @@ wish to take advantage of with Appium 2:
|
||||
|
||||
You are no longer limited to official drivers or plugins, or ones that the Appium team even knows
|
||||
about! Developers can now create their own custom drivers or plugins, which can be installed via
|
||||
Appium's [Extension CLI](../cli/extensions.md) from `npm`, `git`, GitHub, or even the local
|
||||
Appium's [Extension CLI](../reference/cli/extensions.md) from `npm`, `git`, GitHub, or even the local
|
||||
filesystem. Interested in building a driver or plugin? Check out the
|
||||
[Building Drivers](../developing/build-drivers.md) and
|
||||
[Building Plugins](../developing/build-plugins.md) guides.
|
||||
|
||||
@@ -32,7 +32,8 @@ ended before the release of Appium 2, which meant that even users on outdated No
|
||||
able to use it.
|
||||
|
||||
Appium 3 drops support for outdated Node versions, and bumps the minimum required version to Node
|
||||
`20.19.0`, as well as the minimum `npm` version to `10`.
|
||||
`20.19.0` (with the semver range `^20.19.0 || ^22.12.0 || >=24.0.0`), as well as the minimum `npm`
|
||||
version to `10`.
|
||||
|
||||
!!! info "Actions Needed"
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ this is the responsibility of the server admin who configures and launches the A
|
||||
|
||||
## Security Server Args
|
||||
|
||||
The [Server CLI Args](../cli/args.md) doc outlines three relevant arguments which may be passed to
|
||||
The [Server CLI](../reference/cli/server.md) doc outlines three relevant arguments which may be passed to
|
||||
Appium when starting it from the command line:
|
||||
|
||||
| <div style="width:10em">Parameter</div> | Description |
|
||||
|
||||
@@ -45,11 +45,11 @@ Appiumのドキュメントにようこそ! Appiumはオープンソースプ
|
||||
- [**Introduction**](./intro/index.md) を読んで、主要なコンセプトを理解してください
|
||||
- [**Quickstart**](./quickstart/index.md) を通して、基本的なAndroidテストを用意、実行します。
|
||||
- 使用するドライバ、クライアント、プラグインの一覧については、 [**Ecosystem**](./ecosystem/index.md) ページを参照してください。
|
||||
- コマンドラインからAppiumを使用する場合、[**CLI リファレンス**](./cli/index.md)を参照してください。
|
||||
- Appiumとプラグインで公開されているコマンドの一覧は[**Command Reference**](./commands/index.md)を参照してください。
|
||||
- [**Guides**](./guides/migrating-1-to-2.md) にあるさまざまな使い方、ヒント、コツを読んでください。
|
||||
- 様々なサードパーティーの [**Resources**](./resources.md) をチェックして、ウェブ上のAppiumを探してみてください。
|
||||
- Consult the [**Reference**](./reference/index.md) page for information on the Appium CLI and supported endpoints
|
||||
- Read the different [**Guides**](./guides/migrating-2-to-3.md) for a variety of instructions, tips and tricks
|
||||
- Check out various third-party [**Resources**](./resources/index.md) to explore Appium around the web
|
||||
- 独自の Appium 拡張を作成するには、 [**Developer**](./developing/index.md) ドキュメントを参考にしてください。
|
||||
- Appium自体への貢献については、 [**Contributing**](./contributing.md) を参照してください。
|
||||
- For contributions to Appium itself, refer to the [**Contributing**](./contributing/index.md) page
|
||||
- Have a look at the [**Appium Blog**](./blog/index.md) to learn what's new in the project
|
||||
|
||||
</div>
|
||||
|
||||
@@ -180,9 +180,9 @@ will never have time to build. And so, with Appium 2, Appium has released a plug
|
||||
enables anyone to build and share modules that change how Appium works!
|
||||
|
||||
In the same way that drivers are easily shareable and consumable via the Appium driver CLI, plugins
|
||||
can be published and consumed via a parallel [Plugin CLI](../cli/extensions.md). Plugins can do all
|
||||
sorts of things, for example adding the ability for Appium to find and interact with screen regions
|
||||
based on a template image (as in the images). There are very few
|
||||
can be published and consumed via a parallel [Plugin CLI](../reference/cli/extensions.md). Plugins
|
||||
can do all sorts of things, for example adding the ability for Appium to find and interact with
|
||||
screen regions based on a template image (as in the images). There are very few
|
||||
limitations on what you can do with plugins, so you might also be interested in learning how to
|
||||
[Build Plugins](../developing/build-plugins.md) in Node.js that can be used with Appium.
|
||||
|
||||
|
||||
@@ -157,8 +157,7 @@ it was easy for users or third-party developers to build their own Appium
|
||||
on the Appium codebase, and to see support for new platforms added to Appium by
|
||||
groups other than the core team. That vision has begun to be fulfilled, with
|
||||
groups like Microsoft and Youi.tv adding drivers to Appium for Windows desktop
|
||||
app automation and Youi.tv app automation, respectively. Who knows what
|
||||
platforms will be added next?
|
||||
app automation and Youi.tv app automation, respectively.
|
||||
|
||||
## Appium To The People
|
||||
|
||||
@@ -172,11 +171,26 @@ foundation, we hope that the door will open even more widely for new
|
||||
contributors, either as individuals or representing one of the many companies
|
||||
which now have an interest in seeing Appium move forward.
|
||||
|
||||
Eventually, the JS Foundation merged into the [OpenJS Foundation](https://openjsf.org), and Appium
|
||||
is currently an Impact Project in the foundation.
|
||||
Eventually, the JS Foundation merged into the [OpenJS Foundation](https://openjsf.org),
|
||||
and Appium became an Impact Project in the foundation.
|
||||
|
||||
## Appium 2.0
|
||||
|
||||
Appium 2 was released in 2023, with a new focus on Appium as an ecosystem rather than a singular
|
||||
project. Drivers and plugins can be developed and shared by anyone, opening up a world of
|
||||
possibilities for automation-related development for platforms far beyond iOS and Android.
|
||||
Appium 2 was released in 2023 and introduced an entirely revamped architecture, shifting focus to Appium
|
||||
as an ecosystem rather than an all-in-one project. This unlocked the ability for anyone to develop
|
||||
and share their own Appium extensions (drivers and plugins), opening up a world of possibilities
|
||||
for automation-related development for platforms far beyond iOS and Android! As a result,
|
||||
many third-party extensions were created, such as new drivers for Flutter and Windows, plugins for
|
||||
mocking APIs and managing device farms, new Appium clients based on Rust and Swift, and much more.
|
||||
|
||||
Around this time was also when we started a sponsorship program for Appium, which attracted various
|
||||
major and minor sponsors alike. This allowed us to give back to the Appium community, by compensating
|
||||
contributors for their voluntary work on the project.
|
||||
|
||||
## Appium 3.0
|
||||
|
||||
2025 saw the release of Appium 3. This update was a lot smaller than Appium 2 and included only a
|
||||
few behavioral changes, instead focusing on removing deprecated code and updating compatibility for
|
||||
more modern ecosystems. Still, this reduced scope was also to be expected: since Appium 2, the
|
||||
main feature development efforts had shifted to individual drivers and plugins, many of which had
|
||||
gone through multiple major updates during the Appium 2 era.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: "クイックスタート: はじめに"
|
||||
title: Getting Started
|
||||
---
|
||||
|
||||
さっそくAppiumを使ってみましょう! このクイックスタートをうまく使うために、[はじめに](../intro/index.md)を読み、Appiumの実行やスクリプトの記述に関わる概念を理解することをお勧めします。
|
||||
@@ -11,9 +11,9 @@ title: "クイックスタート: はじめに"
|
||||
|
||||
1. Appiumをインストールする
|
||||
2. Appiumドライバーとその依存関係をインストールする
|
||||
- このガイドでは、[UiAutomator2 driver](https://github.com/appium/appium-uiautomator2-driver) について説明します
|
||||
- このガイドでは、[UiAutomator2 driver](https://github.com/appium/appium-uiautomator2-driver) について説明します
|
||||
3. お好みの言語でAppiumクライアント・ライブラリをインストールする
|
||||
- このガイドでは、JavaScript、Python、Java、Ruby、.NETの例で説明します
|
||||
- このガイドでは、JavaScript、Python、Java、Ruby、.NETの例で説明します
|
||||
4. サンプルアプリケーションを使用した簡単なAppiumでの自動化スクリプトの作成と実行
|
||||
|
||||
### 必要条件
|
||||
|
||||
@@ -25,7 +25,7 @@ npm install -g appium
|
||||
|
||||
## Appiumを実行する
|
||||
|
||||
Appiumは [コマンドラインを使用して](../cli/index.md)始めることができます:
|
||||
Appium can be started [using the command line](../reference/cli/index.md):
|
||||
|
||||
```
|
||||
appium
|
||||
|
||||
@@ -26,4 +26,4 @@ require the developer toolchain and SDKs for that platform to be installed.
|
||||
|
||||
In order to assist with driver requirements, each (official) driver comes with the Appium Doctor tool,
|
||||
which allows to verify if all requirements have been set up. Learn more about how to use this tool in
|
||||
the [Command-Line Usage documentation](../cli/extensions.md#doctor).
|
||||
the [Command-Line Usage documentation](../reference/cli/extensions.md#doctor).
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user