mirror of
https://github.com/appium/appium.git
synced 2026-11-01 23:00:54 +08:00
Compare commits
48
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c00cbfa1fb | ||
|
|
3d57d047f3 | ||
|
|
27d7d9c29a | ||
|
|
e6635b737d | ||
|
|
cb9b3736ac | ||
|
|
e8835c80fd | ||
|
|
cb386cef85 | ||
|
|
7ccb6c2aec | ||
|
|
efbdc34689 | ||
|
|
0919cad18d | ||
|
|
0049513230 | ||
|
|
9ce33f70c6 | ||
|
|
debf2ef757 | ||
|
|
012525cd18 | ||
|
|
6f9effcd5a | ||
|
|
60aaf8019c | ||
|
|
f1bfcb3002 | ||
|
|
b836010d06 | ||
|
|
5568749990 | ||
|
|
dd01c57da6 | ||
|
|
3096f47fd0 | ||
|
|
938b1088b2 | ||
|
|
1c7e36c297 | ||
|
|
5f45defd7a | ||
|
|
dad07575c9 | ||
|
|
c403768a41 | ||
|
|
3a9739365b | ||
|
|
280e2ec792 | ||
|
|
2f069ae351 | ||
|
|
4ef43e8348 | ||
|
|
3624635393 | ||
|
|
560ddce517 | ||
|
|
f0b2cbfaf2 | ||
|
|
dd96fc9e5b | ||
|
|
218bbaeea4 | ||
|
|
bfe008671f | ||
|
|
0f40a20517 | ||
|
|
24bd9eeb1f | ||
|
|
1c3891b3d6 | ||
|
|
1cc1619c79 | ||
|
|
9f8b55e7ab | ||
|
|
34665dbe77 | ||
|
|
1fc22d25f9 | ||
|
|
7f906fcf9a | ||
|
|
c1ef362a89 | ||
|
|
1753dcd5e9 | ||
|
|
cbea4f2e97 | ||
|
|
e2d076c5dc |
@@ -11,3 +11,5 @@ package.json
|
||||
# generated
|
||||
packages/types/lib/appium-config.ts
|
||||
**/*.hbs
|
||||
|
||||
/.nx/workspace-data
|
||||
Generated
+6021
-3151
File diff suppressed because it is too large
Load Diff
+10
-11
@@ -85,7 +85,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@colors/colors": "1.6.0",
|
||||
"@eslint/js": "9.35.0",
|
||||
"@eslint/js": "9.37.0",
|
||||
"@tsconfig/node20": "20.1.6",
|
||||
"@types/argparse": "2.0.17",
|
||||
"@types/archiver": "6.0.3",
|
||||
@@ -104,7 +104,7 @@
|
||||
"@types/mocha": "10.0.10",
|
||||
"@types/mv": "2.1.4",
|
||||
"@types/ncp": "2.0.8",
|
||||
"@types/node": "22.18.1",
|
||||
"@types/node": "22.18.8",
|
||||
"@types/pluralize": "0.0.33",
|
||||
"@types/semver": "7.7.1",
|
||||
"@types/serve-favicon": "2.5.7",
|
||||
@@ -114,19 +114,18 @@
|
||||
"@types/source-map-support": "0.5.10",
|
||||
"@types/supports-color": "8.1.3",
|
||||
"@types/teen_process": "2.0.4",
|
||||
"@types/uuid": "10.0.0",
|
||||
"@types/which": "3.0.4",
|
||||
"@types/wrap-ansi": "3.0.0",
|
||||
"@types/ws": "8.18.1",
|
||||
"@types/xmldom": "0.1.34",
|
||||
"@types/yargs": "17.0.33",
|
||||
"asyncbox": "3.0.0",
|
||||
"chai": "6.0.1",
|
||||
"chai": "6.2.0",
|
||||
"chai-as-promised": "8.0.2",
|
||||
"conventional-changelog-conventionalcommits": "7.0.2",
|
||||
"cpy-cli": "6.0.0",
|
||||
"cross-env": "10.0.0",
|
||||
"eslint": "9.35.0",
|
||||
"cross-env": "10.1.0",
|
||||
"eslint": "9.37.0",
|
||||
"eslint-config-prettier": "10.1.8",
|
||||
"eslint-import-resolver-typescript": "4.4.4",
|
||||
"eslint-plugin-import": "2.32.0",
|
||||
@@ -135,12 +134,12 @@
|
||||
"finalhandler": "2.1.0",
|
||||
"get-port": "5.1.1",
|
||||
"json-schema-to-typescript": "15.0.4",
|
||||
"lerna": "8.2.3",
|
||||
"lerna": "9.0.0",
|
||||
"log-symbols": "4.1.0",
|
||||
"midnight-smoker": "8.0.0",
|
||||
"mjpeg-consumer": "2.0.0",
|
||||
"mjpeg-server": "0.3.1",
|
||||
"mocha": "11.7.2",
|
||||
"mocha": "11.7.4",
|
||||
"npm-run-all2": "8.0.4",
|
||||
"prettier": "3.6.2",
|
||||
"rewiremock": "3.14.6",
|
||||
@@ -151,9 +150,9 @@
|
||||
"teen_process": "3.0.1",
|
||||
"ts-node": "10.9.2",
|
||||
"tsd": "0.33.0",
|
||||
"typescript": "5.9.2",
|
||||
"typescript-eslint": "8.43.0",
|
||||
"webdriverio": "9.19.2",
|
||||
"typescript": "5.9.3",
|
||||
"typescript-eslint": "8.46.0",
|
||||
"webdriverio": "9.20.0",
|
||||
"ws": "8.18.3",
|
||||
"yaml-js": "0.3.1"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.1.0](https://github.com/appium/appium/compare/appium@3.0.2...appium@3.1.0) (2025-10-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add 21 WebDriver extension endpoints ([#21577](https://github.com/appium/appium/issues/21577)) ([7f906fc](https://github.com/appium/appium/commit/7f906fcf9a0dd84f348b0b3a79da818281f21835))
|
||||
* add inspector to plugins installed via `appium setup` ([#21578](https://github.com/appium/appium/issues/21578)) ([1753dcd](https://github.com/appium/appium/commit/1753dcd5e9f4ee3a9bd869f2e846a8a1c68b6970))
|
||||
* add W3C printPage endpoint ([#21576](https://github.com/appium/appium/issues/21576)) ([cbea4f2](https://github.com/appium/appium/commit/cbea4f2e97d2d291bd67fd98359b37caab1b21fa))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **appium:** fix base path handling in bidi ([#21611](https://github.com/appium/appium/issues/21611)) ([dad0757](https://github.com/appium/appium/commit/dad07575c9d754751160a53e0fb8053bbddac75b))
|
||||
|
||||
|
||||
|
||||
## [3.0.2](https://github.com/appium/appium/compare/appium@3.0.1...appium@3.0.2) (2025-09-09)
|
||||
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ title: Appium Protocol
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints used in Appium that are defined in the Appium extension of the
|
||||
W3C WebDriver protocol.
|
||||
The following is a list of endpoints supported in Appium, that are defined in the Appium extension
|
||||
of the W3C WebDriver protocol.
|
||||
|
||||
### getAppiumSessions
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ title: JSON Wire Protocol
|
||||
</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.
|
||||
endpoints supported in Appium.
|
||||
|
||||
### getSession
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ title: Mobile JSON Wire Protocol
|
||||
</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.
|
||||
endpoints supported in Appium.
|
||||
|
||||
### getRotation
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ title: Other Protocols
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints used in Appium that are defined in other protocols.
|
||||
The following is a list of endpoints supported in Appium that are defined in other protocols.
|
||||
|
||||
## Chromedriver Protocol
|
||||
|
||||
@@ -40,6 +40,441 @@ for a list of available methods and their parameters.
|
||||
|
||||
`any` - the result of executing the CDP method
|
||||
|
||||
## Compute Pressure Protocol
|
||||
|
||||
The [Compute Pressure protocol](https://www.w3.org/TR/compute-pressure/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### createVirtualPressureSource
|
||||
|
||||
```
|
||||
POST /session/:sessionId/pressuresource
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Create Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#create-virtual-pressure-source)
|
||||
|
||||
Creates a new virtual pressure source.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|<div style="width:6em">Name</div>|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`type`|Type of pressure source to create|string||
|
||||
|`supported?`|Whether the pressure source should be configured as supported|boolean|`true`|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### updateVirtualPressureSource
|
||||
|
||||
```
|
||||
POST /session/:sessionId/pressuresource/:pressureSourceType
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Update Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#update-virtual-pressure-source)
|
||||
|
||||
Updates the state of a virtual pressure source with the type identified by `:pressureSourceType`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`sample`|Pressure state. Supported values are `nominal`, `fair`, `serious`, or `critical`.|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### deleteVirtualPressureSource
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/pressuresource/:pressureSourceType
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Delete Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#delete-virtual-pressure-source)
|
||||
|
||||
Deletes the virtual pressure source with the type identified by `:pressureSourceType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Custom Handlers Protocol
|
||||
|
||||
The [Custom Handlers protocol](https://html.spec.whatwg.org/multipage/system-state.html#user-agent-automation)
|
||||
is an extension of the W3C WebDriver protocol, defined by the HTML Standard specification.
|
||||
|
||||
### setRPHRegistrationMode
|
||||
|
||||
```
|
||||
POST /session/:sessionId/custom-handlers/set-mode
|
||||
```
|
||||
|
||||
> Custom Handlers documentation: [Set RPH Registration Mode](https://html.spec.whatwg.org/multipage/system-state.html#user-agent-automation)
|
||||
|
||||
Sets the protocol handler automation mode, for processing registrations of custom protocol handlers.
|
||||
By default, this mode is set to `none`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`mode`|Automation mode to set. Supported values are `autoAccept`, `autoReject`, or `none`.|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Device Posture Protocol
|
||||
|
||||
The [Device Posture protocol](https://www.w3.org/TR/device-posture/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### setDevicePosture
|
||||
|
||||
```
|
||||
POST /session/:sessionId/deviceposture
|
||||
```
|
||||
|
||||
> Device Posture documentation: [Set Device Posture](https://www.w3.org/TR/device-posture/#set-device-posture)
|
||||
|
||||
Sets the device posture, overriding the posture set by the device hardware.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`posture`|Posture to which the device should be set. Supported values are `continuous` or `folded`.|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### clearDevicePosture
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/deviceposture
|
||||
```
|
||||
|
||||
> Device Posture documentation: [Clear Device Posture](https://www.w3.org/TR/device-posture/#clear-device-posture)
|
||||
|
||||
Clears the previously set device posture, returning posture control back to the device hardware.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Federated Credential Management Protocol
|
||||
|
||||
The [Federated Credential Management protocol](https://www.w3.org/TR/fedcm-1) (FedCM) is an
|
||||
extension of the W3C WebDriver protocol. Clients can enable this protocol by using the
|
||||
[`fedcm:accounts`](https://www.w3.org/TR/fedcm-1/#webdriver-capability) capability.
|
||||
|
||||
### fedCMCancelDialog
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/canceldialog
|
||||
```
|
||||
|
||||
> FedCM documentation: [Cancel Dialog](https://www.w3.org/TR/fedcm-1/#webdriver-canceldialog)
|
||||
|
||||
Cancels the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMSelectAccount
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/selectaccount
|
||||
```
|
||||
|
||||
> FedCM documentation: [Select Account](https://www.w3.org/TR/fedcm-1/#webdriver-selectaccount)
|
||||
|
||||
Selects an account to use for the currently open FedCM dialog.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`accountIndex`|Index of the account in the list of available accounts|number|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMClickDialogButton
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/clickdialogbutton
|
||||
```
|
||||
|
||||
> FedCM documentation: [Click Dialog Button](https://www.w3.org/TR/fedcm-1/#webdriver-clickdialogbutton)
|
||||
|
||||
Clicks a button in the currently open FedCM dialog.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`dialogButton`|Identifier of the button to click. Must be set to `ConfirmIdpLoginContinue`.|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMGetAccounts
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/accountlist
|
||||
```
|
||||
|
||||
> FedCM documentation: [Account List](https://www.w3.org/TR/fedcm-1/#webdriver-accountlist)
|
||||
|
||||
Retrieves all accounts that the user can select in the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`FedCMAccount[]` - an array of objects, where each object includes the following properties:
|
||||
|
||||
|<div style="width:10em">Name</div>|Description|Type|
|
||||
|--|--|--|
|
||||
|`accountId`|Account ID|string|
|
||||
|`email`|Account email|string|
|
||||
|`name`|Account name|string|
|
||||
|`givenName?`|Account given name|string|
|
||||
|`pictureUrl?`|Account picture URL|string|
|
||||
|`idpConfigUrl`|URL of the identity provider configuration file|string|
|
||||
|`loginState`|Login state. Set to `SignUp` if the account is not connected, otherwise `SignIn`.|string|
|
||||
|`termsOfServiceUrl?`|Terms of Service URL of the website, if `loginState` is set to `SignUp`|string|
|
||||
|`privacyPolicyUrl?`|Privacy Policy URL of the website, if `loginState` is set to `SignUp`|string|
|
||||
|
||||
### fedCMGetTitle
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/gettitle
|
||||
```
|
||||
|
||||
> FedCM documentation: [Get Title](https://www.w3.org/TR/fedcm-1/#webdriver-gettitle)
|
||||
|
||||
Retrieves the title and subtitle (if one exists) of the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`FedCMDialogTitle` - an object with the following properties:
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`title`|Dialog title|string|
|
||||
|`subtitle?`|Dialog subtitle|string|
|
||||
|
||||
### fedCMGetDialogType
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/getdialogtype
|
||||
```
|
||||
|
||||
> FedCM documentation: [Get Dialog Type](https://www.w3.org/TR/fedcm-1/#webdriver-getdialogtype)
|
||||
|
||||
Retrieves the type of the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - can be set to `AutoReauthn`, `AccountChooser`, or `ConfirmIdpLogin`
|
||||
|
||||
### fedCMSetDelayEnabled
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/setdelayenabled
|
||||
```
|
||||
|
||||
> FedCM documentation: [Set Delay Enabled](https://www.w3.org/TR/fedcm-1/#webdriver-setdelayenabled)
|
||||
|
||||
Sets the state of the promise rejection delay, which is used to prevent information leakage about
|
||||
the logged in state of the user.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`enabled`|Whether to enable the promise rejection delay|boolean|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMResetCooldown
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/resetcooldown
|
||||
```
|
||||
|
||||
> FedCM documentation: [Reset Cooldown](https://www.w3.org/TR/fedcm-1/#webdriver-resetcooldown)
|
||||
|
||||
Resets the cooldown delay used after dismissing a FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Generic Sensor Protocol
|
||||
|
||||
The [Generic Sensor protocol](https://www.w3.org/TR/generic-sensor/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### createVirtualSensor
|
||||
|
||||
```
|
||||
POST /session/:sessionId/sensor
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Create Virtual Sensor](https://www.w3.org/TR/generic-sensor/#create-virtual-sensor-command)
|
||||
|
||||
Creates a new virtual sensor.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|<div style="width:12em">Name</div>|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`type`|Type of sensor to create|string||
|
||||
|`connected?`|Whether the sensor should be configured as connected|boolean|`true`|
|
||||
|`maxSamplingFrequency?`|Maximum sensor sampling frequency|number||
|
||||
|`minSamplingFrequency?`|Minimum sensor sampling frequency|number||
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getVirtualSensorInfo
|
||||
|
||||
```
|
||||
GET /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Get Virtual Sensor Information](https://www.w3.org/TR/generic-sensor/#get-virtual-sensor-information-command)
|
||||
|
||||
Retrieves information about the virtual sensor with the type identified by `:sensorType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`GetVirtualSensorInfoResponse` - an object containing the `requestedSamplingFrequency` key, whose
|
||||
value is the requested sampling frequency of the sensor type
|
||||
|
||||
### updateVirtualSensorReading
|
||||
|
||||
```
|
||||
POST /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Update Virtual Sensor Reading](https://www.w3.org/TR/generic-sensor/#update-virtual-sensor-reading-command)
|
||||
|
||||
Updates the virtual sensor with the type identified by `:sensorType` with a new reading.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`reading`|Object containing reading properties specific to the sensor type|object|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### deleteVirtualSensor
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Delete Virtual Sensor](https://www.w3.org/TR/generic-sensor/#delete-virtual-sensor-command)
|
||||
|
||||
Deletes the virtual sensor with the type identified by `:sensorType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Permissions Protocol
|
||||
|
||||
The [Permissions protocol](https://www.w3.org/TR/permissions/) is an extension of the W3C WebDriver
|
||||
protocol.
|
||||
|
||||
### setPermissions
|
||||
|
||||
```
|
||||
POST /session/:sessionId/permissions
|
||||
```
|
||||
|
||||
> Permissions documentation: [Set Permission](https://www.w3.org/TR/permissions/#webdriver-command-set-permission)
|
||||
|
||||
Simulates user modification of the permission state of a PermissionDescriptor (a permissible feature
|
||||
with optional additional properties).
|
||||
|
||||
#### Parameters
|
||||
|
||||
|<div style="width:6em">Name</div>|Description|Type|
|
||||
|--|--|--|
|
||||
|`descriptor`|Object specifying the feature name in its `name` key, along with any other keys for additional properties|object|
|
||||
|`state`|New permission state for this descriptor. Supported values are: `granted`, `denied`, or `prompt`.|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Reporting Protocol
|
||||
|
||||
The [Reporting protocol](https://www.w3.org/TR/reporting-1/) is an extension of the W3C WebDriver
|
||||
protocol.
|
||||
|
||||
### generateTestReport
|
||||
|
||||
```
|
||||
POST /session/:sessionId/reporting/generate_test_report
|
||||
```
|
||||
|
||||
> Reporting documentation: [Generate Test Report](https://www.w3.org/TR/reporting-1/#generate-test-report-command)
|
||||
|
||||
Simulates the generation of a test report, which can be retrieved by registered reporting observers.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`message`|Message displayed in the report|string||
|
||||
|`group?`|Destination group to deliver the report to|string|`default`|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Secure Payment Confirmation Protocol
|
||||
|
||||
The [Secure Payment Confirmation protocol](https://www.w3.org/TR/secure-payment-confirmation) (SPC)
|
||||
is an extension of the W3C WebDriver protocol.
|
||||
|
||||
### setSPCTransactionMode
|
||||
|
||||
```
|
||||
POST /session/:sessionId/secure-payment-confirmation/set-mode
|
||||
```
|
||||
|
||||
> SPC documentation: [Set SPC Transaction Mode](https://www.w3.org/TR/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode)
|
||||
|
||||
Sets the transaction automation mode, for automated handling of transaction confirmation prompts.
|
||||
By default, this mode is set to `none`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|Name|Description|Type|
|
||||
|--|--|--|
|
||||
|`mode`|Automation mode to set. Supported values are `autoAccept`, `autoChooseToAuthAnotherWay`, `autoReject`, or `autoOptOut`.|string|
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Selenium Protocol
|
||||
|
||||
The Selenium protocol is an extension of the W3C WebDriver protocol, supported in Appium clients
|
||||
@@ -91,7 +526,9 @@ Retrieves the available log types that can be used to call the [`getLog`](#getlo
|
||||
## Web Authentication Protocol
|
||||
|
||||
The [Web Authentication protocol](https://w3c.github.io/webauthn/) (WebAuthn) is an extension of
|
||||
the W3C WebDriver protocol.
|
||||
the W3C WebDriver protocol. Clients can enable this protocol by using the
|
||||
[`webauthn:virtualAuthenticators`](https://w3c.github.io/webauthn/#sctn-automation-webdriver-capability)
|
||||
capability.
|
||||
|
||||
### addVirtualAuthenticator
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ title: WebDriver Protocol
|
||||
</style>
|
||||
|
||||
The following is a list of [W3C WebDriver protocol](https://w3c.github.io/webdriver/) endpoints
|
||||
used in Appium.
|
||||
supported in Appium.
|
||||
|
||||
!!! info
|
||||
|
||||
@@ -1070,3 +1070,45 @@ identified by `:elementId`.
|
||||
#### Response
|
||||
|
||||
`string` - a base64-encoded PNG image
|
||||
|
||||
### printPage
|
||||
|
||||
```
|
||||
POST /session/:sessionId/print
|
||||
```
|
||||
|
||||
> WebDriver documentation: [Print Page](https://w3c.github.io/webdriver/#print-page)
|
||||
|
||||
Prints the page by rendering it as a paginated PDF document.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|<div style="width:7em">Name</div>|Description|<div style="width:9em">Type</div>|Default|
|
||||
|--|--|--|--|
|
||||
|`orientation?`|Page orientation. Supported values are `portrait` or `landscape`.|string|`portrait`|
|
||||
|`scale?`|Page scale. Supported values are in the range `[0.1, 2]`.|number|`1`|
|
||||
|`background?`|Whether to include background images|boolean|`false`|
|
||||
|`page?`|Object specifying the page width and height|[`PrintPageSize`](#printpagesize)|`{}`|
|
||||
|`margin?`|Object specifying the page margins|[`PrintPageMargins`](#printpagemargins)|`{}`|
|
||||
|`shrinkToFit?`|Whether to resize page contents to match `PrintPageSize.width`|boolean|`true`|
|
||||
|`pageRanges?`|Array of pages to be printed, for example, `[1, 4, '8-9']`|array|`[]`|
|
||||
|
||||
##### `PrintPageSize`
|
||||
|
||||
|Name|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`width?`|Page width. Must be greater than or equal to `(2.54 / 72)`.|number|`21.59`|
|
||||
|`height?`|Page height. Must be greater than or equal to `(2.54 / 72)`.|number|`27.94`|
|
||||
|
||||
##### `PrintPageMargins`
|
||||
|
||||
|Name|Description|Type|Default|
|
||||
|--|--|--|--|
|
||||
|`top?`|Page top margin. Must be greater than or equal to `0`.|number|`1`|
|
||||
|`bottom?`|Page bottom margin. Must be greater than or equal to `0`.|number|`1`|
|
||||
|`left?`|Page left margin. Must be greater than or equal to `0`.|number|`1`|
|
||||
|`right?`|Page right margin. Must be greater than or equal to `0`.|number|`1`|
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - a base64-encoded PDF document
|
||||
|
||||
@@ -20,7 +20,7 @@ mentioned below.
|
||||
Installs the following extensions for browser webview testing:
|
||||
|
||||
* Drivers: `safari`[^1], `gecko`, `chromium`
|
||||
* Plugins: `images`
|
||||
* Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
@@ -33,7 +33,7 @@ appium setup browser
|
||||
Installs the following extensions for desktop application testing:
|
||||
|
||||
* Drivers: `mac2`[^1], `windows`[^2]
|
||||
* Plugins: `images`
|
||||
* Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
@@ -46,7 +46,7 @@ appium setup desktop
|
||||
Installs the following extensions for mobile testing:
|
||||
|
||||
* Drivers: `uiautomator2`, `xcuitest`[^1], `espresso`
|
||||
* Plugins: `images`
|
||||
* Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ title: Appium Protocol
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints used in Appium that are defined in the Appium extension of the
|
||||
W3C WebDriver protocol.
|
||||
The following is a list of endpoints supported in Appium, that are defined in the Appium extension
|
||||
of the W3C WebDriver protocol.
|
||||
|
||||
### getAppiumSessions
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ title: JSON Wire Protocol
|
||||
</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.
|
||||
endpoints supported in Appium.
|
||||
|
||||
### getSession
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ title: Mobile JSON Wire Protocol
|
||||
</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.
|
||||
endpoints supported in Appium.
|
||||
|
||||
### getRotation
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ title: Other Protocols
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints used in Appium that are defined in other protocols.
|
||||
The following is a list of endpoints supported in Appium that are defined in other protocols.
|
||||
|
||||
## Chromedriver Protocol
|
||||
|
||||
@@ -41,6 +41,441 @@ for a list of available methods and their parameters.
|
||||
|
||||
`any` - the result of executing the CDP method
|
||||
|
||||
## Compute Pressure Protocol
|
||||
|
||||
The [Compute Pressure protocol](https://www.w3.org/TR/compute-pressure/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### createVirtualPressureSource
|
||||
|
||||
```
|
||||
POST /session/:sessionId/pressuresource
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Create Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#create-virtual-pressure-source)
|
||||
|
||||
Creates a new virtual pressure source.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| <div style="width:6em">Name</div> | Description | Type | Default |
|
||||
| --------------------------------- | ------------------------------------------------------------- | ------- | ------- |
|
||||
| `type` | Type of pressure source to create | string | |
|
||||
| `supported?` | Whether the pressure source should be configured as supported | boolean | `true` |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### updateVirtualPressureSource
|
||||
|
||||
```
|
||||
POST /session/:sessionId/pressuresource/:pressureSourceType
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Update Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#update-virtual-pressure-source)
|
||||
|
||||
Updates the state of a virtual pressure source with the type identified by `:pressureSourceType`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| -------- | ----------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `sample` | Pressure state. Supported values are `nominal`, `fair`, `serious`, or `critical`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### deleteVirtualPressureSource
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/pressuresource/:pressureSourceType
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Delete Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#delete-virtual-pressure-source)
|
||||
|
||||
Deletes the virtual pressure source with the type identified by `:pressureSourceType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Custom Handlers Protocol
|
||||
|
||||
The [Custom Handlers protocol](https://html.spec.whatwg.org/multipage/system-state.html#user-agent-automation)
|
||||
is an extension of the W3C WebDriver protocol, defined by the HTML Standard specification.
|
||||
|
||||
### setRPHRegistrationMode
|
||||
|
||||
```
|
||||
POST /session/:sessionId/custom-handlers/set-mode
|
||||
```
|
||||
|
||||
> Custom Handlers documentation: [Set RPH Registration Mode](https://html.spec.whatwg.org/multipage/system-state.html#user-agent-automation)
|
||||
|
||||
Sets the protocol handler automation mode, for processing registrations of custom protocol handlers.
|
||||
By default, this mode is set to `none`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| ------ | ------------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `mode` | Automation mode to set. Supported values are `autoAccept`, `autoReject`, or `none`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Device Posture Protocol
|
||||
|
||||
The [Device Posture protocol](https://www.w3.org/TR/device-posture/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### setDevicePosture
|
||||
|
||||
```
|
||||
POST /session/:sessionId/deviceposture
|
||||
```
|
||||
|
||||
> Device Posture documentation: [Set Device Posture](https://www.w3.org/TR/device-posture/#set-device-posture)
|
||||
|
||||
Sets the device posture, overriding the posture set by the device hardware.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| --------- | ------------------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `posture` | Posture to which the device should be set. Supported values are `continuous` or `folded`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### clearDevicePosture
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/deviceposture
|
||||
```
|
||||
|
||||
> Device Posture documentation: [Clear Device Posture](https://www.w3.org/TR/device-posture/#clear-device-posture)
|
||||
|
||||
Clears the previously set device posture, returning posture control back to the device hardware.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Federated Credential Management Protocol
|
||||
|
||||
The [Federated Credential Management protocol](https://www.w3.org/TR/fedcm-1) (FedCM) is an
|
||||
extension of the W3C WebDriver protocol. Clients can enable this protocol by using the
|
||||
[`fedcm:accounts`](https://www.w3.org/TR/fedcm-1/#webdriver-capability) capability.
|
||||
|
||||
### fedCMCancelDialog
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/canceldialog
|
||||
```
|
||||
|
||||
> FedCM documentation: [Cancel Dialog](https://www.w3.org/TR/fedcm-1/#webdriver-canceldialog)
|
||||
|
||||
Cancels the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMSelectAccount
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/selectaccount
|
||||
```
|
||||
|
||||
> FedCM documentation: [Select Account](https://www.w3.org/TR/fedcm-1/#webdriver-selectaccount)
|
||||
|
||||
Selects an account to use for the currently open FedCM dialog.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| -------------- | ------------------------------------------------------ | ------ |
|
||||
| `accountIndex` | Index of the account in the list of available accounts | number |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMClickDialogButton
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/clickdialogbutton
|
||||
```
|
||||
|
||||
> FedCM documentation: [Click Dialog Button](https://www.w3.org/TR/fedcm-1/#webdriver-clickdialogbutton)
|
||||
|
||||
Clicks a button in the currently open FedCM dialog.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| -------------- | ------------------------------------------------------------------------------------------------------------ | ------ |
|
||||
| `dialogButton` | Identifier of the button to click. Must be set to `ConfirmIdpLoginContinue`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMGetAccounts
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/accountlist
|
||||
```
|
||||
|
||||
> FedCM documentation: [Account List](https://www.w3.org/TR/fedcm-1/#webdriver-accountlist)
|
||||
|
||||
Retrieves all accounts that the user can select in the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`FedCMAccount[]` - an array of objects, where each object includes the following properties:
|
||||
|
||||
| <div style="width:10em">Name</div> | Description | Type |
|
||||
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `accountId` | Account ID | string |
|
||||
| `email` | Account email | string |
|
||||
| `name` | Account name | string |
|
||||
| `givenName?` | Account given name | string |
|
||||
| `pictureUrl?` | Account picture URL | string |
|
||||
| `idpConfigUrl` | URL of the identity provider configuration file | string |
|
||||
| `loginState` | Login state. Set to `SignUp` if the account is not connected, otherwise `SignIn`. | string |
|
||||
| `termsOfServiceUrl?` | Terms of Service URL of the website, if `loginState` is set to `SignUp` | string |
|
||||
| `privacyPolicyUrl?` | Privacy Policy URL of the website, if `loginState` is set to `SignUp` | string |
|
||||
|
||||
### fedCMGetTitle
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/gettitle
|
||||
```
|
||||
|
||||
> FedCM documentation: [Get Title](https://www.w3.org/TR/fedcm-1/#webdriver-gettitle)
|
||||
|
||||
Retrieves the title and subtitle (if one exists) of the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`FedCMDialogTitle` - an object with the following properties:
|
||||
|
||||
| Name | Description | Type |
|
||||
| ----------- | --------------- | ------ |
|
||||
| `title` | Dialog title | string |
|
||||
| `subtitle?` | Dialog subtitle | string |
|
||||
|
||||
### fedCMGetDialogType
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/getdialogtype
|
||||
```
|
||||
|
||||
> FedCM documentation: [Get Dialog Type](https://www.w3.org/TR/fedcm-1/#webdriver-getdialogtype)
|
||||
|
||||
Retrieves the type of the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - can be set to `AutoReauthn`, `AccountChooser`, or `ConfirmIdpLogin`
|
||||
|
||||
### fedCMSetDelayEnabled
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/setdelayenabled
|
||||
```
|
||||
|
||||
> FedCM documentation: [Set Delay Enabled](https://www.w3.org/TR/fedcm-1/#webdriver-setdelayenabled)
|
||||
|
||||
Sets the state of the promise rejection delay, which is used to prevent information leakage about
|
||||
the logged in state of the user.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| --------- | --------------------------------------------- | ------- |
|
||||
| `enabled` | Whether to enable the promise rejection delay | boolean |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMResetCooldown
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/resetcooldown
|
||||
```
|
||||
|
||||
> FedCM documentation: [Reset Cooldown](https://www.w3.org/TR/fedcm-1/#webdriver-resetcooldown)
|
||||
|
||||
Resets the cooldown delay used after dismissing a FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Generic Sensor Protocol
|
||||
|
||||
The [Generic Sensor protocol](https://www.w3.org/TR/generic-sensor/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### createVirtualSensor
|
||||
|
||||
```
|
||||
POST /session/:sessionId/sensor
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Create Virtual Sensor](https://www.w3.org/TR/generic-sensor/#create-virtual-sensor-command)
|
||||
|
||||
Creates a new virtual sensor.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| <div style="width:12em">Name</div> | Description | Type | Default |
|
||||
| ---------------------------------- | ---------------------------------------------------- | ------- | ------- |
|
||||
| `type` | Type of sensor to create | string | |
|
||||
| `connected?` | Whether the sensor should be configured as connected | boolean | `true` |
|
||||
| `maxSamplingFrequency?` | Maximum sensor sampling frequency | number | |
|
||||
| `minSamplingFrequency?` | Minimum sensor sampling frequency | number | |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getVirtualSensorInfo
|
||||
|
||||
```
|
||||
GET /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Get Virtual Sensor Information](https://www.w3.org/TR/generic-sensor/#get-virtual-sensor-information-command)
|
||||
|
||||
Retrieves information about the virtual sensor with the type identified by `:sensorType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`GetVirtualSensorInfoResponse` - an object containing the `requestedSamplingFrequency` key, whose
|
||||
value is the requested sampling frequency of the sensor type
|
||||
|
||||
### updateVirtualSensorReading
|
||||
|
||||
```
|
||||
POST /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Update Virtual Sensor Reading](https://www.w3.org/TR/generic-sensor/#update-virtual-sensor-reading-command)
|
||||
|
||||
Updates the virtual sensor with the type identified by `:sensorType` with a new reading.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| --------- | ---------------------------------------------------------------- | ------ |
|
||||
| `reading` | Object containing reading properties specific to the sensor type | object |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### deleteVirtualSensor
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Delete Virtual Sensor](https://www.w3.org/TR/generic-sensor/#delete-virtual-sensor-command)
|
||||
|
||||
Deletes the virtual sensor with the type identified by `:sensorType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Permissions Protocol
|
||||
|
||||
The [Permissions protocol](https://www.w3.org/TR/permissions/) is an extension of the W3C WebDriver
|
||||
protocol.
|
||||
|
||||
### setPermissions
|
||||
|
||||
```
|
||||
POST /session/:sessionId/permissions
|
||||
```
|
||||
|
||||
> Permissions documentation: [Set Permission](https://www.w3.org/TR/permissions/#webdriver-command-set-permission)
|
||||
|
||||
Simulates user modification of the permission state of a PermissionDescriptor (a permissible feature
|
||||
with optional additional properties).
|
||||
|
||||
#### Parameters
|
||||
|
||||
| <div style="width:6em">Name</div> | Description | Type |
|
||||
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `descriptor` | Object specifying the feature name in its `name` key, along with any other keys for additional properties | object |
|
||||
| `state` | New permission state for this descriptor. Supported values are: `granted`, `denied`, or `prompt`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Reporting Protocol
|
||||
|
||||
The [Reporting protocol](https://www.w3.org/TR/reporting-1/) is an extension of the W3C WebDriver
|
||||
protocol.
|
||||
|
||||
### generateTestReport
|
||||
|
||||
```
|
||||
POST /session/:sessionId/reporting/generate_test_report
|
||||
```
|
||||
|
||||
> Reporting documentation: [Generate Test Report](https://www.w3.org/TR/reporting-1/#generate-test-report-command)
|
||||
|
||||
Simulates the generation of a test report, which can be retrieved by registered reporting observers.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type | Default |
|
||||
| --------- | ------------------------------------------ | ------ | --------- |
|
||||
| `message` | Message displayed in the report | string | |
|
||||
| `group?` | Destination group to deliver the report to | string | `default` |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Secure Payment Confirmation Protocol
|
||||
|
||||
The [Secure Payment Confirmation protocol](https://www.w3.org/TR/secure-payment-confirmation) (SPC)
|
||||
is an extension of the W3C WebDriver protocol.
|
||||
|
||||
### setSPCTransactionMode
|
||||
|
||||
```
|
||||
POST /session/:sessionId/secure-payment-confirmation/set-mode
|
||||
```
|
||||
|
||||
> SPC documentation: [Set SPC Transaction Mode](https://www.w3.org/TR/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode)
|
||||
|
||||
Sets the transaction automation mode, for automated handling of transaction confirmation prompts.
|
||||
By default, this mode is set to `none`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `mode` | Automation mode to set. Supported values are `autoAccept`, `autoChooseToAuthAnotherWay`, `autoReject`, or `autoOptOut`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Selenium Protocol
|
||||
|
||||
The Selenium protocol is an extension of the W3C WebDriver protocol, supported in Appium clients
|
||||
@@ -92,7 +527,9 @@ Retrieves the available log types that can be used to call the [`getLog`](#getlo
|
||||
## Web Authentication Protocol
|
||||
|
||||
The [Web Authentication protocol](https://w3c.github.io/webauthn/) (WebAuthn) is an extension of
|
||||
the W3C WebDriver protocol.
|
||||
the W3C WebDriver protocol. Clients can enable this protocol by using the
|
||||
[`webauthn:virtualAuthenticators`](https://w3c.github.io/webauthn/#sctn-automation-webdriver-capability)
|
||||
capability.
|
||||
|
||||
### addVirtualAuthenticator
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ title: WebDriver Protocol
|
||||
</style>
|
||||
|
||||
The following is a list of [W3C WebDriver protocol](https://w3c.github.io/webdriver/) endpoints
|
||||
used in Appium.
|
||||
supported in Appium.
|
||||
|
||||
!!! info
|
||||
|
||||
@@ -1070,3 +1070,45 @@ identified by `:elementId`.
|
||||
#### Response
|
||||
|
||||
`string` - a base64-encoded PNG image
|
||||
|
||||
### printPage
|
||||
|
||||
```
|
||||
POST /session/:sessionId/print
|
||||
```
|
||||
|
||||
> WebDriver documentation: [Print Page](https://w3c.github.io/webdriver/#print-page)
|
||||
|
||||
Prints the page by rendering it as a paginated PDF document.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| <div style="width:7em">Name</div> | Description | <div style="width:9em">Type</div> | Default |
|
||||
| --------------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------- | ---------- |
|
||||
| `orientation?` | Page orientation. Supported values are `portrait` or `landscape`. | string | `portrait` |
|
||||
| `scale?` | Page scale. Supported values are in the range `[0.1, 2]`. | number | `1` |
|
||||
| `background?` | Whether to include background images | boolean | `false` |
|
||||
| `page?` | Object specifying the page width and height | [`PrintPageSize`](#printpagesize) | `{}` |
|
||||
| `margin?` | Object specifying the page margins | [`PrintPageMargins`](#printpagemargins) | `{}` |
|
||||
| `shrinkToFit?` | Whether to resize page contents to match `PrintPageSize.width` | boolean | `true` |
|
||||
| `pageRanges?` | Array of pages to be printed, for example, `[1, 4, '8-9']` | array | `[]` |
|
||||
|
||||
##### `PrintPageSize`
|
||||
|
||||
| Name | Description | Type | Default |
|
||||
| --------- | -------------------------------------------------------------------------------------------- | ------ | ------- |
|
||||
| `width?` | Page width. Must be greater than or equal to `(2.54 / 72)`. | number | `21.59` |
|
||||
| `height?` | Page height. Must be greater than or equal to `(2.54 / 72)`. | number | `27.94` |
|
||||
|
||||
##### `PrintPageMargins`
|
||||
|
||||
| Name | Description | Type | Default |
|
||||
| --------- | ----------------------------------------------------------------------------------------- | ------ | ------- |
|
||||
| `top?` | Page top margin. Must be greater than or equal to `0`. | number | `1` |
|
||||
| `bottom?` | Page bottom margin. Must be greater than or equal to `0`. | number | `1` |
|
||||
| `left?` | Page left margin. Must be greater than or equal to `0`. | number | `1` |
|
||||
| `right?` | Page right margin. Must be greater than or equal to `0`. | number | `1` |
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - a base64-encoded PDF document
|
||||
|
||||
@@ -21,7 +21,7 @@ mentioned below.
|
||||
Installs the following extensions for browser webview testing:
|
||||
|
||||
- Drivers: `safari`[^1], `gecko`, `chromium`
|
||||
- Plugins: `images`
|
||||
- Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
@@ -34,7 +34,7 @@ appium setup browser
|
||||
Installs the following extensions for desktop application testing:
|
||||
|
||||
- Drivers: `mac2`[^1], `windows`[^2]
|
||||
- Plugins: `images`
|
||||
- Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
@@ -47,7 +47,7 @@ appium setup desktop
|
||||
Installs the following extensions for mobile testing:
|
||||
|
||||
- Drivers: `uiautomator2`, `xcuitest`[^1], `espresso`
|
||||
- Plugins: `images`
|
||||
- Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
|
||||
@@ -9,40 +9,40 @@ theme:
|
||||
nav:
|
||||
- 欢迎使用: index.md
|
||||
- 博客: blog/index.md
|
||||
- 简介:
|
||||
- 简介:
|
||||
- intro/index.md
|
||||
- 背景:
|
||||
- 背景:
|
||||
- intro/appium.md
|
||||
- intro/drivers.md
|
||||
- intro/clients.md
|
||||
- intro/history.md
|
||||
- 快速开始:
|
||||
- 快速开始:
|
||||
- quickstart/index.md
|
||||
- quickstart/requirements.md
|
||||
- quickstart/install.md
|
||||
- quickstart/uiauto2-driver.md
|
||||
- 写一个测试:
|
||||
- 写一个测试:
|
||||
- quickstart/test-js.md
|
||||
- quickstart/test-py.md
|
||||
- quickstart/test-java.md
|
||||
- quickstart/test-rb.md
|
||||
- quickstart/test-dotnet.md
|
||||
- quickstart/next-steps.md
|
||||
- 生态系统:
|
||||
- 生态系统:
|
||||
- ecosystem/index.md
|
||||
- ecosystem/drivers.md
|
||||
- ecosystem/clients.md
|
||||
- ecosystem/plugins.md
|
||||
- ecosystem/tools.md
|
||||
- Reference:
|
||||
- 参考:
|
||||
- reference/index.md
|
||||
- Command Line Interface:
|
||||
- 命令行界面:
|
||||
- reference/cli/index.md
|
||||
- reference/cli/server.md
|
||||
- reference/cli/extensions.md
|
||||
- reference/cli/setup.md
|
||||
- reference/cli/env-vars.md
|
||||
- API Endpoints:
|
||||
- API 端点:
|
||||
- reference/api/index.md
|
||||
- reference/api/webdriver.md
|
||||
- reference/api/bidi.md
|
||||
@@ -51,11 +51,11 @@ nav:
|
||||
- reference/api/appium.md
|
||||
- reference/api/others.md
|
||||
- reference/api/plugins.md
|
||||
- 指南:
|
||||
- 迁移:
|
||||
- 指南:
|
||||
- 迁移:
|
||||
- guides/migrating-2-to-3.md
|
||||
- guides/migrating-1-to-2.md
|
||||
- 服务器/驱动程序配置:
|
||||
- 服务器/驱动程序配置:
|
||||
- guides/managing-exts.md
|
||||
- guides/branch-testing.md
|
||||
- guides/config.md
|
||||
@@ -65,24 +65,24 @@ nav:
|
||||
- guides/grid.md
|
||||
- guides/caching.md
|
||||
- guides/tls.md
|
||||
- 会话配置:
|
||||
- 会话配置:
|
||||
- guides/caps.md
|
||||
- guides/settings.md
|
||||
- guides/execute-methods.md
|
||||
- guides/context.md
|
||||
- guides/event-timing.md
|
||||
- More Resources:
|
||||
- 更多资源:
|
||||
- resources/index.md
|
||||
- 开发:
|
||||
- 开发:
|
||||
- developing/index.md
|
||||
- developing/build-drivers.md
|
||||
- developing/build-plugins.md
|
||||
- developing/build-docs.md
|
||||
- developing/build-doctor-checks.md
|
||||
- developing/sensitive.md
|
||||
- 开发者参考:
|
||||
- 开发者参考:
|
||||
- developing/config-system.md
|
||||
- Contributing:
|
||||
- 贡献:
|
||||
- contributing/index.md
|
||||
- Sponsors:
|
||||
- 赞助者:
|
||||
- sponsors/index.md
|
||||
|
||||
@@ -36,7 +36,7 @@ Don't miss this chance to contribute to the Appium community and showcase your e
|
||||
|
||||
## How to Submit Your Proposal
|
||||
|
||||
Visit our website at [https://appiumconf.com/](https://appiumconf.com/) and Submit a Proposal. We're excited to see your innovative ideas and experiences with Appium!
|
||||
Visit our website at [https://appiumconf.com/](https://appiumconf.com/) and [Submit a Proposal](https://confengine.com/conferences/appium-conf-2024/proposals?utm_medium=referal&utm_source=appium.io&utm_campaign=launch). We're excited to see your innovative ideas and experiences with Appium!
|
||||
|
||||
## Stay Tuned
|
||||
|
||||
|
||||
@@ -1,59 +1,45 @@
|
||||
---
|
||||
hide:
|
||||
- navigation
|
||||
- 导航栏
|
||||
|
||||
title: Contributing to Appium
|
||||
title: 对Appium 的贡献
|
||||
---
|
||||
|
||||
The Appium project would not exist without the many contributions of code, documentation,
|
||||
maintenance, and support from companies and volunteers. As such, we welcome contributions!
|
||||
Appium项目离不开来自公司和志愿者的代码、文档、维护和支持的众多贡献。 因此,我们欢迎贡献!
|
||||
|
||||
There are a lot of different ways to help the project - see below for everything you can do and the
|
||||
processes to follow for each contribution method. Note that no matter how you contribute, your
|
||||
participation is governed by our [Code of Conduct](https://github.com/appium/appium/blob/master/CONDUCT.md).
|
||||
有许多不同的方式可以帮助项目——请参阅下方了解您可以做的一切以及每个贡献方法的流程。 请注意,无论您如何贡献,您的参与都受我们的[行为准则](https://github.com/appium/appium/blob/master/CONDUCT.md)管辖。
|
||||
|
||||
## Join the Discussion Forum
|
||||
## 加入讨论论坛
|
||||
|
||||
You don't need to know the internals of Appium to be able to contribute! If you have experience with
|
||||
using Appium and feel like sharing your knowledge with others, consider helping out users on the
|
||||
Appium forums at [discuss.appium.io](https://discuss.appium.io/). Hop on over and see if there are
|
||||
any questions that you can answer.
|
||||
您不需要了解Appium的内部机制就能做出贡献! 如果您有使用Appium的经验,并愿意与他人分享您的知识,请考虑在Appium论坛[discuss.appium.io](https://discuss.appium.io/)上帮助用户。 快去看看是否有您能回答的问题。
|
||||
|
||||
## Report Bugs or Feature Requests
|
||||
## 报告错误或功能请求
|
||||
|
||||
If you've encountered a bug, or have a cool feature in mind that you think Appium should support,
|
||||
make sure to let us know at our [GitHub issue tracker](https://github.com/appium/appium/issues).
|
||||
Please use the appropriate issue form template when creating your issue.
|
||||
如果您遇到了一个bug,或者有一个很酷的功能想法,认为Appium应该支持,请务必在我们的[GitHub issue tracker](https://github.com/appium/appium/issues)上告诉我们。
|
||||
请在创建issue时使用适当的issue表单模板。
|
||||
|
||||
## Triage Issues
|
||||
## 对问题分类
|
||||
|
||||
In addition to creating issues, you can also help us investigate already reported issues. All you
|
||||
need is enough familiarity with Appium to try and reproduce bugs.
|
||||
除了创建issue,您还可以帮助我们调查已报告的问题。 您只需要对Appium有足够的熟悉程度来尝试重现bug。
|
||||
|
||||
You can get started by checking our [GitHub issue tracker](https://github.com/appium/appium/issues)
|
||||
for issues with labels such as `Needs Triage` or `Needs Info`, and leaving relevant comments:
|
||||
您可以通过检查我们的[GitHub issue tracker](https://github.com/appium/appium/issues)中带有标签如`Needs Triage`或`Needs Info`的问题开始,并留下相关评论:
|
||||
|
||||
- If the issue is a duplicate, drop a link to the original issue
|
||||
- If the user has not provided enough information (such as Appium logs), ask them for more details
|
||||
- If you can reproduce the problem on your own environment, provide all the information that you think
|
||||
would help us track down the cause of the issue
|
||||
- 如果问题是重复的,请提供指向原始issue的链接
|
||||
- 如果用户没有提供足够的信息(如Appium日志),请向他们询问更多细节
|
||||
- 如果您能在自己的环境中重现问题,请提供您认为有助于我们追踪问题原因的所有信息
|
||||
|
||||
For further information on triaging Appium issues (for any Appium project repository), please contact
|
||||
any member of the [Technical Committee](https://github.com/appium/appium/blob/master/GOVERNANCE.md#the-technical-committee).
|
||||
有关对Appium问题进行分类的更多信息(适用于任何Appium项目仓库),请联系[技术委员会](https://github.com/appium/appium/blob/master/GOVERNANCE.md#the-technical-committee)的任何成员。
|
||||
|
||||
## Contribute Code
|
||||
## 贡献代码
|
||||
|
||||
We are always open to pull requests for improving the Appium code or documentation!
|
||||
我们始终欢迎用于改进Appium代码或文档的拉取请求!
|
||||
|
||||
!!! 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!
|
||||
开发者信息可能不像面向用户的信息那样频繁更新,或者它在在线仓库中的当前形式可能最相关,而不是在这个发布的版本中。请务必检查仓库或与维护者讨论。我们很乐意帮助新贡献者入门!
|
||||
|
||||
Start by cloning the repository (we recommend [forking](https://github.com/appium/appium/fork)
|
||||
it first):
|
||||
首先克隆仓库(我们建议先[fork](https://github.com/appium/appium/fork)
|
||||
它):
|
||||
|
||||
```sh
|
||||
git clone https://github.com/appium/appium.git
|
||||
@@ -62,35 +48,35 @@ 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).
|
||||
如果您是 VS Code 用户,您可以使用 [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:
|
||||
安装依赖:
|
||||
|
||||
```sh
|
||||
npm install
|
||||
```
|
||||
|
||||
From here on there are several things you can do.
|
||||
接下来你可以做几件事情。
|
||||
|
||||
Build the project:
|
||||
构建项目:
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
|
||||
Build the project and watch for changes:
|
||||
构建项目并监视更改:
|
||||
|
||||
```sh
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Start the locally built Appium server:
|
||||
启动本地 Appium 服务器:
|
||||
|
||||
```sh
|
||||
npm start
|
||||
```
|
||||
|
||||
Run various tests:
|
||||
运行测试:
|
||||
|
||||
```sh
|
||||
npm run lint
|
||||
@@ -102,57 +88,45 @@ npm run test:quick # unit and types
|
||||
npm run test:slow # everything
|
||||
```
|
||||
|
||||
You can also run tests for specific workspaces, e.g.:
|
||||
您也可以运行特定工作区的测试,例如:
|
||||
|
||||
```sh
|
||||
export APPIUM_WORKSPACE=@appium/base-driver
|
||||
npm run test:unit -w $APPIUM_WORKSPACE
|
||||
```
|
||||
|
||||
### Documentation
|
||||
### 文档
|
||||
|
||||
The documentation for this project is [available in the project repository itself](https://github.com/appium/appium/tree/master/packages/appium/docs).
|
||||
It is contained in Markdown files, which are built by our documentation system in the
|
||||
`@appium/docutils` module. This module is based on [MkDocs](https://www.mkdocs.org/) and therefore
|
||||
requires [Python](https://www.python.org/) to be installed on your system.
|
||||
此项目的文档位于项目[仓库本身](https://github.com/appium/appium/tree/master/packages/appium/docs)中。
|
||||
它包含在Markdown文件中,这些文件由`@appium/docutils`模块中的文档系统构建。 该模块基于[MkDocs](https://www.mkdocs.org/),因此需要在您的系统上安装[Python](https://www.python.org/)。
|
||||
|
||||
Install Python dependencies:
|
||||
安装 Python 依赖:
|
||||
|
||||
```sh
|
||||
npm run install-docs-deps
|
||||
```
|
||||
|
||||
After making your changes, you can run the documentation server in dev mode:
|
||||
安装 Python 依赖:
|
||||
|
||||
```sh
|
||||
npm run dev:docs
|
||||
```
|
||||
|
||||
You can then view the documentation at `http://127.0.0.1:8000/docs/en`.
|
||||
然后你可以在 `http://127.0.1:8000/docs/en` 中查看文档。
|
||||
|
||||
## Translating Appium Documentation
|
||||
## 翻译Appium 文档
|
||||
|
||||
The process of Appium documents localization into languages other than English is automated and is done via
|
||||
the [Crowdin Translations Management System](https://crowdin.com). Do not edit any translated documents
|
||||
directly in the GitHub Appium repository as they are going to be replaced with ones exported from Crowdin
|
||||
during an upcoming sync.
|
||||
Appium文档本地化为英语以外语言的过程是自动化的,通过[Crowdin翻译管理系统](https://crowdin.com)完成。 请勿直接在GitHub Appium仓库中编辑任何翻译文档,因为它们将在即将进行的同步中被从Crowdin导出的文档替换。
|
||||
|
||||
### Where To Start
|
||||
### 从哪里开始
|
||||
|
||||
If you would like to contribute to the translation of Appium documents into your language then simply join
|
||||
the translators group for the [Appium Documentation](https://crowdin.com/project/appium-documentation)
|
||||
Crowdin project, and start translating documents there. If you see that your language is missing from
|
||||
the list of available Crowdin languages then simply let us know by creating an
|
||||
[issue](https://github.com/appium/appium/issues).
|
||||
如果您想为Appium文档翻译成您的语言做出贡献,只需加入[Appium Documentation](https://crowdin.com/project/appium-documentation) Crowdin项目的翻译者组,然后在那里开始翻译文档。 如果您看到您的语言在Crowdin可用语言列表中缺失,请通过创建[issue](https://github.com/appium/appium/issues)告诉我们。
|
||||
|
||||
### Source Language Updates
|
||||
### 源语言更新
|
||||
|
||||
Changes in documents are synchronized to Crowdin automatically via the `Update Crowdin English Docs` GitHub action.
|
||||
This action is triggered automatically as soon as there are any changes under `packages/appium/docs/en/**.md`
|
||||
or `packages/appium/docs/mkdocs-en.yml`.
|
||||
文档中的更改通过 `Update Crowdin English Docs GitHub` action自动同步到Crowdin。
|
||||
一旦 `packages/appium/docs/en/**.md` 或 `packages/appium/docs/mkdocs-en.yml` 下有任何更改,此action就会自动触发。
|
||||
|
||||
### Fetching Translated Documents
|
||||
### 获取翻译文档
|
||||
|
||||
In order to fetch translated files from Crowdin to the GitHub repository it is necessary to trigger
|
||||
the `Sync Crowdin Docs Translations` action. This action should also automatically create a PR with
|
||||
corresponding translated resources included.
|
||||
为了从Crowdin获取翻译文件到GitHub仓库,需要触发 `Sync Crowdin Docs Translations` action。 此action还会自动创建一个包含相应翻译资源的PR。
|
||||
|
||||
@@ -50,7 +50,7 @@ npx appium-docs init
|
||||
This will:
|
||||
|
||||
1. Create a `tsconfig.json` if one does not already exist. This is necessary even if your extension
|
||||
is not written in TypeScript.
|
||||
is not written in TypeScript.
|
||||
2. Create a `mkdocs.yml` with the necessary configuration for MkDocs.
|
||||
|
||||
### Documenting Your Extension
|
||||
|
||||
@@ -21,13 +21,13 @@ The interface defines the following methods and properties:
|
||||
|
||||
- `diagnose(): Promise<DoctorCheckResult>`: Contains the code to diagnose a possible issue
|
||||
- `fix(): Promise<string|null>`: Either fixes the actual problem if `hasAutofix()` returns true or
|
||||
returns a string description for possible manual fixes. If this method throws an exception named
|
||||
`FixSkippedError` and `hasAutofix()` returns true then the result of the method invocation
|
||||
is going to be ignored.
|
||||
returns a string description for possible manual fixes. If this method throws an exception named
|
||||
`FixSkippedError` and `hasAutofix()` returns true then the result of the method invocation
|
||||
is going to be ignored.
|
||||
- `hasAutofix(): boolean`: Whether calling `fix()` would resolve the found issue
|
||||
- `isOptional(): boolean`: Whether the found issue can be ignored and is not a showstopper
|
||||
- `log: AppiumLogger`: May be used for logging. This property may be assigned
|
||||
by the instance itself or by the Appium server if it is left unassigned.
|
||||
by the instance itself or by the Appium server if it is left unassigned.
|
||||
|
||||
The `DoctorCheckResult` object returned by the `diagnose()` method must contain the following properties:
|
||||
|
||||
|
||||
@@ -579,7 +579,7 @@ three ways:
|
||||
1. Extending the classic WebDriver protocol and creating client-side plugins to access the extensions via the classic HTTP interface
|
||||
2. Extending the WebDriver BiDi protocol with new modules and methods, accessed from a client via the BiDi interface
|
||||
3. Overloading the Execute Script command by defining Execute
|
||||
Methods
|
||||
Methods
|
||||
|
||||
If you want to follow the first path, you can direct Appium to recognize new methods and add them
|
||||
to its set of allowed HTTP routes and command names. You do this by assigning the `newMethodMap`
|
||||
@@ -685,17 +685,17 @@ async execute(script, args) {
|
||||
A couple notes about this system:
|
||||
|
||||
1. The arguments array sent via the call to Execute Script must contain only zero or one element(s). The
|
||||
first item in the list is considered to be the parameters object for your method. These parameters
|
||||
will be parsed, validated, and then applied to your overload method in the order specified in
|
||||
`executeMethodMap` (the order specified in the `required` parameters list, followed by the
|
||||
`optional` parameters list). I.e., this framework assumes only a single actual argument sent in via
|
||||
Execute Script (and this argument should be an object with keys/values representing the
|
||||
parameters your execute method expects).
|
||||
first item in the list is considered to be the parameters object for your method. These parameters
|
||||
will be parsed, validated, and then applied to your overload method in the order specified in
|
||||
`executeMethodMap` (the order specified in the `required` parameters list, followed by the
|
||||
`optional` parameters list). I.e., this framework assumes only a single actual argument sent in via
|
||||
Execute Script (and this argument should be an object with keys/values representing the
|
||||
parameters your execute method expects).
|
||||
2. Appium does not automatically implement `execute` (the Execute Script handler) for you. You may
|
||||
wish, for example, to only call the `executeMethod` helper function when you're not in proxy
|
||||
mode!
|
||||
wish, for example, to only call the `executeMethod` helper function when you're not in proxy
|
||||
mode!
|
||||
3. The `executeMethod` helper will reject with an error if a script name doesn't match one of the
|
||||
script names defined as a command in `executeMethodMap`, or if there are missing parameters.
|
||||
script names defined as a command in `executeMethodMap`, or if there are missing parameters.
|
||||
|
||||
One of the nice things about the Execute Method strategy is that methods implemented in this way
|
||||
will be available via the classic or BiDi interfaces (since they will result in the same Appium
|
||||
@@ -770,7 +770,7 @@ that multiple simultaneous sessions don't use the same resources:
|
||||
1. Have your users specify resource IDs via capabilities (`appium:driverPort` etc)
|
||||
2. Just always use free resources (find a new random port for each session)
|
||||
3. Have each driver express what resources it is using, then examine currently-used resources from
|
||||
other drivers when a new session begins.
|
||||
other drivers when a new session begins.
|
||||
|
||||
To support this third strategy, you can implement `get driverData` in your driver to return what
|
||||
sorts of resources your driver is currently using, for example:
|
||||
|
||||
@@ -236,13 +236,13 @@ upstream server. In this case, we might run into a problem, because the plugin n
|
||||
handle that command! The way Appium handles this is as follows:
|
||||
|
||||
1. When a command comes in, before deciding whether to proxy the command, the main protocol handler
|
||||
checks to see whether a plugin would handle the command.
|
||||
checks to see whether a plugin would handle the command.
|
||||
2. If a plugin would _not_ handle the command--all proceeds as normal, and the request is either
|
||||
proxied or not, based on the driver's proxy mode.
|
||||
proxied or not, based on the driver's proxy mode.
|
||||
3. If a plugin _would_ handle the command, then the proxy behavior is skipped for the time being,
|
||||
and wrapped up as the `next` function sent to the plugin. So if you have a command handler in
|
||||
your plugin, and you want to be sure that the default driver proxying _does_ take place, then
|
||||
simply `await next()` instead of (or in addition to) whatever your plugin handler is doing.
|
||||
and wrapped up as the `next` function sent to the plugin. So if you have a command handler in
|
||||
your plugin, and you want to be sure that the default driver proxying _does_ take place, then
|
||||
simply `await next()` instead of (or in addition to) whatever your plugin handler is doing.
|
||||
|
||||
### Throw WebDriver-specific errors
|
||||
|
||||
@@ -331,7 +331,7 @@ drivers, you can create new commands in one of two ways, just as is possible for
|
||||
1. Extending the WebDriver protocol and creating client-side plugins to access the extensions
|
||||
2. Extending the WebDriver BiDi protocol with new modules and methods, accessed from a client via the BiDi interface
|
||||
3. Overloading the Execute Script command by defining Execute
|
||||
Methods
|
||||
Methods
|
||||
|
||||
#### Extending the HTTP Protocol
|
||||
|
||||
@@ -458,10 +458,10 @@ inside the plugin class:
|
||||
|
||||
1. The `executeMethodMap`, defined in just the same way as for drivers
|
||||
2. The implementation of the command method as defined in `executeMethodMap` (in this case,
|
||||
`plugMeIn`)
|
||||
`plugMeIn`)
|
||||
3. The overriding/handling of the `execute` command. Just like any plugin command handlers, the
|
||||
first two arguments are `next` and `driver`, followed by the script name and args. `BasePlugin`
|
||||
implements a helper method which we can simply call with all of these arguments.
|
||||
first two arguments are `next` and `driver`, followed by the script name and args. `BasePlugin`
|
||||
implements a helper method which we can simply call with all of these arguments.
|
||||
|
||||
Overriding Execute Methods from drivers works as you'd expect: if your plugin defines an Execute
|
||||
Method with the same name as that of a driver, your command (in this case `plugMeIn`) will be
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Masking Sensitive Log Data
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Managing Contexts
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Execute Methods
|
||||
---
|
||||
|
||||
@@ -9,10 +10,10 @@ defined by the W3C WebDriver spec, Appium needs a way for these "extended" comma
|
||||
by client libraries. There are two main strategies for this:
|
||||
|
||||
1. Appium drivers define new W3C-compatible API routes, and Appium clients are updated to include
|
||||
support for those new routes.
|
||||
support for those new routes.
|
||||
2. Appium drivers define so-called "Execute Methods" which provide new functionality by
|
||||
overloading the existing `Execute Script` command which is already available in any WebDriver-
|
||||
based client library (including all Selenium and Appium clients).
|
||||
overloading the existing `Execute Script` command which is already available in any WebDriver-
|
||||
based client library (including all Selenium and Appium clients).
|
||||
|
||||
There are pros and cons for each strategy, but it is ultimately up to the extension author to
|
||||
decide how they wish implement new commands.
|
||||
@@ -133,9 +134,9 @@ Javascript execution:
|
||||
|
||||
1. The script string is just a command name; it will be provided by the driver documentation
|
||||
2. The standard way to provide parameters is as a _single_ object with keys representing parameter
|
||||
names and values representing parameter values. So in this case, we had to specify both the
|
||||
parameter name (`bundleId`) as the key of the parameters object, and the parameter value
|
||||
(`com.my.app`) as the value for that key. A driver can define parameters as _required_ or _optional_.
|
||||
names and values representing parameter values. So in this case, we had to specify both the
|
||||
parameter name (`bundleId`) as the key of the parameters object, and the parameter value
|
||||
(`com.my.app`) as the value for that key. A driver can define parameters as _required_ or _optional_.
|
||||
|
||||
Of course, always refer to the documentation for the particular Execute Method in case the author
|
||||
has made any alterations to the standard access method.
|
||||
|
||||
@@ -151,285 +151,285 @@ Icons are used to indicate endpoint support in either certain drivers, or in the
|
||||
</div>
|
||||
|
||||
- `GET /sessions`
|
||||
- :octicons-arrow-right-24: `GET /appium/sessions` :simple-appium:
|
||||
- :octicons-arrow-right-24: `GET /appium/sessions` :simple-appium:
|
||||
- `POST /session/:sessionId/accept_alert`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/alert/accept` :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: alert` [execute method](./execute-methods.md) :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: acceptAlert` execute method :material-android:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/alert/accept` :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: alert` [execute method](./execute-methods.md) :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: acceptAlert` execute method :material-android:
|
||||
- `GET /session/:sessionId/alert_text`
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/alert/text` :simple-appium:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/alert/text` :simple-appium:
|
||||
- `POST /session/:sessionId/alert_text`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/alert/text` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/alert/text` :simple-appium:
|
||||
- `POST /session/:sessionId/appium/app/background`
|
||||
- :octicons-arrow-right-24: `mobile: backgroundApp` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: backgroundApp` execute method :material-apple: :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/app/close`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: terminateApp` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: terminateApp` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: closeApp` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: terminateApp` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: terminateApp` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: closeApp` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/appium/app/end_test_coverage`
|
||||
- :octicons-arrow-right-24: `mobile: shell` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: shell` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/app/launch`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: launchApp` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: activateApp` or `mobile: startActivity` execute methods :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: launchApp` or `macos: activateApp` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: launchApp` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: launchApp` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: activateApp` or `mobile: startActivity` execute methods :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: launchApp` or `macos: activateApp` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: launchApp` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/appium/app/reset`
|
||||
- :octicons-arrow-right-24: `mobile: clearApp` execute method :material-apple: [^sim] :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: clearApp` execute method :material-apple: [^sim] :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/app/strings`
|
||||
- :octicons-arrow-right-24: `mobile: getAppStrings` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getAppStrings` execute method :material-apple: :material-android: :material-coffee:
|
||||
- `GET /session/:sessionId/appium/device/app_state`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/appium/device/app_state` :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: queryAppState` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: queryAppState` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/appium/device/app_state` :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: queryAppState` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: queryAppState` execute method :material-apple-finder:
|
||||
- `GET /session/:sessionId/appium/device/current_activity`
|
||||
- :octicons-arrow-right-24: `mobile: getCurrentActivity` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getCurrentActivity` execute method :material-android: :material-coffee:
|
||||
- `GET /session/:sessionId/appium/device/current_package`
|
||||
- :octicons-arrow-right-24: `mobile: getCurrentPackage` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getCurrentPackage` execute method :material-android: :material-coffee:
|
||||
- `GET /session/:sessionId/appium/device/display_density`
|
||||
- :octicons-arrow-right-24: `mobile: getDisplayDensity` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getDisplayDensity` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/finger_print`
|
||||
- :octicons-arrow-right-24: `mobile: fingerPrint` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: fingerPrint` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/get_clipboard`
|
||||
- :octicons-check-24: Moved to drivers: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getClipboard` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getPasteboard` execute method :material-apple: [^sim]
|
||||
- :octicons-arrow-right-24: `windows: getClipboard` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getClipboard` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getPasteboard` execute method :material-apple: [^sim]
|
||||
- :octicons-arrow-right-24: `windows: getClipboard` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/appium/device/gsm_call`
|
||||
- :octicons-arrow-right-24: `mobile: gsmCall` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: gsmCall` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/gsm_signal`
|
||||
- :octicons-arrow-right-24: `mobile: gsmSignal` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: gsmSignal` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/gsm_voice`
|
||||
- :octicons-arrow-right-24: `mobile: gsmVoice` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: gsmVoice` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/is_locked`
|
||||
- :octicons-arrow-right-24: `mobile: isLocked` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: isLocked` execute method :material-apple: :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/keyevent`
|
||||
- :octicons-arrow-right-24: `mobile: keys` execute method :material-apple: (iPadOS only)
|
||||
- :octicons-arrow-right-24: `mobile: pressKey` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: keys` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: keys` execute method :material-apple: (iPadOS only)
|
||||
- :octicons-arrow-right-24: `mobile: pressKey` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: keys` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/appium/device/lock`
|
||||
- :octicons-arrow-right-24: `mobile: lock` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: lock` execute method :material-apple: :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/long_press_keycode`
|
||||
- :octicons-arrow-right-24: `mobile: pressKey` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: pressKey` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/network_speed`
|
||||
- :octicons-arrow-right-24: `mobile: networkSpeed` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: networkSpeed` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/open_notifications`
|
||||
- :octicons-arrow-right-24: `mobile: statusBar` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: openNotifications` execute method :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: statusBar` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: openNotifications` execute method :material-android:
|
||||
- `POST /session/:sessionId/appium/device/power_ac`
|
||||
- :octicons-arrow-right-24: `mobile: powerAC` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: powerAC` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/power_capacity`
|
||||
- :octicons-arrow-right-24: `mobile: powerCapacity` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: powerCapacity` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/press_keycode`
|
||||
- :octicons-arrow-right-24: `mobile: keys` execute method :material-apple: (iPadOS only)
|
||||
- :octicons-arrow-right-24: `mobile: pressKey` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: keys` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: keys` execute method :material-apple: (iPadOS only)
|
||||
- :octicons-arrow-right-24: `mobile: pressKey` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: keys` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/appium/device/send_sms`
|
||||
- :octicons-arrow-right-24: `mobile: sendSms` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: sendSms` execute method :material-android: [^sim] :material-coffee: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/set_clipboard`
|
||||
- :octicons-arrow-right-24: `mobile: setClipboard` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: setPasteboard` execute method :material-apple: [^sim]
|
||||
- :octicons-arrow-right-24: `windows: setClipboard` execute method :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: setClipboard` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: setPasteboard` execute method :material-apple: [^sim]
|
||||
- :octicons-arrow-right-24: `windows: setClipboard` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/appium/device/shake`
|
||||
- :octicons-arrow-right-24: `mobile: shake` execute method :material-apple: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: shake` execute method :material-apple: [^sim]
|
||||
- `POST /session/:sessionId/appium/device/start_activity`
|
||||
- :octicons-arrow-right-24: `mobile: startActivity` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: startActivity` execute method :material-android: :material-coffee:
|
||||
- `GET /session/:sessionId/appium/device/system_bars`
|
||||
- :octicons-arrow-right-24: `mobile: deviceScreenInfo` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: getSystemBars` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: deviceScreenInfo` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: getSystemBars` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/toggle_airplane_mode`
|
||||
- :octicons-arrow-right-24: `mobile: setConnectivity` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: setConnectivity` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/toggle_data`
|
||||
- :octicons-arrow-right-24: `mobile: setConnectivity` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: setConnectivity` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/toggle_location_services`
|
||||
- :octicons-arrow-right-24: `mobile: toggleGps` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: toggleGps` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/toggle_wifi`
|
||||
- :octicons-arrow-right-24: `mobile: setConnectivity` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: setConnectivity` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/device/unlock`
|
||||
- :octicons-arrow-right-24: `mobile: unlock` execute method :material-apple: :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: unlock` execute method :material-apple: :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/element/:elementId/value`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/element/:elementId/value` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/element/:elementId/value` :simple-appium:
|
||||
- `POST /session/:sessionId/appium/element/:elementId/replace_value`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/element/:elementId/value` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/element/:elementId/value` :simple-appium:
|
||||
- `POST /session/:sessionId/appium/getPerformanceData`
|
||||
- :octicons-arrow-right-24: `mobile: getPerformanceData` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getPerformanceData` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/performanceData/types`
|
||||
- :octicons-arrow-right-24: `mobile: getPerformanceDataTypes` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `mobile: getPerformanceDataTypes` execute method :material-android: :material-coffee:
|
||||
- `POST /session/:sessionId/appium/receive_async_response`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/execute/async` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/execute/async` :simple-appium:
|
||||
- `POST /session/:sessionId/appium/simulator/toggle_touch_id_enrollment`
|
||||
- :octicons-arrow-right-24: `mobile: enrollBiometric` execute method :material-apple: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: enrollBiometric` execute method :material-apple: [^sim]
|
||||
- `POST /session/:sessionId/appium/simulator/touch_id`
|
||||
- :octicons-arrow-right-24: `mobile: sendBiometricMatch` execute method :material-apple: [^sim]
|
||||
- :octicons-arrow-right-24: `mobile: sendBiometricMatch` execute method :material-apple: [^sim]
|
||||
- `POST /session/:sessionId/appium/start_recording_screen`
|
||||
- :octicons-check-24: Moved to drivers: :material-apple: :material-android: :material-coffee: :material-apple-finder: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: startXCTestScreenRecording` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: startMediaProjectionRecording` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: startRecordingScreen` or `macos: startNativeScreenRecording` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: startRecordingScreen` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-apple: :material-android: :material-coffee: :material-apple-finder: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: startXCTestScreenRecording` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: startMediaProjectionRecording` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: startRecordingScreen` or `macos: startNativeScreenRecording` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: startRecordingScreen` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/appium/stop_recording_screen`
|
||||
- :octicons-check-24: Moved to drivers: :material-apple: :material-android: :material-coffee: :material-apple-finder: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: stopXCTestScreenRecording` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: stopMediaProjectionRecording` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: stopRecordingScreen` or `macos: stopNativeScreenRecording` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: stopRecordingScreen` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-apple: :material-android: :material-coffee: :material-apple-finder: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `mobile: stopXCTestScreenRecording` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: stopMediaProjectionRecording` execute method :material-android: :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: stopRecordingScreen` or `macos: stopNativeScreenRecording` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: stopRecordingScreen` execute method :material-microsoft-windows:
|
||||
- `GET /session/:sessionId/application_cache/status`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `POST /session/:sessionId/buttondown`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: [W3C Actions API](https://www.selenium.dev/documentation/webdriver/actions_api/) (`pointerDown`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: [W3C Actions API](https://www.selenium.dev/documentation/webdriver/actions_api/) (`pointerDown`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/buttonup`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/click`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown` & `pointerUp`) :simple-appium:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown` & `pointerUp`) :simple-appium:
|
||||
- `POST /session/:sessionId/dismiss_alert`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/alert/dismiss` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/alert/dismiss` :simple-appium:
|
||||
- `POST /session/:sessionId/doubleclick`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown` & `pointerUp`) :simple-appium:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown` & `pointerUp`) :simple-appium:
|
||||
- `POST /session/:sessionId/element/active`
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/element/active` :simple-appium:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/element/active` :simple-appium:
|
||||
- `GET /session/:sessionId/element/:elementId/equals/:otherId`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- `GET /session/:sessionId/element/:elementId/location`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/element/:elementId/rect` :simple-appium:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/element/:elementId/rect` :simple-appium:
|
||||
- `GET /session/:sessionId/element/:elementId/location_in_view`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- `GET /session/:sessionId/element/:elementId/pageIndex`
|
||||
- :octicons-no-entry-24: MJSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: MJSONWP protocol command with no direct replacement
|
||||
- `GET /session/:sessionId/element/:elementId/size`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/element/:elementId/rect` :simple-appium:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/element/:elementId/rect` :simple-appium:
|
||||
- `POST /session/:sessionId/element/:elementId/submit`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `POST /session/:sessionId/execute`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/execute/sync` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/execute/sync` :simple-appium:
|
||||
- `POST /session/:sessionId/execute_async`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/execute/async` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/execute/async` :simple-appium:
|
||||
- `POST /session/:sessionId/keys`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`keyDown` & `keyUp`) :simple-appium:
|
||||
- Selenium-based clients can also use [Send Keys](https://www.selenium.dev/documentation/webdriver/actions_api/keyboard/#send-keys)
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`keyDown` & `keyUp`) :simple-appium:
|
||||
- Selenium-based clients can also use [Send Keys](https://www.selenium.dev/documentation/webdriver/actions_api/keyboard/#send-keys)
|
||||
- `GET /session/:sessionId/local_storage`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `POST /session/:sessionId/local_storage`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `DELETE /session/:sessionId/local_storage`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `GET /session/:sessionId/local_storage/key/:key`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `DELETE /session/:sessionId/local_storage/key/:key`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `GET /session/:sessionId/local_storage/size`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `POST /session/:sessionId/log`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/se/log` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/se/log` :simple-appium:
|
||||
- `GET /session/:sessionId/log/types`
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/se/log/types` :simple-appium:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/se/log/types` :simple-appium:
|
||||
- `POST /session/:sessionId/moveto`
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerMove`) :simple-appium:
|
||||
- Selenium-based clients can also use [Move by Offset](https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#move-by-offset)
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerMove`) :simple-appium:
|
||||
- Selenium-based clients can also use [Move by Offset](https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#move-by-offset)
|
||||
- `GET /session/:sessionId/screenshot/:elementId`
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/element/:elementId/screenshot` :simple-appium:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/element/:elementId/screenshot` :simple-appium:
|
||||
- `GET /session/:sessionId/session_storage`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `POST /session/:sessionId/session_storage`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `DELETE /session/:sessionId/session_storage`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `GET /session/:sessionId/session_storage/key/:key`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `DELETE /session/:sessionId/session_storage/key/:key`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `GET /session/:sessionId/session_storage/size`
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- :octicons-no-entry-24: JSONWP protocol command with no direct replacement
|
||||
- `POST /session/:sessionId/timeouts/async_script`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/timeouts` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/timeouts` :simple-appium:
|
||||
- `POST /session/:sessionId/timeouts/implicit_wait`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/timeouts` :simple-appium:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/timeouts` :simple-appium:
|
||||
- `POST /session/:sessionId/touch/click`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown` & `pointerUp`) :simple-appium:
|
||||
- Selenium-based clients can also use [Click and Release](https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#click-and-release)
|
||||
- :octicons-arrow-right-24: `mobile: tap` or `mobile: tapWithNumberOfTaps` execute methods :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: clickGesture` execute method :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: clickAction` execute method :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: click`, `macos: rightClick`, `macos: press` or `macos: tap` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: click` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown` & `pointerUp`) :simple-appium:
|
||||
- Selenium-based clients can also use [Click and Release](https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#click-and-release)
|
||||
- :octicons-arrow-right-24: `mobile: tap` or `mobile: tapWithNumberOfTaps` execute methods :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: clickGesture` execute method :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: clickAction` execute method :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: click`, `macos: rightClick`, `macos: press` or `macos: tap` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: click` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/touch/doubleclick`
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown` & `pointerUp`) :simple-appium:
|
||||
- Selenium-based clients can also use [Double Click](https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#double-click)
|
||||
- :octicons-arrow-right-24: `mobile: doubleTap` or `mobile: tapWithNumberOfTaps` execute methods :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: doubleClickGesture` execute method :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: clickAction` execute method :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: doubleClick` or `macos: doubleTap` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: click` execute method :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown` & `pointerUp`) :simple-appium:
|
||||
- Selenium-based clients can also use [Double Click](https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#double-click)
|
||||
- :octicons-arrow-right-24: `mobile: doubleTap` or `mobile: tapWithNumberOfTaps` execute methods :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: doubleClickGesture` execute method :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: clickAction` execute method :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: doubleClick` or `macos: doubleTap` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: click` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/touch/down`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/touch/flick`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown`, `pointerMove` & `pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: flingGesture` execute method :material-android:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown`, `pointerMove` & `pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: flingGesture` execute method :material-android:
|
||||
- `POST /session/:sessionId/touch/longclick`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown`, `pause` & `pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: touchAndHold` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: longClickGesture` execute method :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: clickAction` execute method :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: press` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: click` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown`, `pause` & `pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: touchAndHold` execute method :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: longClickGesture` execute method :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: clickAction` execute method :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: press` execute method :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: click` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/touch/multi/perform`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/actions` :simple-appium:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/actions` :simple-appium:
|
||||
- `POST /session/:sessionId/touch/move`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerMove`) :simple-appium:
|
||||
- Selenium-based clients can also use [Move by Offset](https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#move-by-offset)
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerMove`) :simple-appium:
|
||||
- Selenium-based clients can also use [Move by Offset](https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#move-by-offset)
|
||||
- `POST /session/:sessionId/touch/perform`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/actions` :simple-appium:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/actions` :simple-appium:
|
||||
- `POST /session/:sessionId/touch/scroll`
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown`, `pointerMove` & `pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: scroll` or `mobile: swipe` execute methods :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: scrollGesture` or `mobile: swipeGesture` execute methods :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: swipe` execute method :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: scroll` or `macos: swipe` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: scroll` execute method :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerDown`, `pointerMove` & `pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `mobile: scroll` or `mobile: swipe` execute methods :material-apple:
|
||||
- :octicons-arrow-right-24: `mobile: scrollGesture` or `mobile: swipeGesture` execute methods :material-android:
|
||||
- :octicons-arrow-right-24: `mobile: swipe` execute method :material-coffee:
|
||||
- :octicons-arrow-right-24: `macos: scroll` or `macos: swipe` execute methods :material-apple-finder:
|
||||
- :octicons-arrow-right-24: `windows: scroll` execute method :material-microsoft-windows:
|
||||
- `POST /session/:sessionId/touch/up`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: W3C Actions API (`pointerUp`) :simple-appium:
|
||||
- :octicons-arrow-right-24: `windows: keys` execute method :material-microsoft-windows:
|
||||
- `GET /session/:sessionId/window_handle`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window` :simple-appium:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window` :simple-appium:
|
||||
- `GET /session/:sessionId/window_handles`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window/handles` :simple-appium:
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window/handles` :simple-appium:
|
||||
- `GET /session/:sessionId/window/handle`
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window` :simple-appium:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window` :simple-appium:
|
||||
- `POST /session/:sessionId/window/:windowhandle/maximize`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/window/maximize` :simple-appium:
|
||||
- :fontawesome-solid-triangle-exclamation: Only supported for the current window
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/window/maximize` :simple-appium:
|
||||
- :fontawesome-solid-triangle-exclamation: Only supported for the current window
|
||||
- `GET /session/:sessionId/window/:windowhandle/position`
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window/rect` :simple-appium:
|
||||
- :fontawesome-solid-triangle-exclamation: Only supported for the current window
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window/rect` :simple-appium:
|
||||
- :fontawesome-solid-triangle-exclamation: Only supported for the current window
|
||||
- `POST /session/:sessionId/window/:windowhandle/position`
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/window/rect` :simple-appium:
|
||||
- :fontawesome-solid-triangle-exclamation: Only supported for the current window
|
||||
- :octicons-arrow-right-24: `POST /session/:sessionId/window/rect` :simple-appium:
|
||||
- :fontawesome-solid-triangle-exclamation: Only supported for the current window
|
||||
- `GET /session/:sessionId/window/:windowhandle/size`
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window/rect` :simple-appium:
|
||||
- :fontawesome-solid-triangle-exclamation: Only supported for the current window
|
||||
- :octicons-check-24: Moved to drivers: :material-microsoft-windows:
|
||||
- :octicons-arrow-right-24: `GET /session/:sessionId/window/rect` :simple-appium:
|
||||
- :fontawesome-solid-triangle-exclamation: Only supported for the current window
|
||||
|
||||
### Modified
|
||||
|
||||
@@ -438,22 +438,22 @@ parameters (note that no new parameters have been added). Each endpoint lists th
|
||||
longer accepts, as well as the parameters it continues to accept in Appium 3.
|
||||
|
||||
- `POST /session`
|
||||
- :octicons-x-24: `desiredCapabilities`, `requiredCapabilities`
|
||||
- :octicons-check-24: `capabilities`
|
||||
- :octicons-x-24: `desiredCapabilities`, `requiredCapabilities`
|
||||
- :octicons-check-24: `capabilities`
|
||||
- `POST /session/:sessionId/alert/text`
|
||||
- :octicons-x-24: `value`
|
||||
- :octicons-check-24: `text`
|
||||
- :octicons-x-24: `value`
|
||||
- :octicons-check-24: `text`
|
||||
- `GET /session/:sessionId/appium/device/system_time`
|
||||
- :octicons-x-24: `format`
|
||||
- :octicons-check-24: None
|
||||
- :octicons-x-24: `format`
|
||||
- :octicons-check-24: None
|
||||
- `POST /session/:sessionId/element/:elementId/value`
|
||||
- :octicons-x-24: `value`
|
||||
- :octicons-check-24: `text`
|
||||
- :octicons-x-24: `value`
|
||||
- :octicons-check-24: `text`
|
||||
- `POST /session/:sessionId/timeouts`
|
||||
- :octicons-x-24: `type`, `ms`
|
||||
- :octicons-check-24: `script`, `pageLoad`, `implicit`
|
||||
- :octicons-x-24: `type`, `ms`
|
||||
- :octicons-check-24: `script`, `pageLoad`, `implicit`
|
||||
- `POST /session/:sessionId/window`
|
||||
- :octicons-x-24: `name`
|
||||
- :octicons-check-24: `handle`
|
||||
- :octicons-x-24: `name`
|
||||
- :octicons-check-24: `handle`
|
||||
|
||||
[^sim]: Supported in emulators/simulators only
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Session Settings
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: SSL/TLS/SPDY Support
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
hide:
|
||||
- navigation
|
||||
- 导航栏
|
||||
- toc
|
||||
|
||||
title: 欢迎使用
|
||||
@@ -44,11 +44,11 @@ title: 欢迎使用
|
||||
- 查看 [**简介**](./intro/index.md) 以确保您理解关键概念
|
||||
- 通过 [**快速开始**](./quickstart/index.md) 来设置并运行一个基本的 Android 测试
|
||||
- 访问 [**生态系统**](./ecosystem/index.md) 页面,获取您可能想要使用的驱动程序、客户端和插件列表
|
||||
- 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
|
||||
- 访问 [**Reference**](./reference/index.md) 页面获取Appium CLI 和支持的端点信息
|
||||
- 阅读不同版本的 [**指南**](./guides/migrating-2-to-3.md),了解各版本的说明、提示和技巧
|
||||
- 查看各种第三方 [**资源**](./resources/index.md) 以探索网络上的 Appium
|
||||
- 要创建自己的 Appium 扩展,请参阅 [**开发者**](./developing/index.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
|
||||
- 有关对 Appium 的贡献,请查阅 [**贡献**](./contributing/index.md) 页面
|
||||
- 查看 [**Appium博客**](./blog/index.md) ,了解项目中的新内容
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Intro to Appium Clients
|
||||
---
|
||||
|
||||
@@ -111,8 +112,8 @@ System.Console.WriteLine(driver.PageSource);
|
||||
Each of these scripts, despite being in different languages, does the same thing under the hood:
|
||||
|
||||
1. Call `Find Element` with a `using` parameter of `xpath` and a `value` parameter expressing the
|
||||
XPath query used to find an element. (If you're confused about these terms, you might find an
|
||||
introduction to Appium or Selenium useful)
|
||||
XPath query used to find an element. (If you're confused about these terms, you might find an
|
||||
introduction to Appium or Selenium useful)
|
||||
2. Call `Click Element` with the ID of the element found in the previous call.
|
||||
3. Call `Get Element Text` with the ID of the same element, and print it to the console.
|
||||
4. Call `Get Page Source` to retrieve the page/app source and print it to the console.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Appium in a Nutshell
|
||||
---
|
||||
|
||||
|
||||
@@ -2,28 +2,22 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Getting Started
|
||||
title: 入门指南
|
||||
---
|
||||
|
||||
Let's get up and running with Appium! To successfully use this quickstart, it's recommended that
|
||||
you first have read the [Introduction](../intro/index.md), so that you understand the concepts involved in
|
||||
running Appium and writing Appium scripts.
|
||||
让我们开始使用Appium! 为了成功使用此快速入门,建议您首先阅读[介绍](../intro/index.md),以便了解运行Appium和编写Appium脚本的概念。
|
||||
|
||||
The basic plan for this quickstart is as follows:
|
||||
此快速入门的基本计划如下:
|
||||
|
||||
1. Install Appium
|
||||
2. Install an Appium driver and its dependencies
|
||||
- This guide provides instructions for the [UiAutomator2 driver](https://github.com/appium/appium-uiautomator2-driver)
|
||||
3. Install an Appium client library in your language of choice
|
||||
- This guide contains options for JavaScript, Python, Java, Ruby, and .NET
|
||||
4. Write and run a simple Appium automation script using a sample application
|
||||
1. 安装Appium
|
||||
2. 安装Appium驱动程序及其依赖项
|
||||
- 本指南提供了[UiAutomator2 驱动程序](https://github.com/appium/appium-uiautomator2-driver) 的说明
|
||||
3. 在您选择的语言中安装Appium客户端库
|
||||
- 本指南包含JavaScript、Python、Java、Ruby和.NET的选项
|
||||
4. 使用示例应用程序编写并运行简单的Appium自动化脚本
|
||||
|
||||
### Requirements
|
||||
### 系统需求
|
||||
|
||||
Before getting started, make sure your system satisfies the
|
||||
[requirements](../quickstart/requirements.md) for running the Appium server. Additional requirements
|
||||
will be discussed in conjunction with installing the UiAutomator2 driver. The guide also assumes
|
||||
you have basic command line proficiency on your platform, for example being able to run commands, set
|
||||
and persist environment variables, etc...
|
||||
在开始之前,请确保您的系统满足运行Appium服务器的[要求](../quickstart/requirements.md)。 其他要求将在安装UiAutomator2驱动程序时讨论。 本指南还假设您在平台上具有基本的命令行熟练度,例如能够运行命令、设置和持久化环境变量等...
|
||||
|
||||
Now you're ready to get started! So head on over to [Installing Appium](./install.md).
|
||||
现在您准备开始了! 前往安装[Appium](./install.md)。
|
||||
|
||||
@@ -2,42 +2,39 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Install Appium
|
||||
title: 安装Appium
|
||||
---
|
||||
|
||||
!!! info
|
||||
!!! 信息
|
||||
|
||||
```
|
||||
Before installing, make sure to check the [System Requirements](./requirements.md).
|
||||
安装前,请确保检查 [系统要求] (./requirements.md)。
|
||||
```
|
||||
|
||||
Appium can be installed globally using `npm`:
|
||||
Appium 可以使用 "npm" 在全局安装:
|
||||
|
||||
```bash
|
||||
npm install -g appium
|
||||
```
|
||||
|
||||
!!! note
|
||||
!!! 备注
|
||||
|
||||
```
|
||||
Other package managers are not currently supported.
|
||||
目前不支持其他软件包管理。
|
||||
```
|
||||
|
||||
## Starting Appium
|
||||
## 启动Appium
|
||||
|
||||
Appium can be started [using the command line](../reference/cli/index.md):
|
||||
Appium 可以使用 [命令行](../reference/cli/index.md) 启动:
|
||||
|
||||
```
|
||||
appium
|
||||
```
|
||||
|
||||
This launches the Appium server process, which loads all the installed Appium drivers, and
|
||||
begins waiting for new session requests from client connections (such as test automation scripts).
|
||||
Since the server process is independent from its clients, it must be explicitly launched before
|
||||
attempting to start a new session.
|
||||
这会启动Appium服务器进程,该进程加载所有已安装的Appium驱动程序,并开始等待来自客户端连接(如测试自动化脚本)的新会话请求。
|
||||
由于服务器进程独立于其客户端,因此必须在尝试启动新会话之前明确启动它。
|
||||
|
||||
When the server is launched, the console log will list all the valid URLs that clients can use to
|
||||
connect to this server:
|
||||
当服务器启动时,控制台日志将列出客户端可以用来连接到此服务器的所有有效URL:
|
||||
|
||||
```
|
||||
[Appium] You can provide the following URLs in your client code to connect to this server:
|
||||
@@ -45,10 +42,6 @@ connect to this server:
|
||||
(... any other URLs ...)
|
||||
```
|
||||
|
||||
Once a client requests a new session, the Appium server process will start logging all details about
|
||||
this session until its termination. Keep this in mind - if you ever encounter issues with Appium
|
||||
tests, you can always check the server log for more details.
|
||||
一旦客户端请求新会话,Appium服务器进程将开始记录此会话的所有详细信息,直到其终止。 请记住这一点——如果您遇到Appium测试的问题,您可以随时检查服务器日志以获取更多详细信息。
|
||||
|
||||
So what's next? Even though Appium is installed and running, it does not come bundled with any
|
||||
drivers, which means it cannot automate anything yet. We will therefore set up automation for
|
||||
Android - continue to [Installing the UiAutomator2 Driver](./uiauto2-driver.md).
|
||||
接下来是什么? 即使Appium已安装并运行,它也不捆绑任何驱动程序,这意味着它还不能自动化任何东西。 因此,我们将为Android设置自动化——继续[安装UiAutomator2驱动程序](./uiauto2-driver.md)。
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
title: Next Steps
|
||||
|
||||
title: 下一步
|
||||
---
|
||||
|
||||
Now that you've successfully set up your system for Android automation and run a simple test,
|
||||
you'll want to continue exploring this documentation. In particular, these are good guides and
|
||||
reference materials especially for beginners:
|
||||
现在您已成功为Android自动化设置了系统并运行了一个简单的测试,您将希望继续探索此文档。 特别是,这些是适合初学者的优秀指南和参考资料: 特别是,这些是适合初学者的优秀指南和参考资料:
|
||||
|
||||
- The [Ecosystem](../ecosystem/index.md) page: browse the available drivers, clients, plugins, and tools
|
||||
- [Managing Appium Drivers and Plugins](../guides/managing-exts.md)
|
||||
- [Capabilities](../guides/caps.md)
|
||||
- [Settings](../guides/settings.md)
|
||||
- [生态系统](../ecosystem/index.md) 页面:浏览可用的驱动程序、客户端、插件和工具
|
||||
- [管理Appium驱动程序和插件](../guides/managing-exts.md)
|
||||
- [功能](../guides/caps.md)
|
||||
- [设置](../guides/settings.md)
|
||||
|
||||
You'll also find that the [Appium Inspector](https://github.com/appium/appium-inspector) is an
|
||||
indispensable tool for writing Appium tests, as it enables visual inspection of apps and
|
||||
helps you to discover element locators for use in your test scripts.
|
||||
您还会发现[Appium Inspector](https://github.com/appium/appium-inspector)是编写Appium测试不可或缺的工具,因为它允许对应用进行视觉检查,并帮助您发现测试脚本中使用的元素定位器。
|
||||
|
||||
You might also take advantage of one of the many online Appium courses available to you.
|
||||
您还可以利用众多可用的在线Appium课程之一。
|
||||
|
||||
Good luck and have fun!
|
||||
祝您好运,玩得开心!
|
||||
|
||||
@@ -2,28 +2,20 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: System Requirements
|
||||
title: 系统要求
|
||||
---
|
||||
|
||||
The basic requirements for the Appium server are:
|
||||
Appium 服务器的基本要求如下:
|
||||
|
||||
- A macOS, Linux, or Windows operating system
|
||||
- [Node.js](https://nodejs.org) version in the [SemVer](https://semver.org) range `^20.19.0 || ^22.12.0 || >=24.0.0`
|
||||
- LTS is recommended
|
||||
- [`npm`](https://npmjs.com) version `>=10` (`npm` is usually bundled with Node.js, but can be upgraded
|
||||
independently)
|
||||
- macOS、Linux 或 Windows 操作系统
|
||||
- [Node.js](https://nodejs.org) 版本在 [SemVer](https://semver.org) 范围 `^20.19.0 || ^22.12.0 || >=24.0.0`
|
||||
- 推荐使用 LTS 版本
|
||||
- [`npm`](https://npmjs.com) 版本 `>=10`(`npm` 通常与 Node.js 捆绑,但可以独立升级)
|
||||
|
||||
By itself, Appium is relatively lightweight and doesn't have significant disk space or RAM
|
||||
requirements. It can even be run in resource-constrained environments like Raspberry Pi, so long as
|
||||
Node.js is available.
|
||||
Appium 本身相对轻量,没有显著的磁盘空间或 RAM 要求。 即使在资源受限的环境如 Raspberry Pi 中,只要有 Node.js 就可以运行。
|
||||
|
||||
### Driver Requirements
|
||||
### 驱动程序要求
|
||||
|
||||
Drivers for automating specific platforms will likely have other requirements. Refer to the
|
||||
documentation of the [Appium driver(s)](../ecosystem/drivers.md) for that platform for additional
|
||||
dependencies. It is almost universally the case that Appium drivers for a given platform will
|
||||
require the developer toolchain and SDKs for that platform to be installed.
|
||||
用于自动化特定平台的驱动程序可能有其他要求。 请参考该平台的 [Appium 驱动程序](../ecosystem/drivers.md) 文档以获取其他依赖项。 普遍的情况是,给定平台的 Appium 驱动程序需要安装该平台的开发者工具链和 SDK。
|
||||
|
||||
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](../reference/cli/extensions.md#doctor).
|
||||
为了帮助处理驱动程序要求,每个(官方)驱动程序都附带 Appium Doctor 工具,它允许验证是否已设置所有要求。 了解如何使用此工具的更多信息,请参阅 [命令行使用文档](../reference/cli/extensions.md#doctor)。
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Write a Test (.NET)
|
||||
title: 编写测试 (.NET)
|
||||
---
|
||||
|
||||
The [Appium .NET Client](https://github.com/appium/dotnet-client/) is
|
||||
an official Appium client in C#. This driver is an extension of the Selenium C# client. It has all the functionalities of the regular driver, but add Appium-specific methods on top of this. The driver is available on the public NuGet Gallery as [Appium.WebDriver](https://www.nuget.org/packages/Appium.WebDriver/).
|
||||
[Appium .NET Client](https://github.com/appium/dotnet-client/) 是
|
||||
官方的 Appium C# 客户端。 这个驱动程序是 Selenium C# 客户端的扩展。 它具有常规驱动程序的所有功能,但在之上添加了 Appium 特定的方法。 该驱动程序在公共 NuGet Gallery 上作为 [Appium.WebDriver](https://www.nuget.org/packages/Appium.WebDriver/) 提供。
|
||||
|
||||
Now, we get inside the directory and create a new [NUnit](https://nunit.org/) project. We will also add the references to the Appium.Net driver, and other dependencies.
|
||||
现在,我们进入目录并创建一个新的 [NUnit](https://nunit.org/) 项目。 我们还将添加对 Appium.Net 驱动程序和其他依赖项的引用。
|
||||
|
||||
```bash
|
||||
cd dotnet-client
|
||||
@@ -16,12 +16,12 @@ dotnet new nunit --name appiumtest
|
||||
|
||||
cd appiumtest
|
||||
|
||||
# This will install the latest 5.x version
|
||||
# 这将安装最新的 5.x 版本
|
||||
dotnet add package Appium.WebDriver --prerelease
|
||||
dotnet add package Newtonsoft.Json --version 13.0.3
|
||||
```
|
||||
|
||||
Once this is done, your project should have a placeholder file `UnitTest1.cs`. We will replace the code to include the OpenQA namespaces, an initialization of the driver, and the actual test.
|
||||
完成后,您的项目应该有一个占位符文件 `UnitTest1.cs`。 我们将替换代码以包含 OpenQA 命名空间、驱动程序的初始化以及实际测试。
|
||||
|
||||
```C# title="UnitTest1.cs"
|
||||
using OpenQA.Selenium;
|
||||
@@ -69,39 +69,31 @@ public class Tests
|
||||
}
|
||||
```
|
||||
|
||||
!!! note
|
||||
!!! 备注
|
||||
|
||||
```
|
||||
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
|
||||
[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.
|
||||
这份指南的范围不包括对 dotnet 客户端库或此处发生的一切进行完整说明,因此我们暂时不对代码本身进行详细解释。您可能需要特别阅读 Appium [Capabilities](../guides/caps.md),以及熟悉 [dotnet 客户端驱动程序文档](https://github.com/appium/dotnet-client/) 以获得对您看到的各种 API 命令及其目的的更全面解释。
|
||||
```
|
||||
|
||||
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.
|
||||
2. Starting an Appium session on the built-in Android settings app.
|
||||
3. Finding the "Apps" list item and clicking it.
|
||||
4. Ending the Appium session.
|
||||
1. 定义一组"Capabilities"(参数)发送到 Appium 服务器,以便 Appium 知道您想要自动化什么。 有些参数可以使用环境变量覆盖。
|
||||
2. 在内置的 Android 设置应用上启动 Appium 会话。
|
||||
3. 查找"Apps"列表项并点击它。
|
||||
4. 结束 Appium 会话。
|
||||
|
||||
That's it! Let's give it a try. Before you run the test, make sure that you have an Appium server
|
||||
running in another terminal session, otherwise you'll get an error about not being able to connect
|
||||
to one. Then, you can execute the script:
|
||||
就是这样! 让我们试试。 在运行测试之前,请确保在另一个终端会话中运行 Appium 服务器,否则您会收到无法连接的错误。 然后,您可以执行脚本:
|
||||
|
||||
```bash
|
||||
dotnet test
|
||||
|
||||
# Example output:
|
||||
# 示例输出:
|
||||
# Starting test execution, please wait...
|
||||
# A total of 1 test files matched the specified pattern.
|
||||
|
||||
# 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 "Apps" view in the emulator before the app closes again.
|
||||
如果一切顺利,您将看到设置应用打开并在模拟器中导航到"Apps"视图,然后应用再次关闭。
|
||||
|
||||
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
|
||||
恭喜,您已经开始了 Appium 之旅! 继续阅读一些 [后续步骤](./next-steps.md) 以进行探索。
|
||||
|
||||
@@ -1,22 +1,20 @@
|
||||
---
|
||||
hide:
|
||||
- toc
|
||||
title: Write a Test (Java)
|
||||
|
||||
title: 编写测试 (Java)
|
||||
---
|
||||
|
||||
The Appium team maintains an official [client](https://github.com/appium/java-client) for the Java programming language.
|
||||
It is built on top of [Selenium](https://github.com/SeleniumHQ/selenium).
|
||||
You can also use this client in your Kotlin projects.
|
||||
Appium 团队维护了一个官方的 [客户端](https://github.com/appium/java-client) 用于 Java 编程语言。
|
||||
它建立在 [Selenium](https://github.com/SeleniumHQ/selenium) 之上。
|
||||
您也可以在 Kotlin 项目中使用此客户端。
|
||||
|
||||
Follow the [Add Appium java client to your test framework](https://github.com/appium/java-client#add-appium-java-client-to-your-test-framework)
|
||||
tutorial in order to connect the library to your test framework sources.
|
||||
按照 [将 Appium Java 客户端添加到您的测试框架](https://github.com/appium/java-client#add-appium-java-client-to-your-test-framework) 教程将库连接到您的测试框架源代码。
|
||||
|
||||
The Appium Java client has dedicated classes to support most of the official Appium drivers. For other drivers
|
||||
you could simply use the [AppiumDriver](https://github.com/appium/java-client/blob/master/src/main/java/io/appium/java_client/AppiumDriver.java) class
|
||||
or build your custom derivatives from it. Check the [Drivers Support](https://github.com/appium/java-client#drivers-support)
|
||||
article to learn more about the current driver class implementations.
|
||||
Appium Java 客户端具有专用类来支持大多数官方 Appium 驱动程序。 对于其他驱动程序,您可以简单地使用 [AppiumDriver](https://github.com/appium/java-client/blob/master/src/main/java/io/appium/java_client/AppiumDriver.java) 类
|
||||
或从中构建自定义派生类。 查看 [驱动程序支持](https://github.com/appium/java-client#drivers-support) 文章以了解当前驱动程序类实现的更多信息。
|
||||
|
||||
Follow the [Usage Examples](https://github.com/appium/java-client#usage-examples) article in order understand
|
||||
how to invoke Java client features from your test framework.
|
||||
按照 [使用示例](https://github.com/appium/java-client#usage-examples) 文章以了解
|
||||
如何从您的测试框架调用 Java 客户端功能。
|
||||
|
||||
Once you've managed to successfully run a test, you can read on for some [next steps](./next-steps.md) to explore.
|
||||
一旦您成功运行了一个测试,您可以继续阅读一些 [后续步骤](./next-steps.md) 以进行探索。
|
||||
@@ -2,36 +2,30 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Write a Test (JS)
|
||||
title: 编写测试 (JS)
|
||||
---
|
||||
|
||||
To write an Appium test in JavaScript (Node.js), we need to choose an Appium-compatible client
|
||||
library. The best-maintained library and the one the Appium team recommends using is
|
||||
[WebdriverIO](https://webdriver.io), so let's use that. Since we already have Appium installed we
|
||||
know our Node and NPM requirements are already satisfied. So just create a new project directory
|
||||
somewhere on your computer and then initialize a new Node.js project in it:
|
||||
要在 JavaScript (Node.js) 中编写 Appium 测试,我们需要选择一个与 Appium 兼容的客户端库。 维护最好的库,也是 Appium 团队推荐使用的,是 [WebdriverIO](https://webdriver.io),所以让我们使用它。 由于我们已经安装了 Appium,我们知道我们的 Node 和 NPM 已经满足要求。 所以在您的计算机上某个地方创建一个新的项目目录,然后在其中初始化一个新的 Node.js 项目:
|
||||
|
||||
```bash
|
||||
npm init
|
||||
```
|
||||
|
||||
It doesn't really matter what you put in the prompts, just so long as you end up with a valid
|
||||
`package.json`.
|
||||
提示中输入什么并不重要,只要最终得到一个有效的 `package.json`。
|
||||
|
||||
Now, install the `webdriverio` package via NPM:
|
||||
现在,通过 NPM 安装 `webdriverio` 包:
|
||||
|
||||
```bash
|
||||
npm i --save-dev webdriverio
|
||||
```
|
||||
|
||||
Once this is done, your `package.json` file should include a section like the following:
|
||||
完成后,您的 `package.json` 文件应该包含如下部分:
|
||||
|
||||
```json title="package.json"
|
||||
--8<-- "./sample-code/quickstarts/js/package.json"
|
||||
```
|
||||
|
||||
Now it's time to type up the test itself. Create a new file called `test.js` with the following
|
||||
contents:
|
||||
现在是编写测试本身的时候了。 创建一个名为 `test.js` 的新文件,内容如下:
|
||||
|
||||
```js title="test.js"
|
||||
--8<-- "./sample-code/quickstarts/js/test.js"
|
||||
@@ -40,38 +34,29 @@ contents:
|
||||
!!! note
|
||||
|
||||
```
|
||||
It's not within the scope of this guide to give a complete run-down on the WebdriverIO 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 excellent
|
||||
[WebdriverIO documentation](https://webdriver.io/docs/gettingstarted) for a fuller explanation
|
||||
of the various API commands you see and what their purpose is.
|
||||
这份指南的范围不包括对 WebdriverIO 客户端库或此处发生的一切进行完整说明,因此我们暂时不对代码本身进行详细解释。您可能需要特别阅读 Appium [Capabilities](../guides/caps.md),以及熟悉优秀的 [WebdriverIO 文档](https://webdriver.io/docs/gettingstarted) 以获得对您看到的各种 API 命令及其目的的更全面解释。
|
||||
```
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
The sample code is available from [GitHub Appium repository](https://github.com/appium/appium/tree/master/packages/appium/sample-code/quickstarts/js).
|
||||
示例代码可从 [GitHub Appium 仓库](https://github.com/appium/appium/tree/master/packages/appium/sample-code/quickstarts/js) 获取。
|
||||
```
|
||||
|
||||
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.
|
||||
2. Starting an Appium session on the built-in Android settings app.
|
||||
3. Finding the "Apps" list item and clicking it.
|
||||
4. Pausing for a moment purely for visual effect.
|
||||
5. Ending the Appium session.
|
||||
1. 定义一组"Capabilities"(参数)发送到 Appium 服务器,以便 Appium 知道您想要自动化什么。
|
||||
2. 在内置的 Android 设置应用上启动 Appium 会话。
|
||||
3. 查找"Apps"列表项并点击它。
|
||||
4. 暂停片刻纯粹为了视觉效果。
|
||||
5. 结束 Appium 会话。
|
||||
|
||||
That's it! Let's give it a try. Before you run the test, make sure that you have an Appium server
|
||||
running in another terminal session, otherwise you'll get an error about not being able to connect
|
||||
to one. Then, you can execute the script:
|
||||
就是这样! 让我们试试。 在运行测试之前,请确保在另一个终端会话中运行 Appium 服务器,否则您会收到无法连接的错误。 然后,您可以执行脚本:
|
||||
|
||||
```bash
|
||||
node test.js
|
||||
```
|
||||
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Apps" view before the
|
||||
app closes again.
|
||||
如果一切顺利,您将看到设置应用打开并导航到"Apps"视图,然后应用再次关闭。
|
||||
|
||||
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
|
||||
恭喜,您已经开始了 Appium 之旅! 继续阅读一些 [后续步骤](./next-steps.md) 以进行探索。
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Write a Test (Python)
|
||||
title: 编写测试 (Python)
|
||||
---
|
||||
|
||||
The [Appium Python Client](https://github.com/appium/python-client) is
|
||||
an official Appium client in Python, which is available via pypi under the [Appium-Python-Client](https://pypi.org/project/Appium-Python-Client/) package name.
|
||||
It inherits from the [Selenium Python Binding](https://pypi.org/project/selenium/),
|
||||
so installing the Appium Python Client includes the selenium binding.
|
||||
[Appium Python Client](https://github.com/appium/python-client) 是
|
||||
官方的 Python Appium 客户端,可通过 pypi 以 [Appium-Python-Client](https://pypi.org/project/Appium-Python-Client/) 包名获取。
|
||||
它继承自 [Selenium Python Binding](https://pypi.org/project/selenium/),
|
||||
因此安装 Appium Python Client 包括 selenium 绑定。
|
||||
|
||||
```bash
|
||||
pip install Appium-Python-Client
|
||||
```
|
||||
|
||||
This example uses Python's built-in `unittest` module, though you can use any Python test framework you want.
|
||||
The Appium Python client adds the `appium:` vendor prefix automatically.
|
||||
You usually do not need to worry about the prefix.
|
||||
此示例使用 Python 的内置 `unittest` 模块,您也可以使用任何您想要的 Python 测试框架。
|
||||
Appium Python 客户端自动添加 `appium:` 前缀。
|
||||
您通常不需要担心前缀。
|
||||
|
||||
```python title="test.py"
|
||||
--8<-- "./sample-code/quickstarts/py/test.py"
|
||||
@@ -25,39 +25,33 @@ You usually do not need to worry about the prefix.
|
||||
!!! note
|
||||
|
||||
```
|
||||
It's not within the scope of this guide to give a complete run-down on the Python client
|
||||
library or everything that's happening here, so we'll leave the code itself unexplained in detail for now.
|
||||
这份指南的范围不包括对 Python 客户端库或此处发生的一切进行完整说明,因此我们暂时不对代码本身进行详细解释。
|
||||
|
||||
- You may want to read up particularly on Appium [Capabilities](../guides/caps.md).
|
||||
- [functional test code](https://github.com/appium/python-client/tree/master/test/functional) in Python Client GitHub repository should help to find more working example.
|
||||
- [Documentation](https://appium.github.io/python-client-sphinx/) also helps to find methods
|
||||
defined in the Appium Python Client.
|
||||
- 您可能需要特别阅读 Appium [Capabilities](../guides/caps.md)。
|
||||
- Python Client GitHub 仓库中的 [功能测试代码](https://github.com/appium/python-client/tree/master/test/functional) 应该有助于找到更多工作示例。
|
||||
- [文档](https://appium.github.io/python-client-sphinx/) 也有助于找到 Appium Python Client 中定义的方法。
|
||||
```
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
The sample code is available from [GitHub Appium repository](https://github.com/appium/appium/tree/master/packages/appium/sample-code/quickstarts/py).
|
||||
示例代码可从 [GitHub Appium 仓库](https://github.com/appium/appium/tree/master/packages/appium/sample-code/quickstarts/py) 获取。
|
||||
```
|
||||
|
||||
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.
|
||||
2. Starting an Appium session on the built-in Android settings app.
|
||||
3. Finding the "Apps" list item and clicking it.
|
||||
4. Pausing for a moment purely for visual effect.
|
||||
5. Ending the Appium session.
|
||||
1. 定义一组"Capabilities"(参数)发送到 Appium 服务器,以便 Appium 知道您想要自动化什么。
|
||||
2. 在内置的 Android 设置应用上启动 Appium 会话。
|
||||
3. 查找"Apps"列表项并点击它。
|
||||
4. 暂停片刻纯粹为了视觉效果。
|
||||
5. 结束 Appium 会话。
|
||||
|
||||
That's it! Let's give it a try. Before you run the test, make sure that you have an Appium server
|
||||
running in another terminal session, otherwise you'll get an error about not being able to connect
|
||||
to one. Then, you can execute the script:
|
||||
就是这样! 让我们试试。 在运行测试之前,请确保在另一个终端会话中运行 Appium 服务器,否则您会收到无法连接的错误。 然后,您可以执行脚本:
|
||||
|
||||
```bash
|
||||
python test.py
|
||||
```
|
||||
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Apps" view before the
|
||||
app closes again.
|
||||
如果一切顺利,您将看到设置应用打开并导航到"Apps"视图,然后应用再次关闭。
|
||||
|
||||
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
|
||||
恭喜,您已经开始了 Appium 之旅! 继续阅读一些 [后续步骤](./next-steps.md) 以进行探索。
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
hide:
|
||||
- toc
|
||||
|
||||
title: Write a Test (Ruby)
|
||||
title: 编写测试 (Ruby)
|
||||
---
|
||||
|
||||
The [AppiumLib](https://github.com/appium/ruby_lib) and the [AppiumLibCore](https://github.com/appium/ruby_lib_core) (**recommended**) are official Appium client libraries in Ruby, which are available via gem under the [appium_lib](https://rubygems.org/gems/appium_lib) and the [appium_lib_core](https://rubygems.org/gems/appium_lib_core) package names. The appium_lib_core inherits from the Selenium Ruby Binding, and the appium_lib inherits from the appium_lib_core, so installing these libraries include the selenium binding. We recommend `appium_lib_core` if you need a less complex client-side solution. The `appium_lib` has some useful methods the core does not have, but for the cost of greater complexity and historical methods which may not work in the latest environment.
|
||||
[AppiumLib](https://github.com/appium/ruby_lib) 和 [AppiumLibCore](https://github.com/appium/ruby_lib_core)(**推荐**)是 Ruby 中的官方 Appium 客户端库,可通过 gem 以 [appium_lib](https://rubygems.org/gems/appium_lib) 和 [appium_lib_core](https://rubygems.org/gems/appium_lib_core) 包名获取。 appium_lib_core 继承自 Selenium Ruby Binding,而 appium_lib 继承自 appium_lib_core,因此安装这些库包括 selenium 绑定。 如果您需要一个不太复杂的客户端解决方案,我们推荐 `appium_lib_core`。 `appium_lib` 有一些核心没有的有用方法,但代价是更大的复杂性和可能在最新环境中不工作的历史方法。
|
||||
|
||||
As the first step, let's initialize a Gemfile to manage the dependency:
|
||||
作为第一步,让我们初始化一个 Gemfile 来管理依赖项:
|
||||
|
||||
```bash
|
||||
bundle init
|
||||
```
|
||||
|
||||
Then, you could add Appium Ruby Client dependency as below:
|
||||
然后,您可以如下添加 Appium Ruby Client 依赖项:
|
||||
|
||||
```bash
|
||||
bundle add appium_lib_core
|
||||
@@ -21,24 +21,24 @@ bundle add appium_lib_core
|
||||
# bundle add appium_lib
|
||||
```
|
||||
|
||||
Test code example below uses `test-unit` module, thus please run:
|
||||
下面的测试代码示例使用 `test-unit` 模块,因此请运行:
|
||||
|
||||
```bash
|
||||
bundle add test-unit
|
||||
```
|
||||
|
||||
Once these steps has done, your `Gemfile` file should include:
|
||||
一旦这些步骤完成,您的 `Gemfile` 文件应该包含:
|
||||
|
||||
```ruby title="Gemfile"
|
||||
--8<-- "./sample-code/quickstarts/rb/Gemfile"
|
||||
```
|
||||
|
||||
The `appium_lib_core` is the main part as an Appium client.
|
||||
`appium_lib` has various helper methods, but the driver instance was ordinary designed to be used as a global variable. It could causes an issue to handle the instance.
|
||||
`appium_lib_core` does not have such a global variable.
|
||||
`appium_lib_core` 是作为 Appium 客户端的主要部分。
|
||||
`appium_lib` 有各种辅助方法,但驱动程序实例通常被设计为全局变量使用。 它可能导致处理实例的问题。
|
||||
`appium_lib_core` 没有这样的全局变量。
|
||||
|
||||
This example is by the `appium_lib_core` with `test-unit` gem module.
|
||||
Tes code in `appium_lib` should be similar.
|
||||
此示例使用 `appium_lib_core` 和 `test-unit` gem 模块。
|
||||
在 `appium_lib` 中的测试代码应该类似。
|
||||
|
||||
```ruby title="test.rb"
|
||||
--8<-- "./sample-code/quickstarts/rb/test.rb"
|
||||
@@ -47,39 +47,34 @@ Tes code in `appium_lib` should be similar.
|
||||
!!! note
|
||||
|
||||
```
|
||||
It's not within the scope of this guide to give a complete run-down on the Ruby client
|
||||
library or everything that's happening here, so we'll leave the code itself unexplained in detail for now.
|
||||
这份指南的范围不包括对 Ruby 客户端库或此处发生的一切进行完整说明,因此我们暂时不对代码本身进行详细解释。
|
||||
|
||||
- You may want to read up particularly on Appium [Capabilities](../guides/caps.md).
|
||||
- [functional test code](https://github.com/appium/ruby_lib_core/tree/master/test/functional) in the appium_lib_core GitHub repository should help to find more working example.
|
||||
- Documentation [appium_lib_core](https://www.rubydoc.info/github/appium/ruby_lib_core) and [appium_lib](https://www.rubydoc.info/github/appium/ruby_lib) also helps to find available methods.
|
||||
- 您可能需要特别阅读 Appium [Capabilities](../guides/caps.md)。
|
||||
- appium_lib_core GitHub 仓库中的 [功能测试代码](https://github.com/appium/ruby_lib_core/tree/master/test/functional) 应该有助于找到更多工作示例。
|
||||
- 文档 [appium_lib_core](https://www.rubydoc.info/github/appium/ruby_lib_core) 和 [appium_lib](https://www.rubydoc.info/github/appium/ruby_lib) 也有助于找到可用方法。
|
||||
```
|
||||
|
||||
!!! note
|
||||
|
||||
```
|
||||
The sample code is available from [GitHub Appium repository](https://github.com/appium/appium/tree/master/packages/appium/sample-code/quickstarts/rb).
|
||||
示例代码可从 [GitHub Appium 仓库](https://github.com/appium/appium/tree/master/packages/appium/sample-code/quickstarts/rb) 获取。
|
||||
```
|
||||
|
||||
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.
|
||||
2. Starting an Appium session on the built-in Android settings app.
|
||||
3. Finding the "Apps" list item and clicking it.
|
||||
4. Pausing for a moment purely for visual effect.
|
||||
5. Ending the Appium session.
|
||||
1. 定义一组"Capabilities"(参数)发送到 Appium 服务器,以便 Appium 知道您想要自动化什么。
|
||||
2. 在内置的 Android 设置应用上启动 Appium 会话。
|
||||
3. 查找"Apps"列表项并点击它。
|
||||
4. 暂停片刻纯粹为了视觉效果。
|
||||
5. 结束 Appium 会话。
|
||||
|
||||
That's it! Let's give it a try. Before you run the test, make sure that you have an Appium server
|
||||
running in another terminal session, otherwise you'll get an error about not being able to connect
|
||||
to one. Then, you can execute the script:
|
||||
就是这样! 让我们试试。 在运行测试之前,请确保在另一个终端会话中运行 Appium 服务器,否则您会收到无法连接的错误。 然后,您可以执行脚本:
|
||||
|
||||
```bash
|
||||
# Please run "bundle install" first if your environment has not run the installation command yet.
|
||||
# 如果您的环境尚未运行安装命令,请先运行 "bundle install"。
|
||||
bundle exec ruby test.rb
|
||||
```
|
||||
|
||||
If all goes well, you'll see the Settings app open up and navigate to the "Apps" view before the
|
||||
app closes again.
|
||||
如果一切顺利,您将看到设置应用打开并导航到"Apps"视图,然后应用再次关闭。
|
||||
|
||||
Congratulations, you've started your Appium journey! Read on for some [next steps](./next-steps.md) to explore.
|
||||
恭喜,您已经开始了 Appium 之旅! 继续阅读一些 [后续步骤](./next-steps.md) 以进行探索。
|
||||
|
||||
@@ -8,8 +8,8 @@ title: Appium Protocol
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints used in Appium that are defined in the Appium extension of the
|
||||
W3C WebDriver protocol.
|
||||
The following is a list of endpoints supported in Appium, that are defined in the Appium extension
|
||||
of the W3C WebDriver protocol.
|
||||
|
||||
### getAppiumSessions
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ title: JSON Wire Protocol
|
||||
</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.
|
||||
endpoints supported in Appium.
|
||||
|
||||
### getSession
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ title: Mobile JSON Wire Protocol
|
||||
</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.
|
||||
endpoints supported in Appium.
|
||||
|
||||
### getRotation
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ title: Other Protocols
|
||||
}
|
||||
</style>
|
||||
|
||||
The following is a list of endpoints used in Appium that are defined in other protocols.
|
||||
The following is a list of endpoints supported in Appium that are defined in other protocols.
|
||||
|
||||
## Chromedriver Protocol
|
||||
|
||||
@@ -41,6 +41,441 @@ for a list of available methods and their parameters.
|
||||
|
||||
`any` - the result of executing the CDP method
|
||||
|
||||
## Compute Pressure Protocol
|
||||
|
||||
The [Compute Pressure protocol](https://www.w3.org/TR/compute-pressure/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### createVirtualPressureSource
|
||||
|
||||
```
|
||||
POST /session/:sessionId/pressuresource
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Create Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#create-virtual-pressure-source)
|
||||
|
||||
Creates a new virtual pressure source.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| <div style="width:6em">Name</div> | Description | Type | Default |
|
||||
| --------------------------------- | ------------------------------------------------------------- | ------- | ------- |
|
||||
| `type` | Type of pressure source to create | string | |
|
||||
| `supported?` | Whether the pressure source should be configured as supported | boolean | `true` |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### updateVirtualPressureSource
|
||||
|
||||
```
|
||||
POST /session/:sessionId/pressuresource/:pressureSourceType
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Update Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#update-virtual-pressure-source)
|
||||
|
||||
Updates the state of a virtual pressure source with the type identified by `:pressureSourceType`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| -------- | ----------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `sample` | Pressure state. Supported values are `nominal`, `fair`, `serious`, or `critical`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### deleteVirtualPressureSource
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/pressuresource/:pressureSourceType
|
||||
```
|
||||
|
||||
> Compute Pressure documentation: [Delete Virtual Pressure Source](https://www.w3.org/TR/compute-pressure/#delete-virtual-pressure-source)
|
||||
|
||||
Deletes the virtual pressure source with the type identified by `:pressureSourceType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Custom Handlers Protocol
|
||||
|
||||
The [Custom Handlers protocol](https://html.spec.whatwg.org/multipage/system-state.html#user-agent-automation)
|
||||
is an extension of the W3C WebDriver protocol, defined by the HTML Standard specification.
|
||||
|
||||
### setRPHRegistrationMode
|
||||
|
||||
```
|
||||
POST /session/:sessionId/custom-handlers/set-mode
|
||||
```
|
||||
|
||||
> Custom Handlers documentation: [Set RPH Registration Mode](https://html.spec.whatwg.org/multipage/system-state.html#user-agent-automation)
|
||||
|
||||
Sets the protocol handler automation mode, for processing registrations of custom protocol handlers.
|
||||
By default, this mode is set to `none`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| ------ | ------------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `mode` | Automation mode to set. Supported values are `autoAccept`, `autoReject`, or `none`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Device Posture Protocol
|
||||
|
||||
The [Device Posture protocol](https://www.w3.org/TR/device-posture/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### setDevicePosture
|
||||
|
||||
```
|
||||
POST /session/:sessionId/deviceposture
|
||||
```
|
||||
|
||||
> Device Posture documentation: [Set Device Posture](https://www.w3.org/TR/device-posture/#set-device-posture)
|
||||
|
||||
Sets the device posture, overriding the posture set by the device hardware.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| --------- | ------------------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `posture` | Posture to which the device should be set. Supported values are `continuous` or `folded`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### clearDevicePosture
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/deviceposture
|
||||
```
|
||||
|
||||
> Device Posture documentation: [Clear Device Posture](https://www.w3.org/TR/device-posture/#clear-device-posture)
|
||||
|
||||
Clears the previously set device posture, returning posture control back to the device hardware.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Federated Credential Management Protocol
|
||||
|
||||
The [Federated Credential Management protocol](https://www.w3.org/TR/fedcm-1) (FedCM) is an
|
||||
extension of the W3C WebDriver protocol. Clients can enable this protocol by using the
|
||||
[`fedcm:accounts`](https://www.w3.org/TR/fedcm-1/#webdriver-capability) capability.
|
||||
|
||||
### fedCMCancelDialog
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/canceldialog
|
||||
```
|
||||
|
||||
> FedCM documentation: [Cancel Dialog](https://www.w3.org/TR/fedcm-1/#webdriver-canceldialog)
|
||||
|
||||
Cancels the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMSelectAccount
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/selectaccount
|
||||
```
|
||||
|
||||
> FedCM documentation: [Select Account](https://www.w3.org/TR/fedcm-1/#webdriver-selectaccount)
|
||||
|
||||
Selects an account to use for the currently open FedCM dialog.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| -------------- | ------------------------------------------------------ | ------ |
|
||||
| `accountIndex` | Index of the account in the list of available accounts | number |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMClickDialogButton
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/clickdialogbutton
|
||||
```
|
||||
|
||||
> FedCM documentation: [Click Dialog Button](https://www.w3.org/TR/fedcm-1/#webdriver-clickdialogbutton)
|
||||
|
||||
Clicks a button in the currently open FedCM dialog.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| -------------- | ------------------------------------------------------------------------------------------------------------ | ------ |
|
||||
| `dialogButton` | Identifier of the button to click. Must be set to `ConfirmIdpLoginContinue`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMGetAccounts
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/accountlist
|
||||
```
|
||||
|
||||
> FedCM documentation: [Account List](https://www.w3.org/TR/fedcm-1/#webdriver-accountlist)
|
||||
|
||||
Retrieves all accounts that the user can select in the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`FedCMAccount[]` - an array of objects, where each object includes the following properties:
|
||||
|
||||
| <div style="width:10em">Name</div> | Description | Type |
|
||||
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `accountId` | Account ID | string |
|
||||
| `email` | Account email | string |
|
||||
| `name` | Account name | string |
|
||||
| `givenName?` | Account given name | string |
|
||||
| `pictureUrl?` | Account picture URL | string |
|
||||
| `idpConfigUrl` | URL of the identity provider configuration file | string |
|
||||
| `loginState` | Login state. Set to `SignUp` if the account is not connected, otherwise `SignIn`. | string |
|
||||
| `termsOfServiceUrl?` | Terms of Service URL of the website, if `loginState` is set to `SignUp` | string |
|
||||
| `privacyPolicyUrl?` | Privacy Policy URL of the website, if `loginState` is set to `SignUp` | string |
|
||||
|
||||
### fedCMGetTitle
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/gettitle
|
||||
```
|
||||
|
||||
> FedCM documentation: [Get Title](https://www.w3.org/TR/fedcm-1/#webdriver-gettitle)
|
||||
|
||||
Retrieves the title and subtitle (if one exists) of the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`FedCMDialogTitle` - an object with the following properties:
|
||||
|
||||
| Name | Description | Type |
|
||||
| ----------- | --------------- | ------ |
|
||||
| `title` | Dialog title | string |
|
||||
| `subtitle?` | Dialog subtitle | string |
|
||||
|
||||
### fedCMGetDialogType
|
||||
|
||||
```
|
||||
GET /session/:sessionId/fedcm/getdialogtype
|
||||
```
|
||||
|
||||
> FedCM documentation: [Get Dialog Type](https://www.w3.org/TR/fedcm-1/#webdriver-getdialogtype)
|
||||
|
||||
Retrieves the type of the currently open FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - can be set to `AutoReauthn`, `AccountChooser`, or `ConfirmIdpLogin`
|
||||
|
||||
### fedCMSetDelayEnabled
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/setdelayenabled
|
||||
```
|
||||
|
||||
> FedCM documentation: [Set Delay Enabled](https://www.w3.org/TR/fedcm-1/#webdriver-setdelayenabled)
|
||||
|
||||
Sets the state of the promise rejection delay, which is used to prevent information leakage about
|
||||
the logged in state of the user.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| --------- | --------------------------------------------- | ------- |
|
||||
| `enabled` | Whether to enable the promise rejection delay | boolean |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### fedCMResetCooldown
|
||||
|
||||
```
|
||||
POST /session/:sessionId/fedcm/resetcooldown
|
||||
```
|
||||
|
||||
> FedCM documentation: [Reset Cooldown](https://www.w3.org/TR/fedcm-1/#webdriver-resetcooldown)
|
||||
|
||||
Resets the cooldown delay used after dismissing a FedCM dialog.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Generic Sensor Protocol
|
||||
|
||||
The [Generic Sensor protocol](https://www.w3.org/TR/generic-sensor/) is an extension of the W3C
|
||||
WebDriver protocol.
|
||||
|
||||
### createVirtualSensor
|
||||
|
||||
```
|
||||
POST /session/:sessionId/sensor
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Create Virtual Sensor](https://www.w3.org/TR/generic-sensor/#create-virtual-sensor-command)
|
||||
|
||||
Creates a new virtual sensor.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| <div style="width:12em">Name</div> | Description | Type | Default |
|
||||
| ---------------------------------- | ---------------------------------------------------- | ------- | ------- |
|
||||
| `type` | Type of sensor to create | string | |
|
||||
| `connected?` | Whether the sensor should be configured as connected | boolean | `true` |
|
||||
| `maxSamplingFrequency?` | Maximum sensor sampling frequency | number | |
|
||||
| `minSamplingFrequency?` | Minimum sensor sampling frequency | number | |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### getVirtualSensorInfo
|
||||
|
||||
```
|
||||
GET /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Get Virtual Sensor Information](https://www.w3.org/TR/generic-sensor/#get-virtual-sensor-information-command)
|
||||
|
||||
Retrieves information about the virtual sensor with the type identified by `:sensorType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`GetVirtualSensorInfoResponse` - an object containing the `requestedSamplingFrequency` key, whose
|
||||
value is the requested sampling frequency of the sensor type
|
||||
|
||||
### updateVirtualSensorReading
|
||||
|
||||
```
|
||||
POST /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Update Virtual Sensor Reading](https://www.w3.org/TR/generic-sensor/#update-virtual-sensor-reading-command)
|
||||
|
||||
Updates the virtual sensor with the type identified by `:sensorType` with a new reading.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| --------- | ---------------------------------------------------------------- | ------ |
|
||||
| `reading` | Object containing reading properties specific to the sensor type | object |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
### deleteVirtualSensor
|
||||
|
||||
```
|
||||
DELETE /session/:sessionId/sensor/:sensorType
|
||||
```
|
||||
|
||||
> Generic Sensor documentation: [Delete Virtual Sensor](https://www.w3.org/TR/generic-sensor/#delete-virtual-sensor-command)
|
||||
|
||||
Deletes the virtual sensor with the type identified by `:sensorType`.
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Permissions Protocol
|
||||
|
||||
The [Permissions protocol](https://www.w3.org/TR/permissions/) is an extension of the W3C WebDriver
|
||||
protocol.
|
||||
|
||||
### setPermissions
|
||||
|
||||
```
|
||||
POST /session/:sessionId/permissions
|
||||
```
|
||||
|
||||
> Permissions documentation: [Set Permission](https://www.w3.org/TR/permissions/#webdriver-command-set-permission)
|
||||
|
||||
Simulates user modification of the permission state of a PermissionDescriptor (a permissible feature
|
||||
with optional additional properties).
|
||||
|
||||
#### Parameters
|
||||
|
||||
| <div style="width:6em">Name</div> | Description | Type |
|
||||
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `descriptor` | Object specifying the feature name in its `name` key, along with any other keys for additional properties | object |
|
||||
| `state` | New permission state for this descriptor. Supported values are: `granted`, `denied`, or `prompt`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Reporting Protocol
|
||||
|
||||
The [Reporting protocol](https://www.w3.org/TR/reporting-1/) is an extension of the W3C WebDriver
|
||||
protocol.
|
||||
|
||||
### generateTestReport
|
||||
|
||||
```
|
||||
POST /session/:sessionId/reporting/generate_test_report
|
||||
```
|
||||
|
||||
> Reporting documentation: [Generate Test Report](https://www.w3.org/TR/reporting-1/#generate-test-report-command)
|
||||
|
||||
Simulates the generation of a test report, which can be retrieved by registered reporting observers.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type | Default |
|
||||
| --------- | ------------------------------------------ | ------ | --------- |
|
||||
| `message` | Message displayed in the report | string | |
|
||||
| `group?` | Destination group to deliver the report to | string | `default` |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Secure Payment Confirmation Protocol
|
||||
|
||||
The [Secure Payment Confirmation protocol](https://www.w3.org/TR/secure-payment-confirmation) (SPC)
|
||||
is an extension of the W3C WebDriver protocol.
|
||||
|
||||
### setSPCTransactionMode
|
||||
|
||||
```
|
||||
POST /session/:sessionId/secure-payment-confirmation/set-mode
|
||||
```
|
||||
|
||||
> SPC documentation: [Set SPC Transaction Mode](https://www.w3.org/TR/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode)
|
||||
|
||||
Sets the transaction automation mode, for automated handling of transaction confirmation prompts.
|
||||
By default, this mode is set to `none`.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description | Type |
|
||||
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
|
||||
| `mode` | Automation mode to set. Supported values are `autoAccept`, `autoChooseToAuthAnotherWay`, `autoReject`, or `autoOptOut`. | string |
|
||||
|
||||
#### Response
|
||||
|
||||
`null`
|
||||
|
||||
## Selenium Protocol
|
||||
|
||||
The Selenium protocol is an extension of the W3C WebDriver protocol, supported in Appium clients
|
||||
@@ -92,7 +527,9 @@ Retrieves the available log types that can be used to call the [`getLog`](#getlo
|
||||
## Web Authentication Protocol
|
||||
|
||||
The [Web Authentication protocol](https://w3c.github.io/webauthn/) (WebAuthn) is an extension of
|
||||
the W3C WebDriver protocol.
|
||||
the W3C WebDriver protocol. Clients can enable this protocol by using the
|
||||
[`webauthn:virtualAuthenticators`](https://w3c.github.io/webauthn/#sctn-automation-webdriver-capability)
|
||||
capability.
|
||||
|
||||
### addVirtualAuthenticator
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ title: WebDriver Protocol
|
||||
</style>
|
||||
|
||||
The following is a list of [W3C WebDriver protocol](https://w3c.github.io/webdriver/) endpoints
|
||||
used in Appium.
|
||||
supported in Appium.
|
||||
|
||||
!!! info
|
||||
|
||||
@@ -1070,3 +1070,45 @@ identified by `:elementId`.
|
||||
#### Response
|
||||
|
||||
`string` - a base64-encoded PNG image
|
||||
|
||||
### printPage
|
||||
|
||||
```
|
||||
POST /session/:sessionId/print
|
||||
```
|
||||
|
||||
> WebDriver documentation: [Print Page](https://w3c.github.io/webdriver/#print-page)
|
||||
|
||||
Prints the page by rendering it as a paginated PDF document.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| <div style="width:7em">Name</div> | Description | <div style="width:9em">Type</div> | Default |
|
||||
| --------------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------- | ---------- |
|
||||
| `orientation?` | Page orientation. Supported values are `portrait` or `landscape`. | string | `portrait` |
|
||||
| `scale?` | Page scale. Supported values are in the range `[0.1, 2]`. | number | `1` |
|
||||
| `background?` | Whether to include background images | boolean | `false` |
|
||||
| `page?` | Object specifying the page width and height | [`PrintPageSize`](#printpagesize) | `{}` |
|
||||
| `margin?` | Object specifying the page margins | [`PrintPageMargins`](#printpagemargins) | `{}` |
|
||||
| `shrinkToFit?` | Whether to resize page contents to match `PrintPageSize.width` | boolean | `true` |
|
||||
| `pageRanges?` | Array of pages to be printed, for example, `[1, 4, '8-9']` | array | `[]` |
|
||||
|
||||
##### `PrintPageSize`
|
||||
|
||||
| Name | Description | Type | Default |
|
||||
| --------- | -------------------------------------------------------------------------------------------- | ------ | ------- |
|
||||
| `width?` | Page width. Must be greater than or equal to `(2.54 / 72)`. | number | `21.59` |
|
||||
| `height?` | Page height. Must be greater than or equal to `(2.54 / 72)`. | number | `27.94` |
|
||||
|
||||
##### `PrintPageMargins`
|
||||
|
||||
| Name | Description | Type | Default |
|
||||
| --------- | ----------------------------------------------------------------------------------------- | ------ | ------- |
|
||||
| `top?` | Page top margin. Must be greater than or equal to `0`. | number | `1` |
|
||||
| `bottom?` | Page bottom margin. Must be greater than or equal to `0`. | number | `1` |
|
||||
| `left?` | Page left margin. Must be greater than or equal to `0`. | number | `1` |
|
||||
| `right?` | Page right margin. Must be greater than or equal to `0`. | number | `1` |
|
||||
|
||||
#### Response
|
||||
|
||||
`string` - a base64-encoded PDF document
|
||||
|
||||
@@ -21,7 +21,7 @@ mentioned below.
|
||||
Installs the following extensions for browser webview testing:
|
||||
|
||||
- Drivers: `safari`[^1], `gecko`, `chromium`
|
||||
- Plugins: `images`
|
||||
- Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
@@ -34,7 +34,7 @@ appium setup browser
|
||||
Installs the following extensions for desktop application testing:
|
||||
|
||||
- Drivers: `mac2`[^1], `windows`[^2]
|
||||
- Plugins: `images`
|
||||
- Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
@@ -47,7 +47,7 @@ appium setup desktop
|
||||
Installs the following extensions for mobile testing:
|
||||
|
||||
- Drivers: `uiautomator2`, `xcuitest`[^1], `espresso`
|
||||
- Plugins: `images`
|
||||
- Plugins: `images`, `inspector`
|
||||
|
||||
#### Usage
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ const DRIVERS_ONLY_WINDOWS = ['windows'];
|
||||
/**
|
||||
* Plugin names listed in KNOWN_PLUGINS to install by default.
|
||||
*/
|
||||
export const DEFAULT_PLUGINS = ['images'];
|
||||
export const DEFAULT_PLUGINS = ['images', 'inspector'];
|
||||
|
||||
/**
|
||||
* Return a list of drivers available for current host platform.
|
||||
|
||||
@@ -118,7 +118,7 @@ function executeMethodMapToCommandsInfo(emm: ExecuteMethodMap<any>): RestMethods
|
||||
const result: RestMethodsToCommandsMap = {};
|
||||
for (const [name, info] of _.toPairs(emm)) {
|
||||
result[name] = {
|
||||
command: info.command,
|
||||
command: info.command as string,
|
||||
deprecated: info.deprecated,
|
||||
info: info.info,
|
||||
params: toRestCommandParams(info.params),
|
||||
|
||||
@@ -27,7 +27,7 @@ import {
|
||||
} from './config';
|
||||
import {readConfigFile} from './config-file';
|
||||
import {loadExtensions, getActivePlugins, getActiveDrivers} from './extension';
|
||||
import {SERVER_SUBCOMMAND, LONG_STACKTRACE_LIMIT} from './constants';
|
||||
import {SERVER_SUBCOMMAND, LONG_STACKTRACE_LIMIT, BIDI_BASE_PATH} from './constants';
|
||||
import registerNode from './grid-register';
|
||||
import {getDefaultsForSchema, validate as validateSchema} from './schema/schema';
|
||||
import {
|
||||
@@ -400,6 +400,7 @@ async function main(args) {
|
||||
extraMethodMap,
|
||||
cliArgs: parsedArgs,
|
||||
};
|
||||
const normalizedBasePath = normalizeBasePath(parsedArgs.basePath);
|
||||
for (const timeoutArgName of ['keepAliveTimeout', 'requestTimeout']) {
|
||||
if (_.isInteger(parsedArgs[timeoutArgName])) {
|
||||
serverOpts[timeoutArgName] = parsedArgs[timeoutArgName] * 1000;
|
||||
@@ -411,8 +412,9 @@ async function main(args) {
|
||||
bidiServer.on('error', appiumDriver.onBidiServerError.bind(appiumDriver));
|
||||
try {
|
||||
server = await baseServer(serverOpts);
|
||||
server.addWebSocketHandler('/bidi', bidiServer);
|
||||
server.addWebSocketHandler('/bidi/:sessionId', bidiServer);
|
||||
const bidiBasePath = `${normalizedBasePath}${BIDI_BASE_PATH}`;
|
||||
server.addWebSocketHandler(bidiBasePath, bidiServer);
|
||||
server.addWebSocketHandler(`${bidiBasePath}/:sessionId`, bidiServer);
|
||||
} catch (err) {
|
||||
logger.error(
|
||||
`Could not configure Appium server. It's possible that a driver or plugin tried ` +
|
||||
@@ -438,7 +440,7 @@ async function main(args) {
|
||||
parsedArgs.nodeconfig,
|
||||
parsedArgs.address,
|
||||
parsedArgs.port,
|
||||
parsedArgs.basePath,
|
||||
normalizedBasePath,
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
@@ -464,7 +466,7 @@ async function main(args) {
|
||||
const protocol = server.isSecure() ? 'https' : 'http';
|
||||
const address = net.isIPv6(parsedArgs.address) ? `[${parsedArgs.address}]` : parsedArgs.address;
|
||||
logServerAddress(
|
||||
`${protocol}://${address}:${parsedArgs.port}${normalizeBasePath(parsedArgs.basePath)}`,
|
||||
`${protocol}://${address}:${parsedArgs.port}${normalizedBasePath}`,
|
||||
);
|
||||
|
||||
driverConfig.print();
|
||||
|
||||
@@ -484,11 +484,6 @@ export function isBroadcastIp(address) {
|
||||
* @typedef {import('@appium/types').ConstraintsToCaps<C>} ConstraintsToCaps
|
||||
*/
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @typedef {import('type-fest').StringKeyOf<T>} StringKeyOf
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {import('@appium/types').Constraints} Constraints
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "appium",
|
||||
"version": "3.0.2",
|
||||
"version": "3.1.0",
|
||||
"description": "Automation for Apps.",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -60,32 +60,32 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/base-driver": "^10.0.1",
|
||||
"@appium/base-plugin": "^3.0.2",
|
||||
"@appium/docutils": "^2.1.0",
|
||||
"@appium/logger": "^2.0.1",
|
||||
"@appium/base-driver": "^10.1.0",
|
||||
"@appium/base-plugin": "^3.0.3",
|
||||
"@appium/docutils": "^2.1.1",
|
||||
"@appium/logger": "^2.0.2",
|
||||
"@appium/schema": "^1.0.0",
|
||||
"@appium/support": "^7.0.1",
|
||||
"@appium/types": "^1.0.1",
|
||||
"@appium/support": "^7.0.2",
|
||||
"@appium/types": "^1.1.0",
|
||||
"@sidvind/better-ajv-errors": "4.0.0",
|
||||
"ajv": "8.17.1",
|
||||
"ajv-formats": "3.0.1",
|
||||
"argparse": "2.0.1",
|
||||
"async-lock": "1.4.1",
|
||||
"asyncbox": "3.0.0",
|
||||
"axios": "1.11.0",
|
||||
"axios": "1.12.2",
|
||||
"bluebird": "3.7.2",
|
||||
"lilconfig": "3.1.3",
|
||||
"lodash": "4.17.21",
|
||||
"lru-cache": "11.2.1",
|
||||
"lru-cache": "11.2.2",
|
||||
"ora": "5.4.1",
|
||||
"package-changed": "3.0.0",
|
||||
"resolve-from": "5.0.0",
|
||||
"semver": "7.7.2",
|
||||
"semver": "7.7.3",
|
||||
"source-map-support": "0.5.21",
|
||||
"teen_process": "3.0.1",
|
||||
"type-fest": "4.41.0",
|
||||
"winston": "3.17.0",
|
||||
"type-fest": "5.0.1",
|
||||
"winston": "3.18.3",
|
||||
"wrap-ansi": "7.0.0",
|
||||
"ws": "8.18.3",
|
||||
"yaml": "2.8.1"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"webdriverio": "9.19.2"
|
||||
"webdriverio": "9.20.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,14 +111,9 @@ describe('Driver CLI', function () {
|
||||
});
|
||||
|
||||
it('should show updates for installed drivers with --updates', async function () {
|
||||
if (process.env.CI) {
|
||||
// FIXME XXX this test won't work until multiple versions of fake driver have been
|
||||
// published which support appium 3
|
||||
return this.skip();
|
||||
}
|
||||
|
||||
if (system.isWindows()) {
|
||||
// TODO figure out why this isn't working on windows
|
||||
// TODO: Windows path handling may need fixes in npm exec or extension command parsing
|
||||
return this.skip();
|
||||
}
|
||||
const versions = /** @type {string[]} */ (
|
||||
@@ -143,7 +138,10 @@ describe('Driver CLI', function () {
|
||||
/** @type {Record<string,import('appium/lib/cli/extension-command').InstalledExtensionListData>} */ (
|
||||
await runList(['--updates'])
|
||||
);
|
||||
const updateVersion = String(fake.updateVersion || fake.unsafeUpdateVersion);
|
||||
const updateVersion = fake.updateVersion || fake.unsafeUpdateVersion;
|
||||
if (!updateVersion) {
|
||||
throw new Error(`No update version found. Expected an update from ${penultimateFakeDriverVersionAsOfRightNow} to a newer version, but got null. This might indicate the update check is not working properly.`);
|
||||
}
|
||||
util.compareVersions(
|
||||
String(updateVersion),
|
||||
'>',
|
||||
|
||||
@@ -641,6 +641,39 @@ describe('FakeDriver via HTTP', function () {
|
||||
result.should.eql('this is from bidi');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Bidi protocol with base path', function () {
|
||||
const basePath = '/wd/hub';
|
||||
withServer({basePath});
|
||||
const capabilities = {...caps, webSocketUrl: true, 'appium:runClock': true};
|
||||
/** @type import('webdriverio').Browser **/
|
||||
let driver;
|
||||
|
||||
beforeEach(async function () {
|
||||
driver = await wdio({...wdOpts, path: basePath, capabilities});
|
||||
});
|
||||
|
||||
afterEach(async function () {
|
||||
if (driver) {
|
||||
await driver.deleteSession();
|
||||
}
|
||||
});
|
||||
|
||||
it('should respond with bidi specific capability when a driver supports it', async function () {
|
||||
should.exist(driver.capabilities.webSocketUrl);
|
||||
});
|
||||
|
||||
it('should interpret the bidi protocol and let the driver handle it by command', async function () {
|
||||
should.not.exist(await driver.getUrl());
|
||||
|
||||
await driver.browsingContextNavigate({
|
||||
context: 'foo',
|
||||
url: 'https://appium.io',
|
||||
wait: 'complete',
|
||||
});
|
||||
await driver.getUrl().should.eventually.eql('https://appium.io');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Bidi over SSL', function () {
|
||||
|
||||
@@ -121,7 +121,7 @@ async function _runAppiumJson(appiumHome, args) {
|
||||
|
||||
/**
|
||||
* Runs the `appium` executable with the given args in JSON mode.
|
||||
* Will reject with the contents of `STDOUT` (which were to be pasred) if parsing into JSON fails.
|
||||
* Will reject with the contents of `STDOUT` (which were to be parsed) if parsing into JSON fails.
|
||||
*
|
||||
* The caller must wrap the call (in parens) with a docstring containing a return type.
|
||||
* i.e., add `@type {MyType}` tag.
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ import _ from 'lodash';
|
||||
import { AppiumConfigJsonSchema } from '@appium/schema';
|
||||
|
||||
// this must be a `require` because babel will not compile `node_modules`
|
||||
// TOOD: consider just copying this into fixtures so we can make it ESM
|
||||
// TODO: consider just copying this into fixtures so we can make it ESM
|
||||
const {default: fakeDriverSchema} = require('@appium/fake-driver/build/lib/fake-driver-schema');
|
||||
|
||||
const schema = _.cloneDeep(AppiumConfigJsonSchema);
|
||||
|
||||
@@ -549,7 +549,7 @@ describe('Manifest', function () {
|
||||
expect(manifest.getExtensionData(DRIVER_TYPE)).to.have.property('myDriver');
|
||||
});
|
||||
|
||||
describe('when the underyling implementation emits "error"', function () {
|
||||
describe('when the underlying implementation emits "error"', function () {
|
||||
beforeEach(function () {
|
||||
// @ts-expect-error
|
||||
MockGlob.callsFake(() => {
|
||||
|
||||
@@ -3,6 +3,21 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [10.1.0](https://github.com/appium/appium/compare/@appium/base-driver@10.0.1...@appium/base-driver@10.1.0) (2025-10-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add 21 WebDriver extension endpoints ([#21577](https://github.com/appium/appium/issues/21577)) ([7f906fc](https://github.com/appium/appium/commit/7f906fcf9a0dd84f348b0b3a79da818281f21835))
|
||||
* add W3C printPage endpoint ([#21576](https://github.com/appium/appium/issues/21576)) ([cbea4f2](https://github.com/appium/appium/commit/cbea4f2e97d2d291bd67fd98359b37caab1b21fa))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **base-driver,relaxed-caps-plugin,types:** add missing W3C caps ([#21642](https://github.com/appium/appium/issues/21642)) ([e6635b7](https://github.com/appium/appium/commit/e6635b737d0f42d8fd38c3d8bea70067d2e7c87a))
|
||||
|
||||
|
||||
|
||||
## [10.0.1](https://github.com/appium/appium/compare/@appium/base-driver@10.0.0...@appium/base-driver@10.0.1) (2025-09-09)
|
||||
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ GET | `session/{sessionId}/alert_text` | G
|
||||
POST | `session/{sessionId}/alert_text` | Sends keystrokes to the currently displayed dialog
|
||||
POST | `session/{sessionId}/accept_alert` | Accepts the currently displayed alert dialog.
|
||||
POST | `session/{sessionId}/dismiss_alert` | Dismisses the currently displayed alert dialog.
|
||||
POST | `session/{sessionId}/moveto` | Move the pointer by an offset of the specificed element.
|
||||
POST | `session/{sessionId}/moveto` | Move the pointer by an offset of the specified element.
|
||||
POST | `session/{sessionId}/click` | Click on the current pointer position.
|
||||
POST | `session/{sessionId}/touch/click` | Single tap on the touch enabled device.
|
||||
POST | `session/{sessionId}/touch/down` | Finger down on the screen.
|
||||
@@ -112,14 +112,14 @@ POST | `session/{sessionId}/appium/device/is_locked` | C
|
||||
POST | `session/{sessionId}/appium/start_recording_screen` | start recording the screen.
|
||||
POST | `session/{sessionId}/appium/stop_recording_screen` | stop recording the screen.
|
||||
POST | `session/{sessionId}/appium/performanceData/types` | returns the information types of the system state which is supported to read as like cpu, memory, network traffic, and battery.
|
||||
POST | `session/{sessionId}/appium/getPerformanceData` | returns the information of the system state which is supported to read as like cpu, memory, network traffic, and battery.
|
||||
POST | `session/{sessionId}/appium/getPerformanceData` | returns the information of the system state which is supported to read as like cpu, memory, network traffic, and battery.
|
||||
POST | `session/{sessionId}/appium/device/press_keycode` | Press a particular key code on the device.
|
||||
POST | `session/{sessionId}/appium/device/long_press_keycode` | Press and hold a particular key code on the device.
|
||||
POST | `session/{sessionId}/appium/device/keyevent` | Send a key code to the device.
|
||||
GET | `session/{sessionId}/appium/device/current_activity` | Retrieve the current activity running on the device.
|
||||
GET | `session/{sessionId}/appium/device/current_package` | Retrieve the current package running on the device.
|
||||
POST | `session/{sessionId}/appium/device/install_app` | Install the given app onto the device.
|
||||
POST | `session/{sessionId}/appium/device/remove_app` | Remote an app from the device.
|
||||
POST | `session/{sessionId}/appium/device/remove_app` | Remove an app from the device.
|
||||
POST | `session/{sessionId}/appium/device/app_installed` | Check whether the specified app is installed on the device.
|
||||
POST | `session/{sessionId}/appium/device/hide_keyboard` | Hide the soft keyboard.
|
||||
GET | `session/{sessionId}/appium/device/is_keyboard_shown` | Whether or not the soft keyboard is shown.
|
||||
|
||||
@@ -6,7 +6,7 @@ import type {
|
||||
StandardCapabilities,
|
||||
} from '@appium/types';
|
||||
import type {
|
||||
StringKeyOf,
|
||||
KeyAsString,
|
||||
MergeExclusive,
|
||||
} from 'type-fest';
|
||||
import _ from 'lodash';
|
||||
@@ -112,7 +112,7 @@ export function validateCaps<C extends Constraints>(
|
||||
|
||||
/**
|
||||
* Standard, non-prefixed capabilities
|
||||
* @see https://www.w3.org/TR/webdriver/#dfn-table-of-standard-capabilities)
|
||||
* @see https://www.w3.org/TR/webdriver2/#dfn-table-of-standard-capabilities)
|
||||
*/
|
||||
export const STANDARD_CAPS = Object.freeze(
|
||||
new Set(
|
||||
@@ -125,9 +125,11 @@ export const STANDARD_CAPS = Object.freeze(
|
||||
'proxy',
|
||||
'setWindowRect',
|
||||
'timeouts',
|
||||
'strictFileInteractability',
|
||||
'unhandledPromptBehavior',
|
||||
'userAgent',
|
||||
'webSocketUrl',
|
||||
]) as StringKeyOf<StandardCapabilities>[]
|
||||
]) as KeyAsString<StandardCapabilities>[]
|
||||
)
|
||||
);
|
||||
|
||||
@@ -155,7 +157,7 @@ export function stripAppiumPrefixes<C extends Constraints>(caps: NSCapabilities<
|
||||
|
||||
// Strip out the 'appium:' prefix
|
||||
for (const prefixedCap of prefixedCaps) {
|
||||
const strippedCapName = prefixedCap.substring(APPIUM_VENDOR_PREFIX.length) as StringKeyOf<Capabilities<C>>;
|
||||
const strippedCapName = prefixedCap.substring(APPIUM_VENDOR_PREFIX.length) as KeyAsString<Capabilities<C>>;
|
||||
|
||||
// If it's standard capability that was prefixed, add it to an array of incorrectly prefixed capabilities
|
||||
if (isStandardCap(strippedCapName)) {
|
||||
|
||||
@@ -59,13 +59,13 @@ process.on('exit', () => {
|
||||
});
|
||||
|
||||
/**
|
||||
* Perform inital application package configuration
|
||||
* Perform initial application package configuration
|
||||
* to prepare it for the further consumption by a driver:
|
||||
*
|
||||
* - Manages caching logic
|
||||
* - Downloads the app from a remote URL to the local filesystem
|
||||
* - Determines package name
|
||||
* - Checks basic requiremenets on the application package
|
||||
* - Checks basic requirements on the application package
|
||||
*
|
||||
* @param {string} app
|
||||
* @param {string|string[]|import('@appium/types').ConfigureAppOptions} options
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import _ from 'lodash';
|
||||
|
||||
/**
|
||||
* Determine whether the given agument is valid
|
||||
* Determine whether the given argument is valid
|
||||
* W3C capabilities instance.
|
||||
*
|
||||
* @param {any} caps
|
||||
@@ -59,7 +59,7 @@ export function fixCaps(oldCaps, desiredCapConstraints, log) {
|
||||
}
|
||||
|
||||
// int capabilities are often sent in as strings by frameworks
|
||||
let intCaps = /** @type {import('type-fest').StringKeyOf<typeof caps>[]} */ (
|
||||
let intCaps = /** @type {import('type-fest').KeyAsString<typeof caps>[]} */ (
|
||||
_.keys(_.pickBy(desiredCapConstraints, (k) => k.isNumber === true))
|
||||
);
|
||||
for (let cap of intCaps) {
|
||||
|
||||
@@ -16,14 +16,8 @@ const COMMAND_NAMES_CACHE = new LRUCache({
|
||||
*/
|
||||
export const METHOD_MAP = /** @type {const} */ ({
|
||||
|
||||
//
|
||||
// W3C WebDriver
|
||||
// https://www.w3.org/TR/webdriver1/
|
||||
// #region W3C WebDriver
|
||||
// https://www.w3.org/TR/webdriver2/
|
||||
//
|
||||
'/status': {
|
||||
GET: {command: 'getStatus'},
|
||||
},
|
||||
'/session': {
|
||||
POST: {
|
||||
command: 'createSession',
|
||||
@@ -33,10 +27,13 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
'/session/:sessionId': {
|
||||
// TODO: Decide on the future of this route later
|
||||
// TODO: JSONWP route, remove in the future
|
||||
GET: {command: 'getSession', deprecated: true},
|
||||
DELETE: {command: 'deleteSession'},
|
||||
},
|
||||
'/status': {
|
||||
GET: {command: 'getStatus'},
|
||||
},
|
||||
'/session/:sessionId/timeouts': {
|
||||
GET: {command: 'getTimeouts'},
|
||||
POST: {
|
||||
@@ -46,9 +43,6 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/window/handles': {
|
||||
GET: {command: 'getWindowHandles'},
|
||||
},
|
||||
'/session/:sessionId/url': {
|
||||
GET: {command: 'getUrl'},
|
||||
POST: {command: 'setUrl', payloadParams: {required: ['url']}},
|
||||
@@ -62,15 +56,8 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
'/session/:sessionId/refresh': {
|
||||
POST: {command: 'refresh'},
|
||||
},
|
||||
|
||||
'/session/:sessionId/screenshot': {
|
||||
GET: {command: 'getScreenshot'},
|
||||
},
|
||||
'/session/:sessionId/frame': {
|
||||
POST: {command: 'setFrame', payloadParams: {required: ['id']}},
|
||||
},
|
||||
'/session/:sessionId/frame/parent': {
|
||||
POST: {command: 'switchToParentFrame'},
|
||||
'/session/:sessionId/title': {
|
||||
GET: {command: 'title'},
|
||||
},
|
||||
'/session/:sessionId/window': {
|
||||
GET: {command: 'getWindowHandle'},
|
||||
@@ -82,6 +69,25 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
DELETE: {command: 'closeWindow'},
|
||||
},
|
||||
'/session/:sessionId/window/handles': {
|
||||
GET: {command: 'getWindowHandles'},
|
||||
},
|
||||
'/session/:sessionId/window/new': {
|
||||
POST: {command: 'createNewWindow', payloadParams: {optional: ['type']}},
|
||||
},
|
||||
'/session/:sessionId/frame': {
|
||||
POST: {command: 'setFrame', payloadParams: {required: ['id']}},
|
||||
},
|
||||
'/session/:sessionId/frame/parent': {
|
||||
POST: {command: 'switchToParentFrame'},
|
||||
},
|
||||
'/session/:sessionId/window/rect': {
|
||||
GET: {command: 'getWindowRect'},
|
||||
POST: {
|
||||
command: 'setWindowRect',
|
||||
payloadParams: {optional: ['x', 'y', 'width', 'height']},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/window/maximize': {
|
||||
POST: {command: 'maximizeWindow'},
|
||||
},
|
||||
@@ -91,23 +97,11 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
'/session/:sessionId/window/fullscreen': {
|
||||
POST: {command: 'fullScreenWindow'},
|
||||
},
|
||||
'/session/:sessionId/window/new': {
|
||||
POST: {command: 'createNewWindow', payloadParams: {optional: ['type']}},
|
||||
'/session/:sessionId/element/active': {
|
||||
GET: {command: 'active'},
|
||||
},
|
||||
'/session/:sessionId/cookie': {
|
||||
GET: {command: 'getCookies'},
|
||||
POST: {command: 'setCookie', payloadParams: {required: ['cookie']}},
|
||||
DELETE: {command: 'deleteCookies'},
|
||||
},
|
||||
'/session/:sessionId/cookie/:name': {
|
||||
GET: {command: 'getCookie'},
|
||||
DELETE: {command: 'deleteCookie'},
|
||||
},
|
||||
'/session/:sessionId/source': {
|
||||
GET: {command: 'getPageSource'},
|
||||
},
|
||||
'/session/:sessionId/title': {
|
||||
GET: {command: 'title'},
|
||||
'/session/:sessionId/element/:elementId/shadow': {
|
||||
GET: {command: 'elementShadowRoot'},
|
||||
},
|
||||
'/session/:sessionId/element': {
|
||||
POST: {
|
||||
@@ -121,12 +115,6 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
payloadParams: {required: ['using', 'value']},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/element/active': {
|
||||
GET: {command: 'active'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId': {
|
||||
GET: {},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/element': {
|
||||
POST: {
|
||||
command: 'findElementFromElement',
|
||||
@@ -139,41 +127,6 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
payloadParams: {required: ['using', 'value']},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/click': {
|
||||
POST: {command: 'click'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/text': {
|
||||
GET: {command: 'getText'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/value': {
|
||||
POST: {
|
||||
command: 'setValue',
|
||||
payloadParams: {
|
||||
required: ['text'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/name': {
|
||||
GET: {command: 'getName'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/clear': {
|
||||
POST: {command: 'clear'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/selected': {
|
||||
GET: {command: 'elementSelected'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/enabled': {
|
||||
GET: {command: 'elementEnabled'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/attribute/:name': {
|
||||
GET: {command: 'getAttribute'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/displayed': {
|
||||
GET: {command: 'elementDisplayed'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/shadow': {
|
||||
GET: {command: 'elementShadowRoot'},
|
||||
},
|
||||
'/session/:sessionId/shadow/:shadowId/element': {
|
||||
POST: {
|
||||
command: 'findElementFromShadowRoot',
|
||||
@@ -186,39 +139,55 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
payloadParams: {required: ['using', 'value']},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/css/:propertyName': {
|
||||
GET: {command: 'getCssProperty'},
|
||||
'/session/:sessionId/element/:elementId/selected': {
|
||||
GET: {command: 'elementSelected'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/displayed': {
|
||||
GET: {command: 'elementDisplayed'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/attribute/:name': {
|
||||
GET: {command: 'getAttribute'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/property/:name': {
|
||||
GET: {command: 'getProperty'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/css/:propertyName': {
|
||||
GET: {command: 'getCssProperty'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/text': {
|
||||
GET: {command: 'getText'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/name': {
|
||||
GET: {command: 'getName'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/rect': {
|
||||
GET: {command: 'getElementRect'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/enabled': {
|
||||
GET: {command: 'elementEnabled'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/computedrole': {
|
||||
GET: {command: 'getComputedRole'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/computedlabel': {
|
||||
GET: {command: 'getComputedLabel'},
|
||||
},
|
||||
'/session/:sessionId/actions': {
|
||||
POST: {command: 'performActions', payloadParams: {required: ['actions']}},
|
||||
DELETE: {command: 'releaseActions'},
|
||||
'/session/:sessionId/element/:elementId/click': {
|
||||
POST: {command: 'click'},
|
||||
},
|
||||
'/session/:sessionId/alert/text': {
|
||||
GET: {command: 'getAlertText'},
|
||||
'/session/:sessionId/element/:elementId/clear': {
|
||||
POST: {command: 'clear'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/value': {
|
||||
POST: {
|
||||
command: 'setAlertText',
|
||||
command: 'setValue',
|
||||
payloadParams: {
|
||||
required: ['text'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/alert/accept': {
|
||||
POST: {command: 'postAcceptAlert'},
|
||||
},
|
||||
'/session/:sessionId/alert/dismiss': {
|
||||
POST: {command: 'postDismissAlert'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/rect': {
|
||||
GET: {command: 'getElementRect'},
|
||||
'/session/:sessionId/source': {
|
||||
GET: {command: 'getPageSource'},
|
||||
},
|
||||
'/session/:sessionId/execute/sync': {
|
||||
POST: {command: 'execute', payloadParams: {required: ['script', 'args']}},
|
||||
@@ -229,20 +198,60 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
payloadParams: {required: ['script', 'args']},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/cookie': {
|
||||
GET: {command: 'getCookies'},
|
||||
POST: {command: 'setCookie', payloadParams: {required: ['cookie']}},
|
||||
DELETE: {command: 'deleteCookies'},
|
||||
},
|
||||
'/session/:sessionId/cookie/:name': {
|
||||
GET: {command: 'getCookie'},
|
||||
DELETE: {command: 'deleteCookie'},
|
||||
},
|
||||
'/session/:sessionId/actions': {
|
||||
POST: {command: 'performActions', payloadParams: {required: ['actions']}},
|
||||
DELETE: {command: 'releaseActions'},
|
||||
},
|
||||
'/session/:sessionId/alert/dismiss': {
|
||||
POST: {command: 'postDismissAlert'},
|
||||
},
|
||||
'/session/:sessionId/alert/accept': {
|
||||
POST: {command: 'postAcceptAlert'},
|
||||
},
|
||||
'/session/:sessionId/alert/text': {
|
||||
GET: {command: 'getAlertText'},
|
||||
POST: {
|
||||
command: 'setAlertText',
|
||||
payloadParams: {
|
||||
required: ['text'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/screenshot': {
|
||||
GET: {command: 'getScreenshot'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/screenshot': {
|
||||
GET: {command: 'getElementScreenshot'},
|
||||
},
|
||||
'/session/:sessionId/window/rect': {
|
||||
GET: {command: 'getWindowRect'},
|
||||
'/session/:sessionId/print': {
|
||||
POST: {
|
||||
command: 'setWindowRect',
|
||||
payloadParams: {optional: ['x', 'y', 'width', 'height']},
|
||||
},
|
||||
command: 'printPage',
|
||||
payloadParams: {
|
||||
optional: [
|
||||
'orientation',
|
||||
'scale',
|
||||
'background',
|
||||
'page',
|
||||
'margin',
|
||||
'shrinkToFit',
|
||||
'pageRanges',
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
// #endregion
|
||||
|
||||
//
|
||||
// Appium specific
|
||||
//
|
||||
// #region JSONWP
|
||||
// https://www.selenium.dev/documentation/legacy/json_wire_protocol/
|
||||
'/session/:sessionId/ime/available_engines': {
|
||||
GET: {command: 'availableIMEEngines', deprecated: true},
|
||||
},
|
||||
@@ -262,9 +271,12 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/rotation': {
|
||||
GET: {command: 'getRotation'},
|
||||
POST: {command: 'setRotation', payloadParams: {required: ['x', 'y', 'z']}},
|
||||
'/session/:sessionId/orientation': {
|
||||
GET: {command: 'getOrientation'},
|
||||
POST: {
|
||||
command: 'setOrientation',
|
||||
payloadParams: {required: ['orientation']}
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/location': {
|
||||
GET: {
|
||||
@@ -277,12 +289,13 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/orientation': {
|
||||
GET: {command: 'getOrientation'},
|
||||
POST: {
|
||||
command: 'setOrientation',
|
||||
payloadParams: {required: ['orientation']}
|
||||
},
|
||||
// #endregion
|
||||
|
||||
// #region MJSONWP
|
||||
// https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md
|
||||
'/session/:sessionId/rotation': {
|
||||
GET: {command: 'getRotation'},
|
||||
POST: {command: 'setRotation', payloadParams: {required: ['x', 'y', 'z']}},
|
||||
},
|
||||
'/session/:sessionId/context': {
|
||||
GET: {command: 'getCurrentContext'},
|
||||
@@ -299,33 +312,38 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/receive_async_response': {
|
||||
POST: {
|
||||
command: 'receiveAsyncResponse',
|
||||
payloadParams: {required: ['status', 'value']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
// #endregion
|
||||
|
||||
// #region Appium
|
||||
'/appium/sessions': {
|
||||
GET: {command: 'getAppiumSessions'},
|
||||
},
|
||||
'/session/:sessionId/appium/capabilities': {
|
||||
GET: {command: 'getAppiumSessionCapabilities'}
|
||||
},
|
||||
'/session/:sessionId/appium/settings': {
|
||||
POST: {command: 'updateSettings', payloadParams: {required: ['settings']}},
|
||||
GET: {command: 'getSettings'},
|
||||
},
|
||||
'/session/:sessionId/appium/commands': {
|
||||
GET: {command: 'listCommands'},
|
||||
},
|
||||
'/session/:sessionId/appium/extensions': {
|
||||
GET: {command: 'listExtensions'},
|
||||
},
|
||||
'/session/:sessionId/appium/events': {
|
||||
POST: {command: 'getLogEvents', payloadParams: {optional: ['type']}},
|
||||
},
|
||||
'/session/:sessionId/appium/log_event': {
|
||||
POST: {
|
||||
command: 'logCustomEvent',
|
||||
payloadParams: {required: ['vendor', 'event']},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/system_time': {
|
||||
GET: {command: 'getDeviceTime'},
|
||||
POST: {command: 'getDeviceTime', payloadParams: {optional: ['format']}},
|
||||
},
|
||||
// #region Applications Management
|
||||
'/session/:sessionId/appium/device/install_app': {
|
||||
POST: {
|
||||
command: 'installApp',
|
||||
payloadParams: {
|
||||
required: ['appPath'],
|
||||
optional: ['options'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/activate_app': {
|
||||
POST: {
|
||||
command: 'activateApp',
|
||||
@@ -335,15 +353,6 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/remove_app': {
|
||||
POST: {
|
||||
command: 'removeApp',
|
||||
payloadParams: {
|
||||
required: [['appId'], ['bundleId']],
|
||||
optional: ['options'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/terminate_app': {
|
||||
POST: {
|
||||
command: 'terminateApp',
|
||||
@@ -353,14 +362,6 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/app_installed': {
|
||||
POST: {
|
||||
command: 'isAppInstalled',
|
||||
payloadParams: {
|
||||
required: [['appId'], ['bundleId']],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/app_state': {
|
||||
POST: {
|
||||
command: 'queryAppState',
|
||||
@@ -369,7 +370,32 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
},
|
||||
// #endregion
|
||||
'/session/:sessionId/appium/device/install_app': {
|
||||
POST: {
|
||||
command: 'installApp',
|
||||
payloadParams: {
|
||||
required: ['appPath'],
|
||||
optional: ['options'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/remove_app': {
|
||||
POST: {
|
||||
command: 'removeApp',
|
||||
payloadParams: {
|
||||
required: [['appId'], ['bundleId']],
|
||||
optional: ['options'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/app_installed': {
|
||||
POST: {
|
||||
command: 'isAppInstalled',
|
||||
payloadParams: {
|
||||
required: [['appId'], ['bundleId']],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/hide_keyboard': {
|
||||
POST: {
|
||||
command: 'hideKeyboard',
|
||||
@@ -388,48 +414,75 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
'/session/:sessionId/appium/device/pull_folder': {
|
||||
POST: {command: 'pullFolder', payloadParams: {required: ['path']}},
|
||||
},
|
||||
'/session/:sessionId/appium/settings': {
|
||||
POST: {command: 'updateSettings', payloadParams: {required: ['settings']}},
|
||||
GET: {command: 'getSettings'},
|
||||
},
|
||||
'/session/:sessionId/appium/events': {
|
||||
POST: {command: 'getLogEvents', payloadParams: {optional: ['type']}},
|
||||
},
|
||||
'/session/:sessionId/appium/log_event': {
|
||||
// #endregion
|
||||
|
||||
// #region Unknown
|
||||
'/session/:sessionId/receive_async_response': {
|
||||
POST: {
|
||||
command: 'logCustomEvent',
|
||||
payloadParams: {required: ['vendor', 'event']},
|
||||
command: 'receiveAsyncResponse',
|
||||
payloadParams: {required: ['status', 'value']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
// #region Inspector
|
||||
'/session/:sessionId/appium/commands': {
|
||||
GET: {command: 'listCommands'},
|
||||
},
|
||||
'/session/:sessionId/appium/extensions': {
|
||||
GET: {command: 'listExtensions'},
|
||||
'/session/:sessionId/element/:elementId': {
|
||||
GET: {},
|
||||
},
|
||||
// #endregion
|
||||
|
||||
//
|
||||
// 3rd party vendor/protocol support
|
||||
//
|
||||
// #region Selenium/Chromium browsers
|
||||
// #region Other Protocols
|
||||
// Selenium/Chromium browsers
|
||||
'/session/:sessionId/se/log': {
|
||||
POST: {command: 'getLog', payloadParams: {required: ['type']}},
|
||||
},
|
||||
'/session/:sessionId/se/log/types': {
|
||||
GET: {command: 'getLogTypes'},
|
||||
},
|
||||
// #endregion
|
||||
|
||||
// #region chromium devtools
|
||||
// Chromium devtools
|
||||
// https://chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/server/http_handler.cc
|
||||
'/session/:sessionId/:vendor/cdp/execute': {
|
||||
POST: {command: 'executeCdp', payloadParams: {required: ['cmd', 'params']}},
|
||||
},
|
||||
// #endregion
|
||||
|
||||
// #region Webauthn
|
||||
// Reporting
|
||||
// https://www.w3.org/TR/reporting-1/
|
||||
'/session/:sessionId/reporting/generate_test_report': {
|
||||
POST: {
|
||||
command: 'generateTestReport',
|
||||
payloadParams: {required: ['message'], optional: ['group']},
|
||||
},
|
||||
},
|
||||
// Permissions
|
||||
// https://www.w3.org/TR/permissions/
|
||||
'/session/:sessionId/permissions': {
|
||||
POST: {command: 'setPermissions', payloadParams: {required: ['descriptor', 'state']}},
|
||||
},
|
||||
// Device Posture
|
||||
// https://www.w3.org/TR/device-posture/
|
||||
'/session/:sessionId/deviceposture': {
|
||||
POST: {command: 'setDevicePosture', payloadParams: {required: ['posture']}},
|
||||
DELETE: {command: 'clearDevicePosture'},
|
||||
},
|
||||
// Generic Sensor
|
||||
// https://www.w3.org/TR/generic-sensor/
|
||||
'/session/:sessionId/sensor': {
|
||||
POST: {
|
||||
command: 'createVirtualSensor',
|
||||
payloadParams: {
|
||||
required: ['type'],
|
||||
optional: ['connected', 'maxSamplingFrequency', 'minSamplingFrequency'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/sensors/:sensorType': {
|
||||
GET: {command: 'getVirtualSensorInfo'},
|
||||
POST: {command: 'updateVirtualSensorReading', payloadParams: {required: ['reading']}},
|
||||
DELETE: {command: 'deleteVirtualSensor'},
|
||||
},
|
||||
// Custom Handlers
|
||||
// https://html.spec.whatwg.org/multipage/system-state.html#user-agent-automation
|
||||
'/session/:sessionId/custom-handlers/set-mode': {
|
||||
POST: {command: 'setRPHRegistrationMode', payloadParams: {required: ['mode']}},
|
||||
},
|
||||
// Webauthn
|
||||
// https://www.w3.org/TR/webauthn-2/#sctn-automation-add-virtual-authenticator
|
||||
'/session/:sessionId/webauthn/authenticator': {
|
||||
POST: {
|
||||
@@ -469,6 +522,49 @@ export const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
},
|
||||
// Secure Payment Confirmation
|
||||
// https://www.w3.org/TR/secure-payment-confirmation/
|
||||
'/session/:sessionId/secure-payment-confirmation/set-mode': {
|
||||
POST: {command: 'setSPCTransactionMode', payloadParams: {required: ['mode']}},
|
||||
},
|
||||
// Federated Credential Management
|
||||
// https://www.w3.org/TR/fedcm-1/
|
||||
'/session/:sessionId/fedcm/canceldialog': {
|
||||
POST: {command: 'fedCMCancelDialog'},
|
||||
},
|
||||
'/session/:sessionId/fedcm/selectaccount': {
|
||||
POST: {command: 'fedCMSelectAccount', payloadParams: {required: ['accountIndex']}},
|
||||
},
|
||||
'/session/:sessionId/fedcm/clickdialogbutton': {
|
||||
POST: {command: 'fedCMClickDialogButton', payloadParams: {required: ['dialogButton']}},
|
||||
},
|
||||
'/session/:sessionId/fedcm/accountlist': {
|
||||
GET: {command: 'fedCMGetAccounts'},
|
||||
},
|
||||
'/session/:sessionId/fedcm/gettitle': {
|
||||
GET: {command: 'fedCMGetTitle'},
|
||||
},
|
||||
'/session/:sessionId/fedcm/getdialogtype': {
|
||||
GET: {command: 'fedCMGetDialogType'},
|
||||
},
|
||||
'/session/:sessionId/fedcm/setdelayenabled': {
|
||||
POST: {command: 'fedCMSetDelayEnabled', payloadParams: {required: ['enabled']}},
|
||||
},
|
||||
'/session/:sessionId/fedcm/resetcooldown': {
|
||||
POST: {command: 'fedCMResetCooldown'},
|
||||
},
|
||||
// Compute Pressure
|
||||
// https://www.w3.org/TR/compute-pressure/
|
||||
'/session/:sessionId/pressuresource': {
|
||||
POST: {
|
||||
command: 'createVirtualPressureSource',
|
||||
payloadParams: {required: ['type'], optional: ['supported']},
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/pressuresource/:pressureSourceType': {
|
||||
POST: {command: 'updateVirtualPressureSource', payloadParams: {required: ['sample']}},
|
||||
DELETE: {command: 'deleteVirtualPressureSource'},
|
||||
},
|
||||
// #endregion
|
||||
});
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/base-driver",
|
||||
"version": "10.0.1",
|
||||
"version": "10.1.0",
|
||||
"description": "Base driver class for Appium drivers",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -44,25 +44,25 @@
|
||||
"test:types": "tsd"
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/support": "^7.0.1",
|
||||
"@appium/types": "^1.0.1",
|
||||
"@appium/support": "^7.0.2",
|
||||
"@appium/types": "^1.1.0",
|
||||
"@colors/colors": "1.6.0",
|
||||
"async-lock": "1.4.1",
|
||||
"asyncbox": "3.0.0",
|
||||
"axios": "1.11.0",
|
||||
"axios": "1.12.2",
|
||||
"bluebird": "3.7.2",
|
||||
"body-parser": "2.2.0",
|
||||
"express": "5.1.0",
|
||||
"fastest-levenshtein": "1.0.16",
|
||||
"http-status-codes": "2.3.0",
|
||||
"lodash": "4.17.21",
|
||||
"lru-cache": "11.2.1",
|
||||
"lru-cache": "11.2.2",
|
||||
"method-override": "3.0.0",
|
||||
"morgan": "1.10.1",
|
||||
"path-to-regexp": "8.3.0",
|
||||
"serve-favicon": "2.5.1",
|
||||
"source-map-support": "0.5.21",
|
||||
"type-fest": "4.41.0"
|
||||
"type-fest": "5.0.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"spdy": "4.0.2"
|
||||
|
||||
@@ -41,7 +41,7 @@ describe('Routes', function () {
|
||||
}
|
||||
let hash = shasum.digest('hex').substring(0, 8);
|
||||
// Modify the hash whenever the protocol has intentionally been modified.
|
||||
hash.should.equal('7ff9afce');
|
||||
hash.should.equal('510cbe79');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.0.3](https://github.com/appium/appium/compare/@appium/base-plugin@3.0.2...@appium/base-plugin@3.0.3) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/base-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.0.2](https://github.com/appium/appium/compare/@appium/base-plugin@3.0.1...@appium/base-plugin@3.0.2) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/base-plugin
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/base-plugin",
|
||||
"version": "3.0.2",
|
||||
"version": "3.0.3",
|
||||
"description": "The base plugin used to create Appium plugins",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -40,8 +40,8 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/base-driver": "^10.0.1",
|
||||
"@appium/support": "^7.0.1"
|
||||
"@appium/base-driver": "^10.1.0",
|
||||
"@appium/support": "^7.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.1.1](https://github.com/appium/appium/compare/@appium/docutils@2.1.0...@appium/docutils@2.1.1) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/docutils
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.1.0](https://github.com/appium/appium/compare/@appium/docutils@2.0.1...@appium/docutils@2.1.0) (2025-09-09)
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/docutils",
|
||||
"version": "2.1.0",
|
||||
"version": "2.1.1",
|
||||
"description": "Documentation generation utilities for Appium and related projects",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -48,7 +48,7 @@
|
||||
"start": "node ./build/lib/cli/index.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/support": "^7.0.1",
|
||||
"@appium/support": "^7.0.2",
|
||||
"chalk": "4.1.2",
|
||||
"consola": "3.4.2",
|
||||
"diff": "8.0.2",
|
||||
@@ -58,7 +58,7 @@
|
||||
"read-pkg": "5.2.0",
|
||||
"source-map-support": "0.5.21",
|
||||
"teen_process": "3.0.1",
|
||||
"type-fest": "4.41.0",
|
||||
"type-fest": "5.0.1",
|
||||
"yaml": "2.8.1",
|
||||
"yargs": "18.0.0",
|
||||
"yargs-parser": "22.0.0"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
mkdocs==1.6.1
|
||||
mkdocs-git-revision-date-localized-plugin==1.4.7
|
||||
mkdocs-material==9.6.19
|
||||
mkdocs-material==9.6.21
|
||||
mkdocs-redirects==1.2.2
|
||||
mike==2.1.3
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.0.3](https://github.com/appium/appium/compare/@appium/driver-test-support@1.0.2...@appium/driver-test-support@1.0.3) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/driver-test-support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.0.2](https://github.com/appium/appium/compare/@appium/driver-test-support@1.0.1...@appium/driver-test-support@1.0.2) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/driver-test-support
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/driver-test-support",
|
||||
"version": "1.0.2",
|
||||
"version": "1.0.3",
|
||||
"description": "Test utilities for Appium drivers",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -41,16 +41,16 @@
|
||||
},
|
||||
"types": "./build/lib/index.d.ts",
|
||||
"dependencies": {
|
||||
"@appium/types": "^1.0.1",
|
||||
"axios": "1.11.0",
|
||||
"@appium/types": "^1.1.0",
|
||||
"axios": "1.12.2",
|
||||
"bluebird": "3.7.2",
|
||||
"chai": "6.0.1",
|
||||
"chai": "6.2.0",
|
||||
"chai-as-promised": "8.0.2",
|
||||
"get-port": "5.1.1",
|
||||
"lodash": "4.17.21",
|
||||
"sinon": "21.0.0",
|
||||
"source-map-support": "0.5.21",
|
||||
"type-fest": "4.41.0"
|
||||
"type-fest": "5.0.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"appium": "^3.0.0-beta.0",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.0.3](https://github.com/appium/appium/compare/@appium/eslint-config-appium-ts@2.0.2...@appium/eslint-config-appium-ts@2.0.3) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/eslint-config-appium-ts
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.2](https://github.com/appium/appium/compare/@appium/eslint-config-appium-ts@2.0.1...@appium/eslint-config-appium-ts@2.0.2) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/eslint-config-appium-ts
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@appium/eslint-config-appium-ts",
|
||||
"type": "module",
|
||||
"version": "2.0.2",
|
||||
"version": "2.0.3",
|
||||
"description": "Shared ESLint config for Appium projects (TypeScript version)",
|
||||
"keywords": [
|
||||
"eslint",
|
||||
@@ -29,14 +29,14 @@
|
||||
"test:smoke": "exit 0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@eslint/compat": "1.3.2",
|
||||
"@eslint/js": "9.35.0",
|
||||
"@eslint/compat": "1.4.0",
|
||||
"@eslint/js": "9.37.0",
|
||||
"eslint-config-prettier": "10.1.8",
|
||||
"eslint-import-resolver-typescript": "4.4.4",
|
||||
"eslint-plugin-import": "2.32.0",
|
||||
"eslint-plugin-mocha": "10.5.0",
|
||||
"eslint-plugin-promise": "7.2.1",
|
||||
"typescript-eslint": "8.43.0"
|
||||
"typescript-eslint": "8.46.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "^9.0.0"
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [5.0.2](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@5.0.1...@appium/execute-driver-plugin@5.0.2) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/execute-driver-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [5.0.1](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@5.0.0...@appium/execute-driver-plugin@5.0.1) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/execute-driver-plugin
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/execute-driver-plugin",
|
||||
"version": "5.0.1",
|
||||
"version": "5.0.2",
|
||||
"description": "Plugin for batching and executing Appium driver commands",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -41,7 +41,7 @@
|
||||
"bluebird": "3.7.2",
|
||||
"lodash": "4.17.21",
|
||||
"source-map-support": "0.5.21",
|
||||
"webdriverio": "9.19.2"
|
||||
"webdriverio": "9.20.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"appium": "^3.0.0-beta.0"
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [6.0.1](https://github.com/appium/appium/compare/@appium/fake-driver@6.0.0...@appium/fake-driver@6.0.1) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-driver
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [6.0.0](https://github.com/appium/appium/compare/@appium/fake-driver@6.0.0-rc.1...@appium/fake-driver@6.0.0) (2025-08-18)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-driver
|
||||
|
||||
@@ -62,6 +62,7 @@ export class FakeDriver extends BaseDriver {
|
||||
/** @type {boolean} */
|
||||
_clockRunning = false;
|
||||
|
||||
|
||||
constructor(
|
||||
opts = /** @type {import('@appium/types').InitialOpts} */ ({}),
|
||||
shouldValidateCaps = true,
|
||||
@@ -118,8 +119,7 @@ export class FakeDriver extends BaseDriver {
|
||||
* @returns {Promise<[string,FakeDriverCaps]>}
|
||||
*/
|
||||
async createSession(w3cCapabilities1, w3cCapabilities2, w3cCapabilities3, driverData = []) {
|
||||
// TODO add validation on caps.app that we will get for free from
|
||||
// BaseDriver
|
||||
// BaseDriver automatically validates capabilities using desiredCapConstraints
|
||||
|
||||
// check to see if any other sessions have set uniqueApp. If so, emulate
|
||||
// not being able to start a session because of system resources
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/fake-driver",
|
||||
"version": "6.0.0",
|
||||
"version": "6.0.1",
|
||||
"description": "Mock driver used internally by Appium for testing. Ignore",
|
||||
"keywords": [
|
||||
"automation",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [4.0.3](https://github.com/appium/appium/compare/@appium/fake-plugin@4.0.2...@appium/fake-plugin@4.0.3) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.0.2](https://github.com/appium/appium/compare/@appium/fake-plugin@4.0.1...@appium/fake-plugin@4.0.2) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-plugin
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/fake-plugin",
|
||||
"version": "4.0.2",
|
||||
"version": "4.0.3",
|
||||
"description": "A fake Appium plugin",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -39,8 +39,8 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/base-plugin": "^3.0.2",
|
||||
"@appium/support": "^7.0.1",
|
||||
"@appium/base-plugin": "^3.0.3",
|
||||
"@appium/support": "^7.0.2",
|
||||
"bluebird": "3.7.2",
|
||||
"lodash": "4.17.21",
|
||||
"source-map-support": "0.5.21"
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [4.0.2](https://github.com/appium/appium/compare/@appium/images-plugin@4.0.1...@appium/images-plugin@4.0.2) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/images-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.0.1](https://github.com/appium/appium/compare/@appium/images-plugin@4.0.0...@appium/images-plugin@4.0.1) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/images-plugin
|
||||
|
||||
@@ -421,7 +421,7 @@ export default class ImageElementFinder {
|
||||
|
||||
*/
|
||||
/**
|
||||
* Get a image that will be used for template maching.
|
||||
* Get a image that will be used for template matching.
|
||||
* Returns scaled image if scale ratio is provided.
|
||||
*
|
||||
* @param {Buffer} template - image used as a template to be
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/images-plugin",
|
||||
"version": "4.0.1",
|
||||
"version": "4.0.2",
|
||||
"description": "Plugin for working with images and image elements in Appium",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -39,11 +39,11 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.*js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/opencv": "^4.0.1",
|
||||
"@appium/support": "^7.0.1",
|
||||
"@appium/opencv": "^4.0.2",
|
||||
"@appium/support": "^7.0.2",
|
||||
"lodash": "4.17.21",
|
||||
"lru-cache": "11.2.1",
|
||||
"sharp": "0.34.3",
|
||||
"lru-cache": "11.2.2",
|
||||
"sharp": "0.34.4",
|
||||
"source-map-support": "0.5.21"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.0.2](https://github.com/appium/appium/compare/@appium/logger@2.0.1...@appium/logger@2.0.2) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/logger
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.1](https://github.com/appium/appium/compare/@appium/logger@2.0.0...@appium/logger@2.0.1) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/logger
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/logger",
|
||||
"version": "2.0.1",
|
||||
"version": "2.0.2",
|
||||
"author": "https://github.com/appium",
|
||||
"description": "A Universal Logger For The Appium Ecosystem",
|
||||
"repository": {
|
||||
@@ -29,7 +29,7 @@
|
||||
"dependencies": {
|
||||
"console-control-strings": "1.1.0",
|
||||
"lodash": "4.17.21",
|
||||
"lru-cache": "11.2.1",
|
||||
"lru-cache": "11.2.2",
|
||||
"set-blocking": "2.0.0"
|
||||
},
|
||||
"license": "ISC",
|
||||
|
||||
@@ -414,7 +414,7 @@ describe('basic', function () {
|
||||
log = new Log();
|
||||
});
|
||||
|
||||
it('to nonexistant level', function() {
|
||||
it('to nonexistent level', function() {
|
||||
log.emitLog({ prefix: 'test', level: 'asdf' });
|
||||
});
|
||||
});
|
||||
@@ -424,7 +424,7 @@ describe('basic', function () {
|
||||
log = new Log();
|
||||
});
|
||||
|
||||
it('with nonexistant stream', function() {
|
||||
it('with nonexistent stream', function() {
|
||||
log.stream = null;
|
||||
(log._format('message') === undefined).should.be.true;
|
||||
});
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [4.0.2](https://github.com/appium/appium/compare/@appium/opencv@4.0.1...@appium/opencv@4.0.2) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/opencv
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.0.1](https://github.com/appium/appium/compare/@appium/opencv@4.0.0...@appium/opencv@4.0.1) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/opencv
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/opencv",
|
||||
"version": "4.0.1",
|
||||
"version": "4.0.2",
|
||||
"description": "OpenCV-related helper library",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -44,7 +44,7 @@
|
||||
"bluebird": "3.7.2",
|
||||
"lodash": "4.17.21",
|
||||
"opencv-bindings": "4.5.5",
|
||||
"sharp": "0.34.3",
|
||||
"sharp": "0.34.4",
|
||||
"source-map-support": "0.5.21"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.0.2](https://github.com/appium/appium/compare/@appium/plugin-test-support@1.0.1...@appium/plugin-test-support@1.0.2) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/plugin-test-support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.0.1](https://github.com/appium/appium/compare/@appium/plugin-test-support@1.0.0...@appium/plugin-test-support@1.0.1) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/plugin-test-support
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/plugin-test-support",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"description": "Testing utilities for Appium plugins",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -41,7 +41,7 @@
|
||||
"test:unit": "exit 0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/types": "^1.0.1",
|
||||
"@appium/types": "^1.1.0",
|
||||
"get-port": "5.1.1",
|
||||
"log-symbols": "4.1.0",
|
||||
"source-map-support": "0.5.21",
|
||||
|
||||
@@ -3,6 +3,15 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.0.1](https://github.com/appium/appium/compare/@appium/relaxed-caps-plugin@2.0.0...@appium/relaxed-caps-plugin@2.0.1) (2025-10-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **base-driver,relaxed-caps-plugin,types:** add missing W3C caps ([#21642](https://github.com/appium/appium/issues/21642)) ([e6635b7](https://github.com/appium/appium/commit/e6635b737d0f42d8fd38c3d8bea70067d2e7c87a))
|
||||
|
||||
|
||||
|
||||
## [2.0.0](https://github.com/appium/appium/compare/@appium/relaxed-caps-plugin@2.0.0-rc.1...@appium/relaxed-caps-plugin@2.0.0) (2025-08-18)
|
||||
|
||||
**Note:** Version bump only for package @appium/relaxed-caps-plugin
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import _ from 'lodash';
|
||||
import { BasePlugin } from 'appium/plugin';
|
||||
|
||||
/**
|
||||
* W3C standard capabilities
|
||||
* @see https://www.w3.org/TR/webdriver2/#dfn-table-of-standard-capabilities)
|
||||
*/
|
||||
const STANDARD_CAPS = [
|
||||
'browserName',
|
||||
'browserVersion',
|
||||
@@ -10,7 +14,10 @@ const STANDARD_CAPS = [
|
||||
'proxy',
|
||||
'setWindowRect',
|
||||
'timeouts',
|
||||
'strictFileInteractability',
|
||||
'unhandledPromptBehavior',
|
||||
'userAgent',
|
||||
'webSocketUrl',
|
||||
];
|
||||
|
||||
const VENDOR_PREFIX = 'appium';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/relaxed-caps-plugin",
|
||||
"version": "2.0.0",
|
||||
"version": "2.0.1",
|
||||
"description": "An Appium plugin that loosens requirements for vendor prefixes on caps",
|
||||
"keywords": [
|
||||
"automation",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.0.2](https://github.com/appium/appium/compare/@appium/storage-plugin@1.0.1...@appium/storage-plugin@1.0.2) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/storage-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.0.1](https://github.com/appium/appium/compare/@appium/storage-plugin@1.0.0...@appium/storage-plugin@1.0.1) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/storage-plugin
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/storage-plugin",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"description": "Server-side storage plugin for Appium",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -41,11 +41,11 @@
|
||||
"test:e2e": "mocha --timeout 20s --slow 10s \"./test/e2e/**/*.spec.*js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/support": "^7.0.1",
|
||||
"@appium/support": "^7.0.2",
|
||||
"async-lock": "1.4.1",
|
||||
"bluebird": "3.7.2",
|
||||
"lodash": "4.17.21",
|
||||
"lru-cache": "11.2.1",
|
||||
"lru-cache": "11.2.2",
|
||||
"rimraf": "6.0.1",
|
||||
"source-map-support": "0.5.21",
|
||||
"ws": "8.18.3"
|
||||
|
||||
@@ -62,7 +62,7 @@ describe('storage', function () {
|
||||
(await fs.exists(path.join(storageRoot, tmpName))).should.be.false;
|
||||
});
|
||||
|
||||
it('should only reset parital files if shouldPreserveFiles requested', async function () {
|
||||
it('should only reset partial files if shouldPreserveFiles requested', async function () {
|
||||
const name = 'foo.bar';
|
||||
const tmpName = 'bar.baz.filepart';
|
||||
await fs.writeFile(path.join(storageRoot, name), Buffer.alloc(1));
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [7.0.2](https://github.com/appium/appium/compare/@appium/support@7.0.1...@appium/support@7.0.2) (2025-10-08)
|
||||
|
||||
**Note:** Version bump only for package @appium/support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [7.0.1](https://github.com/appium/appium/compare/@appium/support@7.0.0...@appium/support@7.0.1) (2025-09-09)
|
||||
|
||||
**Note:** Version bump only for package @appium/support
|
||||
|
||||
@@ -28,7 +28,7 @@ async function parseXmlPlistFile(plistFilename) {
|
||||
* @returns {Promise<any>} parsed plist JS Object
|
||||
*/
|
||||
async function parsePlistFile(plist, mustExist = true, quiet = true) {
|
||||
// handle nonexistant file
|
||||
// handle nonexistent file
|
||||
if (!(await fs.exists(plist))) {
|
||||
if (mustExist) {
|
||||
throw log.errorWithException(`Plist file doesn't exist: '${plist}'`);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user