Compare commits

..
Author SHA1 Message Date
Dan 8d30e1b6a0 1.20.0-rc.0 2020-11-29 01:00:26 -08:00
Dan d4f27e6d7c add shrinkwrap 2020-11-29 01:00:17 -08:00
Dan 334bc3d860 commit 2020-11-29 00:59:08 -08:00
Dan 0381df2449 release scripts 2020-11-29 00:54:49 -08:00
Mykola Mokhnach 090640e348 docs: Add Mac2Driver documentation (#14914) 2020-11-25 08:26:11 +01:00
Mykola Mokhnach a5c6f1c80e feat: Add Mac2Driver (#14911) 2020-11-25 07:52:48 +01:00
Appium Triagerandrunner 8d181dd19f docs: Update generated docs [ci skip] (#14913)
Co-authored-by: runner <runner@Mac-1606273407156.local>
2020-11-25 12:20:45 +09:00
Kazuaki Matsuo eb189d4588 fix: fix urls in docs (#14910) 2020-11-25 05:25:01 +09:00
1272 changed files with 72704 additions and 105864 deletions
+2 -9
View File
@@ -1,9 +1,2 @@
**/coverage/**
**/node_modules/**
examples/javascript-wd
**/build/**
**/*.min.js
sample-code
**/*.d.ts
**/build-fixtures/**
**/*.ts
coverage
node_modules
+1 -51
View File
@@ -1,53 +1,3 @@
{
"extends": "@appium/eslint-config-appium",
"overrides": [
{
"files": "packages/fake-driver/**/*",
"rules": {"require-await": "off"}
},
{"files": "packages/support/**/*", "globals": {"BigInt": "readonly"}},
{
"files": "packages/*/test/**/*",
"rules": {"func-names": "off"}
},
{
"files": ["packages/*/index.js", "packages/*/scripts/**/*.js", "test/*.js"],
"parserOptions": {
"sourceType": "script"
}
},
{
"files": [
"packages/appium/support.js",
"packages/appium/driver.js",
"packages/appium/plugin.js"
],
"parserOptions": {
"sourceType": "script"
}
},
{
"files": "./packages/*/test/**/*.js",
"rules": {
"no-restricted-properties": [
"error",
{
"object": "sinon",
"property": "spy",
"message": "Use `sandbox = sinon.createSandbox()` and `sandbox.spy()` instead. Don't forget to call `sandbox.restore()` in `afterEach`"
},
{
"object": "sinon",
"property": "stub",
"message": "Use `sandbox = sinon.createSandbox()` and `sandbox.stub()` instead. Don't forget to call `sandbox.restore()` in `afterEach`"
},
{
"object": "sinon",
"property": "mock",
"message": "Use `sandbox = sinon.createSandbox()` and `sandbox.mock()` instead. Don't forget to call `sandbox.restore()` in `afterEach`"
}
]
}
}
]
"extends": "appium"
}
-40
View File
@@ -1,40 +0,0 @@
# Generated by FOSSA CLI (https://github.com/fossas/fossa-cli)
# Visit https://fossa.com to learn more
version: 3
project:
id: github.com/appium/appium
name: appium
paths:
exclude:
- ./sample-code
- '**/fixtures/**'
- '**/demo/**'
- '**/example/**'
- '**/examples/**'
targets:
only:
- type: npm
path: .
- type: npm
path: ./packages/appium
- type: npm
path: ./packages/base-driver
- type: npm
path: ./packages/doctor
- type: npm
path: ./packages/eslint-config-appium
- type: npm
path: ./packages/fake-driver
- type: npm
path: ./packages/gulp-plugins
- type: npm
path: ./packages/support
- type: npm
path: ./packages/test-support
revision:
branch: 2.0
-1
View File
@@ -1 +0,0 @@
* text=auto eol=lf
+2 -2
View File
@@ -28,6 +28,6 @@ If you are reporting a bug, _always_ include Appium logs!
Please remember that with sample code it's easier to reproduce the bug and it's much faster to fix it.
Please git clone https://github.com/appium/appium and from the `examples` directory, use one of your favourite languages and sample apps to reproduce the issue.
Please git clone https://github.com/appium/appium and from the `sample-code` directory, use one of your favourite languages and sample apps to reproduce the issue.
In case a similar scenario is missing in examples, please submit a PR with one of the sample apps provided.
In case a similar scenario is missing in sample-code, please submit a PR with one of the sample apps provided.
+20
View File
@@ -0,0 +1,20 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/sample-code/javascript-webdriverio"
schedule:
interval: daily
time: "11:00"
open-pull-requests-limit: 10
- package-ecosystem: npm
directory: "/sample-code/javascript-wd"
schedule:
interval: daily
time: "11:00"
open-pull-requests-limit: 10
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
time: "11:00"
open-pull-requests-limit: 10
-61
View File
@@ -1,61 +0,0 @@
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Appium Build
on: [push, pull_request]
permissions:
contents: read
jobs:
test:
name: Tests
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install latest npm
run: npm install -g npm
- name: Install dependencies
uses: bahmutov/npm-install@cb39a46f27f14697fec763d60fb23ad347e2befa # tag=v1
with:
useRollingCache: true
- name: Run smoke tests
uses: boneskull/nodejs-production-test-action@v1
with:
script: test:smoke
workspaces: true
quiet: true
- name: Run unit & E2E tests
run: npm run test:ci
lint:
name: Lint & Check Types
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Install dependencies
run: npm install
- name: ESLint
run: npm run lint
- name: Check types
run: npm run build:types
docs:
name: Build Command Documentation
needs: [test]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Install dependencies
run: npm install
- name: Generate docs
run: npm run generate-docs
-60
View File
@@ -1,60 +0,0 @@
name: Appium Deploy
on:
push:
tags:
- appium@2*
workflow_dispatch:
permissions:
contents: read
jobs:
check:
name: Check
runs-on: ${{ matrix.os }}
strategy:
matrix:
# node-version: [14.x, 16.x, 18.x]
node-version: [16.x, 18.x]
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
- name: Install Appium
run: |
if [[ "$GITHUB_REF_TYPE" == tag ]]; then
npm i -g $GITHUB_REF_NAME
else
npm i -g appium@next
fi
shell: bash
- name: Install drivers and plugins
run: |
if grep -q macos <<< ${{ matrix.os }}; then
appium driver install xcuitest
fi
appium driver install uiautomator2
appium plugin install images
shell: bash
- name: Verify installation
run: |
installed_drivers=$(appium driver list --installed 2>&1)
if grep -q macos <<< ${{ matrix.os }}; then
grep -q xcuitest <<< $installed_drivers
fi
grep -q uiautomator2 <<< $installed_drivers
installed_plugins=$(appium plugin list --installed 2>&1)
grep -q images <<< $installed_plugins
shell: bash
- name: Verify Appium could be executed
run: |
appium --use-plugins=images &
pid=$(echo $!)
sleep 5
ps -p $pid || exit 1
kill -2 $pid
shell: bash
-24
View File
@@ -1,24 +0,0 @@
name: License Checks
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
permissions:
contents: read
jobs:
fossa-check:
name: Run FOSSA Analysis
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
with:
ref: 'master'
- name: fossa analyze
run: |
npm install
curl -sS -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install-latest.sh | bash
fossa analyze
fossa test
env:
FOSSA_API_KEY: ${{secrets.FOSSA_API_KEY}}
+15 -23
View File
@@ -2,15 +2,16 @@
*.swp
.DS_Store
node_modules
package-lock.json
*.trace
xcuserdata
*.sublime-*
test/functional/_joined
*.iml
!examples/java/*.iml
!sample-code/java/*.iml
*.autosave
.idea/
!examples/java/.idea/
!sample-code/java/.idea/
*.log
*.t
artifacts
@@ -39,25 +40,16 @@ old
.tern-project
coverage
docs/mkdocs.yml
examples/javascript-wd/node_modules
examples/php/vendor
examples/php/composer.lock
examples/java/out/
examples/ruby/Gemfile.lock
examples/python/test/results/
examples/python/test/input
examples/python/.pytest_cache/
examples/csharp/test/bin
examples/csharp/test/obj
examples/csharp/test/bin
examples/csharp/packages
sample-code/javascript-wd/node_modules
sample-code/php/vendor
sample-code/php/composer.lock
sample-code/java/out/
sample-code/ruby/Gemfile.lock
sample-code/python/test/results/
sample-code/python/test/input
sample-code/python/.pytest_cache/
sample-code/csharp/test/bin
sample-code/csharp/test/obj
sample-code/csharp/test/bin
sample-code/csharp/packages
appium.zip
.vscode/settings.json
.nyc_output
*.lerna_backup
**/build-fixtures/**
*.tsbuildinfo
packages/*/LICENSE
local_appium_home
jsdoc-out
*.tgz
-10
View File
@@ -1,10 +0,0 @@
// @ts-check
'use strict';
module.exports = {
require: [require.resolve('./test/setup.js')],
// forbids use of .only() in CI
forbidOnly: Boolean(process.env.CI),
color: true,
};
+1 -3
View File
@@ -1,4 +1,2 @@
# Do not disable package-lock. Disabling package-lock also disables npm-shrinkwrap
package-lock=true
save-exact=true
package-lock=true
-12
View File
@@ -1,12 +0,0 @@
**/node_modules/**
**/build/**
**/fixtures/**
**/*.min.*
**/*.md
**/*.yml
**/*.json
**/.vscode/**
**/*.html
**/generated/**
# generated
packages/types/lib/appium-config.ts
+30
View File
@@ -0,0 +1,30 @@
language: node_js
node_js: "10"
os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.8
- build-essential
env:
global:
- CXX=g++-4.8
cache:
npm: false
jobs:
include:
- stage: Tests
name: node 10
before_script: npm outdated || true
script: npm run test && npm run e2e-test
after_script: npm run coverage
- stage:
name: node 12
before_script: npm outdated || true
script: npm run test && npm run e2e-test
node_js: "12"
- stage:
name: test documentation generation
script: npm run generate-docs
+45 -22
View File
@@ -1,23 +1,46 @@
{
"version": "0.2.0",
"configurations": [
{
"args": ["--colors", "--timeout", "0", "${file}"],
"internalConsoleOptions": "openOnSessionStart",
"name": "Test - Current File",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"runtimeArgs": ["--require", "@babel/register"],
"request": "launch",
"skipFiles": ["<node_internals>/**", "**/node_modules/mocha/**"],
"type": "pwa-node",
"sourceMaps": true,
"cwd": "${workspaceFolder}",
"outfiles": [],
"env": {
"NODE_ENV": "test",
"BABEL_ENV": "test"
},
"autoAttachChildProcesses": true,
}
]
}
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"args": [
"."
]
},
{
"name": "Attach Debug",
"type": "node",
"request": "attach",
"cwd": "${workspaceFolder}",
"port": 9229
},
{
"name": "Test All",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/node_modules/.bin/_mocha",
"args": [
"--require", "babel-core/register",
"--timeout", "999999",
"--colors",
"${workspaceFolder}/test"
]
},
{
"name": "Test Current File",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/node_modules/.bin/_mocha",
"args": [
"--require", "babel-core/register",
"--timeout", "999999",
"--colors",
"${file}"
]
}
]
}
-14
View File
@@ -1,14 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"script": "dev",
"group": {"kind": "build", "isDefault": true},
"problemMatcher": ["$tsc-watch"],
"label": "npm: dev",
"detail": "npm run dev",
"isBackground": true
}
]
}
-61
View File
@@ -1,61 +0,0 @@
'use strict';
module.exports = (wallaby) => {
return {
compilers: {
'**/*.js': wallaby.compilers.babel(),
},
debug: true,
env: {
type: 'node',
},
files: [
'./packages/**/*.js',
'./packages/**/*.json',
'!./packages/**/build/**',
'!./packages/**/test/**/*-specs.js',
'!./packages/**/test/**/*.spec.js',
'!./packages/*/node_modules/**',
'!./packages/*/gulpfile.js',
'!./packages/*/scripts/**',
'./packages/*/test/**/fixtures/**/*',
'./babel.config.json',
// below this are fixtures
{
binary: true,
pattern: './packages/support/test/unit/assets/sample_binary.plist',
},
{
instrument: false,
pattern: './packages/support/test/unit/assets/sample_text.plist',
},
{
instrument: false,
pattern: './packages/base-driver/static/**/*',
},
'!**/local_appium_home/**',
],
testFramework: 'mocha',
tests: ['./packages/*/test/unit/**/*.spec.js'],
workers: {
restart: true,
},
setup() {
// This copied out of `./test/setup.js`, which uses `@babel/register`.
// Wallaby doesn't need `@babel/register` (and it probably makes Wallaby slow),
// but we need the other stuff, so here it is.
const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');
const sinonChai = require('sinon-chai');
// The `chai` global is set if a test needs something special.
// Most tests won't need this.
global.chai = chai.use(chaiAsPromised).use(sinonChai);
// `should()` is only necessary when working with some `null` or `undefined` values.
global.should = chai.should();
},
runMode: 'onsave',
};
};
+1 -324
View File
@@ -1,326 +1,3 @@
CHANGES IN VERSION 1.22.3 (FROM 1.22.2)
===================================
Appium 1.22.3 is a patch release
We're going to move to [Appium 2.x](https://github.com/appium/appium/blob/2.0/docs/en/about-appium/1.x-eol.md).
Appium 1.x will be receiving minor or patch releases only if XCTest gets breaking updates or major bugs pop up before the EOL.
### iOS(XCUITest)
- Fix failing screenshot issue in Xcode 13.3 and iOS 15.4 combination [WebDriverAgent#573](https://github.com/appium/WebDriverAgent/pull/573)
- Please read [the original issue](https://github.com/appium/appium/issues/16604) for more details
CHANGES IN VERSION 1.22.2 (FROM 1.22.1)
===================================
Appium 1.22.2 is a patch release
We're going to move to [Appium 2.x](https://github.com/appium/appium/blob/2.0/docs/en/about-appium/1.x-eol.md).
Appium 1.x will be receiving minor or patch releases only if XCTest gets breaking updates or major bugs pop up before the EOL.
### iOS(XCUITest)
- Add `safariTabBarPosition` settings api to help `nativeWebTap` capability/setting consider if the device has the tab bar at the top or at the bottom of Safari window. Please read `safariTabBarPosition` in [Settings API](https://github.com/appium/appium-xcuitest-driver#settings-api) for more details [appium-xcuitest-driver#1361](https://github.com/appium/appium-xcuitest-driver/pull/1361)
- Do not show the keyboard tutorial in iOS 15 environment for simulators [appium-ios-simulator#315](https://github.com/appium/appium-ios-simulator/pull/315)
- Fix to pass installation options in [Install App](http://appium.io/docs/en/commands/device/app/install-app/) command [appium-xcuitest-driver#1357](https://github.com/appium/appium-xcuitest-driver/pull/1357)
- Disable the default XCTest's notification checker to avoid [an issue on iOS 15.2](https://github.com/appium/appium/issues/16025) [WebDriverAgent#540](https://github.com/appium/WebDriverAgent/pull/540)
- Slightly improve the performance of XML source generation [appium-xcuitest-driver#1351](https://github.com/appium/appium-xcuitest-driver/pull/1351) [WebDriverAgent#544](https://github.com/appium/WebDriverAgent/pull/544)
CHANGES IN VERSION 1.22.1 (FROM 1.22.0)
===================================
Appium 1.22.1 is a patch release
We're going to move to [Appium 2.x](https://github.com/appium/appium/blob/2.0/docs/en/about-appium/1.x-eol.md).
Appium 1.x will be receiving minor or patch releases only if XCTest gets breaking updates or major bugs pop up before the EOL.
### General
* Enforce unzip with JS implementation when `APPIUM_PREFER_SYSTEM_UNZIP` environment variable is given as `0` or `false` [appium-base-driver#537](https://github.com/appium/appium-base-driver/pull/537)
* This change may fix [installation error in iOS simulators](https://github.com/appium/appium/issues/16050)
### Android General
* Use bundletool to install .apks packages [appium-adb#578](https://github.com/appium/appium-adb/pull/578)
* Handle unlock via `locksettings` adb command [appium-adb#577](https://github.com/appium/appium-adb/pull/577)
* Add a tiny delay after changing IME for Android 12 [appium-adb#581](https://github.com/appium/appium-adb/pull/581)
### Android(UIAutomator2)
* Add capabilities:
* `unlockStrategy` to customize the strategy of unlock. Defaults to `locksettings` on Android 8+, where this adb shell command is supported. The previous behavior is `uiautomator`.
* `chromeLoggingPrefs` to configure chrome logging preferences mapping [appium-android-driver#710](https://github.com/appium/appium-android-driver/pull/710)
* Add `mobile:` extensions:
* `mobile:unlock` to unlock the device as a mobile command [appium-android-driver#709](https://github.com/appium/appium-android-driver/pull/709)
* Fix `/appium/device/display_density` endpoint to get the device density on Android 12 by getting it via Android API instead of adb command [appium-uiautomator2-driver#474](https://github.com/appium/appium-uiautomator2-driver/pull/474) [appium-uiautomator2-server#444](https://github.com/appium/appium-uiautomator2-server/pull/444)
* XPath locators now support [XPath 2.0](https://www.w3.org/TR/xpath20/) specification. XPath 2.0 is backward compatible to v 1.0, which means the most of existing queries should still work as expected. However, more advanced queries might require updates due to the strict type checking. See [issues#16142](https://github.com/appium/appium/issues/16142) [appium-uiautomator2-server#442](https://github.com/appium/appium-uiautomator2-server/pull/442) for more details.
### iOS(XCUITest)
* Decode cookies safely in WebView context [appium-xcuitest-driver#1336](https://github.com/appium/appium-xcuitest-driver/pull/1336)
* Tune alert monitoring [appium-xcuitest-driver#1340](https://github.com/appium/appium-xcuitest-driver/pull/1340)
* Add capabilities:
* `appInstallStrategy` capability to customize the application installation strategy. `serial`, `parallel` and `ios-deploy` are available. Please read [capabilities](https://github.com/appium/appium-xcuitest-driver#app) for more details. This strategy is available via installation APIs as well.
* Add `mobile:` extensions:
* `mobile:listApps` to get the list of installed applications on the real device under test [appium-xcuitest-driver#1342](https://github.com/appium/appium-xcuitest-driver/pull/1342)
* Add `NSProcessInfoThermalState` in [mobile: deviceInfo](https://github.com/appium/appium-xcuitest-driver#mobile-deviceinfo) [WebDriverAgent#536](https://github.com/appium/WebDriverAgent/pull/536)
* Add `nativeWebTapTabBarVisibility` and `nativeWebTapTabBarVisibility` Settings API items to handle _tab bar_ and _smart app banner_ via Settings API [appium-xcuitest-driver#1345](https://github.com/appium/appium-xcuitest-driver/pull/1345) (Thanks @zcmgyu)
* Fix `useXctestrunFile` capability behavior on Xcode 13 [WebDriverAgent#538](https://github.com/appium/WebDriverAgent/pull/538)
* Fix caching elements from `execute_script` in WebView context [appium-xcuitest-driver#1350](https://github.com/appium/appium-xcuitest-driver/pull/1350)
* Fix `<` escape in the XML page source (`"appium:useJSONSource": false`) [appium-xcuitest-driver#1347](https://github.com/appium/appium-xcuitest-driver/pull/1347)
* Disable the build in notification checker by XCTest to avoid possible UI interuction failure on Xcode 13.2 and iOS 15.2 [WebDriverAgent#540](https://github.com/appium/WebDriverAgent/pull/540)
CHANGES IN VERSION 1.22.0 (FROM 1.21.0)
===================================
Appium 1.22.0 is a minor release
We're going to move to [Appium 2.x](https://github.com/appium/appium/blob/2.0/docs/en/about-appium/1.x-eol.md).
Appium 1.x will have minor or patch releases only when Appium 1.x gets breaking updates in XCTest or critical bugs before the EOL.
### General
* Add `imageMatchMethod` to be able to customize image mathcing method in [find element by image](http://appium.io/docs/en/advanced-concepts/image-elements/) [appium-base-driver#480](https://github.com/appium/appium-base-driver/pull/480) [appium-support#222](https://github.com/appium/appium-support/pull/222)
* `appium:enableWebviewDetailsCollection` capability defaults to `true` [appium-android-driver#699](https://github.com/appium/appium-android-driver/pull/699) (Thanks @mwakizaka)
* Support `satellites` option in `setGeoLocation` command as [geo command on emulators](https://developer.android.com/studio/run/emulator-console) [appium-adb#571](https://github.com/appium/appium-adb/pull/571)
* Use system unzip to unzip compressed files by default. It fallbacks to JS implementation. [appium-support#226](https://github.com/appium/appium-support/pull/226) [appium-support#227](https://github.com/appium/appium-support/pull/227)
### Android General
* Add `pinWithKeyEvent` option as `unlockType` in [unlock action](https://github.com/appium/appium-android-driver/blob/master/docs/UNLOCK.md) to send the pin code as keyevent [appium-android-driver#691](https://github.com/appium/appium-android-driver/pull/691)
* Allow to establish a chrome session with its `beta`, `dev` and `canary` [appium-android-driver#699](https://github.com/appium/appium-android-driver/pull/699) (Thanks @mwakizaka)
* Optimize error handling in certificate validation [appium-adb#572](https://github.com/appium/appium-adb/pull/572)
### Android(UIAutomator2)
* Add `mobile:` extensions:
* `mobile:startActivity` to launch an activity more flexible. Please read [mobile: startActivity](https://github.com/appium/appium-uiautomator2-driver#mobile-startactivity) for more details [appium-android-driver#701](https://github.com/appium/appium-android-driver/pull/701)
* `mobile: broadcast` to a send broadcast intent. Please read [mobile: broadcast](https://github.com/appium/appium-uiautomator2-driver#mobile-broadcast) for more details [appium-uiautomator2-driver/471](https://github.com/appium/appium-uiautomator2-driver/pull/471)
* `mobile: clearApp` to delete a package data via `adb shell pm clear` [appium-uiautomator2-driver#472](https://github.com/appium/appium-uiautomator2-driver/pull/472)
* Add active element support [appium-uiautomator2-driver#457](https://github.com/appium/appium-uiautomator2-driver/pull/457) [appium-uiautomator2-server#424](https://github.com/appium/appium-uiautomator2-server/pull/424) (Thanks @vane and @jzaleski)
### Android(Espresso)
* The default Kotlin plugin version is 1.4.32 [appium-espresso-driver#663](https://github.com/appium/appium-espresso-driver/pull/663)
* Fix typecast error in build config [appium-espresso-driver#683](https://github.com/appium/appium-espresso-driver/pull/683)
### iOS General
* Xcode 13 and iOS 15 support
### iOS(XCUITest)
* Add capabilities:
* `appium:useNativeCachingStrategy` to reduce a potential stale element error. Please read the capability in [XCUITest capabilities](https://github.com/appium/appium-xcuitest-driver#webdriveragent). Defaults to `true` [appium-xcuitest-driver#1317](https://github.com/appium/appium-xcuitest-driver/pull/1317)
* `appium:forceAppLaunch` to launch the application under test forcefully with `appium:bundleId`. Defaults to `true` unless `noReset` capability is set to `true`. [appium-xcuitest-driver#1314](https://github.com/appium/appium-xcuitest-driver/pull/1314)
* `appium:forceSimulatorSoftwareKeyboardPresence` to make force enabling simulator keyboard optional for simulator. Please read the section in [capabilities](https://github.com/appium/appium-xcuitest-driver#simulator) for more details. [appium-xcuitest-driver#1327](https://github.com/appium/appium-xcuitest-driver/pull/1327)
* `appium:resetLocationService` to reset the location service in the session deletion on real device. [appium-xcuitest-driver#1333](https://github.com/appium/appium-xcuitest-driver/pull/1333)
* Add `mobile:` extensions:
* `mobile:configureLocalization` to change localization settings on the currently booted simulator. Please read [configurelocalization](https://github.com/appium/appium-xcuitest-driver#mobile-configurelocalization) for more details [appium-xcuitest-driver#1300](https://github.com/appium/appium-xcuitest-driver/pull/1300)
* `mobile:resetLocationService` to reset the location service. [appium-xcuitest-driver#1333](https://github.com/appium/appium-xcuitest-driver/pull/1333)
* Add `durationSeconds` argument in `mobile: pressButton` for tvOS
* Add `getProperty` command to support [Get Element Property](https://www.w3.org/TR/webdriver/#dfn-get-element-property) endpoint. In native context, the command is equal to [Get Element Attribute](https://www.w3.org/TR/webdriver/#get-element-attribute) [appium-xcuitest-driver#1313](https://github.com/appium/appium-xcuitest-driver/pull/1313)
* Update parsing logic to parse `:wdc:` element id by Safari Web inspector in WebView context [appium-xcuitest-driver#1324](https://github.com/appium/appium-xcuitest-driver/pull/1324) [appium#15230](https://github.com/appium/appium/issues/15230)
* Probably the host macOS should have Safari 14.1
* Improve alert checking logic in Web context [appium-xcuitest-driver#1320](https://github.com/appium/appium-xcuitest-driver/pull/1320)
* Fix coordinate offset with `absoluteWebLocations` capability in Web context
[appium-xcuitest-driver#1322](https://github.com/appium/appium-xcuitest-driver/pull/1322)
* Fix element identification logic for over iOS 13 [WebDriverAgent#523](https://github.com/appium/WebDriverAgent/pull/523) (Thanks @Dan-Maor)
* This fix may improve page source results in some environment
* Fix visibility handling in `mobile:scroll` with `toVisible` argument [WebDriverAgent#528](https://github.com/appium/WebDriverAgent/pull/528) (Thanks @Dan-Maor)
* Fix `velocity` argument in `mobile:swipe` [appium-xcuitest-driver#1329](https://github.com/appium/appium-xcuitest-driver/pull/1329)
* Fix: `customSSLCert` capability logic [appium-xcuitest-driver#1334](https://github.com/appium/appium-xcuitest-driver/pull/1334)
### Mac2
* Add `macos:` extensions:
* Add support [swipe guestures](https://github.com/appium/appium-mac2-driver#mobile-swipe) [appium-mac2-driver#85](https://github.com/appium/appium-mac2-driver/pull/85)
* Add `language` option in `macos: appleScript` to be able to use other languages supported by `osascript` [appium-mac2-driver#89](https://github.com/appium/appium-mac2-driver/pull/89)
* Add support of touch bar interaction [appium-mac2-driver#87](https://github.com/appium/appium-mac2-driver/pull/87)
* Fix handling of libxml2 client to prevent memory leaks [appium-mac2-driver#86](https://github.com/appium/appium-mac2-driver/pull/86)
## Windows
* Add `windows:` extensions:
* [`deleteFile`](https://github.com/appium/appium-windows-driver#windows-deletefile) and [`deleteFolder`](https://github.com/appium/appium-windows-driver#windows-deletefolder) [appium-windows-driver#107](https://github.com/appium/appium-windows-driver/pull/107) (Thanks @ggaller)
* Add [push_file](https://appium.io/docs/en/commands/device/files/push-file/), [pull_file](https://appium.io/docs/en/commands/device/files/pull-file/), [pull_folder](https://appium.io/docs/en/commands/device/files/pull-folder/) [appium-windows-driver#107](https://github.com/appium/appium-windows-driver/pull/107) (Thanks @ggaller)
* Tune WAD install path lookup [appium-windows-driver#111](https://github.com/appium/appium-windows-driver/pull/111) (Thanks to notice us @blakee1)
### Community/Company based drivers
#### You.i Engine Driver
The version is `1.2.9`
#### Flutter driver
The version is `0.0.32`
CHANGES IN VERSION 1.21.0 (FROM 1.20.2)
===================================
Appium 1.21.0 is a minor release
### General
* Minimum NodeJS version moved to 12
* Support multiple image matches for [Finding and Interacting with Image Elements](http://appium.io/docs/en/advanced-concepts/image-elements/) [appium-base-driver#449](https://github.com/appium/appium-base-driver/pull/449) (@khaong)
### Android General
* Disable sending of Google analytics data by instruments [appium-uiautomator2-driver#452](https://github.com/appium/appium-uiautomator2-driver/pull/452), [appium-espresso-driver#666](https://github.com/appium/appium-espresso-driver/pull/666)
* Improve detection of screen lock status [appium/appium-adb#564](https://github.com/appium/appium-adb/pull/564)
* Add `speed` optional parameter to mock location [appium-android-driver#681](https://github.com/appium/appium-android-driver/pull/681) (Thanks to @salabogdan)
* Fix `autoLaunch` to install applications by `app` and `otherApps` capabilities, but does not launch them as same as iOS [appium-uiautomator2-driver#440](https://github.com/appium/appium-uiautomator2-driver/pull/440), [appium-espresso-driver#654](https://github.com/appium/appium-espresso-driver/pull/654), [appium-android-driver#676](https://github.com/appium/appium-android-driver/pull/676)
* Fix to handle special characters by `mobile:type` [appium-adb#567](https://github.com/appium/appium-adb/pull/567)
* Fix to switch to Web Views with same package name, but different process names [appium-android-driver#687](https://github.com/appium/appium-android-driver/pull/687)
* Fix to stop screen recording after a session is closed [appium-android-driver#675](https://github.com/appium/appium-android-driver/pull/675) and each driver
### Android(UIAutomator2)
* Add `mobile:` extensions:
* `mobile:doubleClickGesture` for double click guesture [appium-uiautomator2-driver#441](https://github.com/appium/appium-uiautomator2-driver/pull/441), [appium-uiautomator2-server#415](https://github.com/appium/appium-uiautomator2-server/pull/415)
* `mobile:installMultipleApks` to install multiple apks via `adb install-multiple` command. Please read [mobile:installMultipleApks](https://github.com/appium/appium-uiautomator2-driver/blob/master/README.md#mobile-installmultipleapks) for more details
* Fix XPath lookup for queries which have `@*` attribute pattern [appium-uiautomator2-server#417](https://github.com/appium/appium-uiautomator2-server/pull/417)
### Android(Espresso)
* Fix to raise an error in [Reset App](http://appium.io/docs/en/commands/device/app/reset-app/). It must quit the session and create a new one in Espresso driver. [appium-espresso-driver#649](https://github.com/appium/appium-espresso-driver/pull/649)
* Fix to reset instrumentation state before starting a new instance [appium-espresso-driver#662](https://github.com/appium/appium-espresso-driver/pull/662)
* Gradle wrapper has been rewritten using Kotlin DSL [appium-espresso-driver#658](https://github.com/appium/appium-espresso-driver/pull/658), [appium-espresso-driver#659](https://github.com/appium/appium-espresso-driver/pull/659) (Thanks to @misa)
### iOS General
* Xcode 12.5 support
### iOS(XCUITest)
* Add capabilities:
* `appium:includeDeviceCapsToSessionInfo` to skip adding the screen information in order to improve [Get Session Capabilities](http://appium.io/docs/en/commands/session/get/) API. `mobile:viewportRect` and `mobile:deviceScreenInfo` help to get these information when this capability is `false`. [appium-xcuitest-driver#1278](https://github.com/appium/appium-xcuitest-driver/pull/1278)
* `appium:disableAutomaticScreenshots` to handle automatic screenshot by XCTest. Defaults to `true` [appium-xcuitest-driver#1288](https://github.com/appium/appium-xcuitest-driver/pull/1288) (@mrmacete)
* `appium:shouldTerminateApp` to handle if Appium terminates the application under test process on the session end. Defaults to `true` [appium-xcuitest-driver#1290](https://github.com/appium/appium-xcuitest-driver/pull/1290), [WebDriverAgent#486/](https://github.com/appium/WebDriverAgent/pull/486/) (Thanks to @mrmacete)
* Add `mobile:` extensions:
* `mobile:viewportRect` returns the screen viewport information which is part of [Get Session Capabilities](http://appium.io/docs/en/commands/session/get/)
* `mobile:deviceScreenInfo` returns the screen information which is part of [Get Session Capabilities](http://appium.io/docs/en/commands/session/get/), [WebDriverAgent#483](https://github.com/appium/WebDriverAgent/pull/483)
* `mobile:pushNotification` to simulator push notification on simulator by `xcrun simctl push` command. It requires Xcode 11.4+. Please read [mobile:pushNotification](https://github.com/appium/appium-xcuitest-driver#mobile-pushnotification) for mroe details to trigger a push notification. [appium-xcuitest-driver#1286](https://github.com/appium/appium-xcuitest-driver/pull/1286/)
* `mobile:expectNotification` to wait for a notification on the device under test. Please read [mobile:expectNotification](https://github.com/appium/appium-xcuitest-driver#mobile-pushnotification) for more information on how to use it. [appium-xcuitest-driver#1287](https://github.com/appium/appium-xcuitest-driver/pull/1287) [WebDriverAgent#480](https://github.com/appium/WebDriverAgent/pull/480)
* `mobile:performIoHidEvent` to emulate low-level IO HID device events. Read [mobile:performIoHidEvent](https://github.com/appium/appium-xcuitest-driver#mobile-performiohidevent) for more details. [appium-xcuitest-driver#1291](https://github.com/appium/appium-xcuitest-driver/pull/1291), [WebDriverAgent#494](https://github.com/appium/WebDriverAgent/pull/494)
* Add css selector support [appium-xcuitest-driver#1274](https://github.com/appium/appium-xcuitest-driver/pull/1274)
* `css selector` selector will be converted to `-ios class chain` selector
* Support [Get Geolocation](https://appium.io/docs/en/commands/session/geolocation/get-geolocation/) API [appium-xcuitest-driver#1266](https://github.com/appium/appium-xcuitest-driver/pull/1266)
* _Allow Location Access_ in _Location Services_ for _WebDriverAgent-Runner_ must be set to **Always**
* Add `accessible` attribute field into the XML page source [WebDriverAgent#493](https://github.com/appium/WebDriverAgent/pull/493) (Thanks to @TheDarkestDay)
* Improve performance of the keyboard dismissal logic [appium-xcuitest-driver#1267](https://github.com/appium/appium-xcuitest-driver/pull/1267), [WebDriverAgent#458](https://github.com/appium/WebDriverAgent/pull/458)
* Fix performance degradation of interaction in `nativeWebTap:true` [appium-xcuitest-driver/pull/1265](https://github.com/appium/appium-xcuitest-driver#1265)
### Mac2
* Add capabilities:
* `appium:webDriverAgentMacUrl` to allow Appium to connect to a running WebDriverAgentMac instance at this URL [appium-mac2-driver#41](https://github.com/appium/appium-mac2-driver/pull/41)
* Add a possibility to provide key names for `macos:keys` extension [appium-mac2-driver#60](https://github.com/appium/appium-mac2-driver/pull/60)
* Add `hittable` attribute field into the XML page source [appium-mac2-driver#65](https://github.com/appium/appium-mac2-driver/pull/65)
* More fine-grained handling of orphaned xcodebuild processes [appium-mac2-driver#73](https://github.com/appium/appium-mac2-driver/pull/73)
### You.i Engine Driver
The version is `1.2.8`
### Community based drivers
#### Flutter driver
The version is `0.0.28`
#### New drivers
Add the ability to load `appium-roku-driver`([appium#15227](https://github.com/appium/appium/pull/15227)) and `appium-webos-driver`([appium#15260](https://github.com/appium/appium/pull/15260)) by @cbuelvasc
CHANGES IN VERSION 1.20.2 (FROM 1.20.1)
===================================
Appium 1.20.2 is a patch release
### Android(UIAutomator2)
* Fix element caching performance [appium-uiautomator2-server#406](https://github.com/appium/appium-uiautomator2-server/pull/406)
CHANGES IN VERSION 1.20.1 (FROM 1.20.0)
===================================
Appium 1.20.1 is a patch release
### Android(UIAutomator2)
* Fix setting the session capabilities [appium-uiautomator2-server#404](https://github.com/appium/appium-uiautomator2-server/pull/404)
CHANGES IN VERSION 1.20.0 (FROM 1.19.1)
===================================
Appium 1.20.0 is a minor release
### General
* Does not destory sockets explicitly against a client [appium-base-driver#437](https://github.com/appium/appium-base-driver/pull/437)
* Connection timeout to each driver respects `--keep-alive-timeout` configuration [appium-base-driver#443](https://github.com/appium/appium-base-driver/pull/443). Default to 10 minutes
### Android General
* `InvalidContextError` error is thrown if running instrumentation process was dead
* Fix Android emulator config paths on Windows [appium-adb#558](https://github.com/appium/appium-adb/pull/558)
### Android(UIAutomator2)
* Appium adds `io.appium.settings`, `io.appium.uiautomator2.server` and `io.appium.uiautomator2.server.test` as the device's Doze whitelist to keep working [appium-uiautomator2-driver#420](https://github.com/appium/appium-uiautomator2-driver/pull/420)
* Add settings:
* `useResourcesForOrientationDetection` to use application resource propertires to determine the current device orientation [appium-uiautomator2-server#389](https://github.com/appium/appium-uiautomator2-server/pull/389)
### Android(Espresso)
* Appium adds `io.appium.settings` and `io.appium.espressoserver.test` as the device's Doze whitelist to keep working [appium-espresso-driver#627](https://github.com/appium/appium-espresso-driver/pull/627)
* Add `mobile:` extensions:
* `uiautomatorPageSource` returns the page source dump by UIAutomator [appium-espresso-driver#628](https://github.com/appium/appium-espresso-driver/pull/628)
* Improves XPath lookup performance [appium-espresso-driver#637](https://github.com/appium/appium-espresso-driver/pull/637)
### iOS General
* Fix updating simulator preference method [appium-ios-simulator#298](https://github.com/appium/appium-ios-simulator/pull/298)
### iOS(XCUITest)
* Support M1 chip based Mac, Xcode 12.3
* Snapshots caching logic has been rewritten to improve lookup performance e.g. [WebDriverAgent#404](https://github.com/appium/WebDriverAgent/pull/404), [WebDriverAgent#407](https://github.com/appium/WebDriverAgent/pull/407)
* Breaking changes
* Support over Xcode 10.2, iOS 12.2 (Drop supporting Xcode 10.0 and 10.1)
* `accessibility id`, `name` and `id` lookup strategies now find elements by `name`(`wdName`) attributes in page source: [WebDriverAgent#414](https://github.com/appium/WebDriverAgent/pull/414)
* Previously, they found elements by `name`(`wdName`) and `value`(`wdValue`)
* Please use `predicate` strategy to find `value`(`wdValue`) attribute like [this change](https://github.com/appium/ruby_lib_core/pull/282)
* Add capabilities:
* `resultBundlePath` and `resultBundleVersion` to allow to specify the path to the result bundle of WebDriverAgent xcodebuild [WebDriverAgent#410](https://github.com/appium/WebDriverAgent/pull/410)
* `safariIgnoreWebHostnames` to provide a list of hostnames that the Safari automation tools should ignore [appium-xcuitest-driver#1258](https://github.com/appium/appium-xcuitest-driver/pull/
1258)
* `waitForIdleTimeout` (Please read the below settings section)
* Add settings: (Please read [Settings API](http://appium.io/docs/en/advanced-concepts/settings/index.html) for more details)
* `customSnapshotTimeout` which was renamed from `snapshotTimeout` sets how much time is allowed to resolve a single accessibility snapshot with custom attributes
* `waitForIdleTimeout` to customize the time for waiting until the application under test is idling
* The value `zero` (not recommended) is equal to `waitForQuiescence` to `false`
* **Important**: this is still a workaround, so there is no guarantee it is going to always work. Please consider rather fixing your application source code, because XCTest uses idle intervals to send commands to the accessibility manager. You may get unexpected testing results or application crashes if such intervals don't exist or are too tiny.
* `animationCoolOffTimeout` customize the timeout to wait until the application under test has no animation
* Add a possibility to select elements by indexes [WebDriverAgent#417](https://github.com/appium/WebDriverAgent/pull/417)
* Fix parsing SSL output from OpenSSL output [appium-xcuitest-driver#1256](https://github.com/appium/appium-xcuitest-driver/pull/1256)
### iOS(Safari)
This driver provides you to communicate with Apple's `safaridriver` binary via Appium.
It only supports Safari browser automation on macOS and iOS (Simulator/Real Device).
Read https://github.com/appium/appium-safari-driver for more details.
### Mac2
This driver provides you to handle macOS native applications with Apple's `XCTest` framework.
Read https://github.com/appium/appium-mac2-driver for more details.
### Gecko
This driver provides you to communicate with Firefox browsers on macOS, Windows, Linux and Android with geckodriver binary via Appium.
Read https://github.com/appium/appium-geckodriver for more details to set the environment up.
CHANGES IN VERSION 1.19.1(FROM 1.19.0)
===================================
Appium 1.19.1 is a patch release
### iOS(XCUITest)
Patches "missing target for targetId" bug in Safari tests (see [#14867](https://github.com/appium/appium/issues/14867))
CHANGES IN VERSION 1.19.0 (FROM 1.18.3)
===================================
@@ -381,7 +58,7 @@ Appium 1.19.0 is a minor release
### Flutter
The version is `0.25`
The version is `0.0.25`
### You.i Engine Driver
+34 -165
View File
@@ -1,184 +1,51 @@
## Appium
[![NPM version](https://badge.fury.io/js/appium.svg)](https://npmjs.org/package/appium)
[![Dependency Status](https://david-dm.org/appium/appium.svg)](https://david-dm.org/appium/appium)
[![devDependency Status](https://david-dm.org/appium/appium/dev-status.svg)](https://david-dm.org/appium/appium#info=devDependencies)
[![Monthly Downloads](https://img.shields.io/npm/dm/appium.svg)](https://npmjs.org/package/appium)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium?ref=badge_shield)
[![StandWithUkraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://github.com/vshymanskyy/StandWithUkraine/)
[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://vshymanskyy.github.io/StandWithUkraine/)
Appium is an open-source, cross-platform test automation tool for native,
hybrid, mobile web and desktop apps. We support simulators (iOS), emulators
hybrid, and mobile web and desktop apps. We support simulators (iOS), emulators
(Android), and real devices (iOS, Android, Windows, Mac).
Want to skip straight to the action? Check out our [getting started](/docs/en/about-appium/getting-started.md) doc.
Want to skip straight to the action? Check out our [getting
started](/docs/en/about-appium/getting-started.md) doc.
### Drivers
### Supported Platforms
Appium supports app automation across a variety of platforms, like iOS,
Android, and Windows. Each platform is supported by one or more "drivers",
which know how to automate that particular platform. Since version 2.0
all drivers have been isolated from the Appium server app and can
be managed independently using the [appium driver](https://appiumpro.com/editions/122-installing-appium-20-and-the-driver-and-plugins-cli) command line interface.
which know how to automate that particular platform. Choose a driver below for
specific information about how that driver works and how to set it up:
In general, the drivers management in Appium 2 is as simple as:
```bash
# To install a new driver from npm
appium driver install --source=npm appium-xcuitest-driver[@<version>]
# To install a driver from a local folder (useful for developers)
appium driver install --source=local /Users/me/sources/appium-xcuitest-driver
# To install a new driver from github (hm, maybe it's time to publish it to NPM?)
appium driver install --source=github appium/appium-xcuitest-driver
# To list already installed drivers
appium driver list --installed
# To update a driver (it must be already installed)
appium driver update xcuitest
# To uninstall a driver (it won't last forever, wouldn't it?)
appium driver uninstall xcuitest
```
#### Drivers Maintained By The Appium Team
These drivers are supported by Appium core members. Please report any issues
or suggestions regarding them to the corresponding GitHub issue tracker.
Refer to the corresponding driver Readme to know more on how to use it and its requirements.
Name | Description
--- | ---
[appium-xcuitest-driver](https://github.com/appium/appium-xcuitest-driver) | Allows automation of iOS native and web apps (via hybrid mode). Also supports tvOS. This driver is based on Apple's [XCTest framework](https://developer.apple.com/documentation/xctest) and can only use macOS as the host system.
[appium-uiautomator2-driver](https://github.com/appium/appium-uiautomator2-driver) | Allows automation of Android native and web apps (via hybrid mode). The driver is based on Google's [UiAutomator](https://developer.android.com/training/testing/other-components/ui-automator) framework.
[appium-espresso-driver](https://github.com/appium/appium-espresso-driver) | Allows automation of Android native apps. The driver is based on Google's [Espresso](https://developer.android.com/training/testing/espresso) framework.
[appium-mac2-driver](https://github.com/appium/appium-mac2-driver) | Allows automation of macOS native apps. Also supports tvOS. This driver is based on Apple [XCTest framework](https://developer.apple.com/documentation/xctest) and can only use macOS as the host system.
[appium-windows-driver](https://github.com/appium/appium-windows-driver) | Allows automation of Windows native and UWP apps. This driver is based on Microsoft's [WinAppDriver](https://github.com/microsoft/WinAppDriver) implementation and can only use Windows 10 as the host system.
[appium-gecko-driver](https://github.com/appium/appium-geckodriver) | Allows automation of Gecko-engine-based browsers, like Firefox on mobile and desktop platforms. Uses [geckodriver](https://github.com/mozilla/geckodriver/releases) command line tool provided by Mozilla for various platforms.
[appium-safari-driver](https://github.com/appium/appium-safari-driver) | Allows automation of Safari browser on mobile and desktop platforms . Uses the [safaridriver](https://www.manpagez.com/man/1/safaridriver/) command line tool provided by Apple as part of macOS.
#### Drivers Provided By Third Parties
These drivers are supported by different companies or communities.
Please report any issues related to their functionality to their
respective maintainers. If you are a developer yourself and have created a new useful
Appium2-compatible driver then don't hesitate to create a PR and add a link to
your driver into the below list.
<details>
<summary>Drivers List</summary>
Name | Description
--- | ---
[appium-youiengine-driver](https://github.com/YOU-i-Labs/appium-youiengine-driver) | Appium You.i Engine Driver is a test automation tool for devices of various platforms running applications built with [You.i Engine](http://www.youi.tv/youi-engine/)
[appium-flutter-driver](https://github.com/appium-userland/appium-flutter-driver) | Allows automation of apps built using [Flutter](https://flutter.dev/) framework
[appium-tizen-driver](https://github.com/Samsung/appium-tizen-driver) | Allows automation of apps built for devices running [Tizen OS](https://www.tizen.org/)
</details>
### Plugins
The concept of plugins is something new that has been added exclusively to Appium2. Plugins allow you to extend server functionality without changing the server code. Plugins could be managed similarly to drivers:
```bash
# To install an officially supported plugin
appium plugin install images
# To install a plugin from a local folder (useful for developers)
appium plugin install --source=local /Users/me/sources/images
# To install a new plugin from npm
appium plugin install --source=npm appium-device-farm
# To list already installed plugins
appium plugin list --installed
# To update a plugins (it must be already installed)
appium plugin update appium-device-farm
# To uninstall a plugin
appium plugin uninstall appium-device-farm
```
The main difference between drivers and plugins is that the latter must be explicitly enabled on server startup after it was installed (drivers are enabled by default after installation):
```bash
appium server --use-plugins=device-farm,images
```
#### Plugins Maintained By The Appium Team
These plugins are supported by Appium core members. Please report any issues
or suggestions regarding them to the corresponding GitHub issue tracker.
Refer to the corresponding plugin Readme to know more on how to use it.
Name | Description
--- | ---
[images](https://github.com/appium/appium/tree/master/packages/images-plugin) | This is an official Appium plugin designed to facilitate image comparison, visual testing, and image-based functional testing.
[relaxed-caps](https://github.com/appium/appium/tree/master/packages/relaxed-caps-plugin) | With the advent of Appium 2.0, the Appium server begins to require that all capabilities conform to the W3C requirements for capabilities. Among these requirements is one that restricts capabilities to those found in a predetermined set. Appium supports many additional capabilities as extension capabilities, and these must be accessed with the prefix appium: in front of the capability name. There are a lot of test scripts out there that don't conform to the requirement, and so this plugin is designed to make it easy to keep running these scripts even with the new stricter capabilities requirements beginning with Appium 2.0. Basically, it inserts the appium: prefix for you!
[universal-xml](https://github.com/appium/appium/tree/master/packages/universal-xml-plugin) | This is an official Appium plugin designed to make XML source retrieved from iOS and Android use the same node and attribute names, to facilitate cross-platform test writing.
#### Plugins Provided By Third Parties
These plugins are supported by different companies or communities.
Please report any issues related to their functionality to their
respective maintainers. If you are a developer yourself and have created a new useful
plugin then don't hesitate to create a PR and add a link to your plugin into the below list.
<details>
<summary>Plugins List</summary>
Name | Description
--- | ---
[appium-device-farm](https://github.com/AppiumTestDistribution/appium-device-farm) | This is an Appium plugin designed to manage and create driver session on connected android devices and iOS Simulators.
</details>
### Server Command Line Interface
In order to start sending commands to Appium over the wire it must be listening
on the URL where your client library expects it to listen.
Use the following commands to run and configure Appium server:
```bash
# Start the server on the default port and host (e.g. http://0.0.0.0:4723/)
appium server
# Start the server on the given port, host and use the base path prefix (the default prefix is /)
appium server -p 9000 -a 127.0.0.1 -pa /wd/hub
# Get the list of all supported command line parameters.
# This list would also include descriptions of driver-specific
# command line arguments for all installed drivers.
# Each driver and plugin must have their command line arguments
# exposed in a special JSON schema declared as a part of the corresponding
# package.json file.
appium server --help
```
Appium supports execution of parallel server processes as well as parallel driver sessions within
single server process. Refer the corresponding driver documentations regarding which mode is optimal
for the particular driver or whether it supports parallel sessions.
* iOS
* The [XCUITest Driver](/docs/en/drivers/ios-xcuitest.md)
* (DEPRECATED) The [UIAutomation Driver](/docs/en/drivers/ios-uiautomation.md)
* Android
* The [Espresso Driver](/docs/en/drivers/android-espresso.md)
* The [UiAutomator2 Driver](/docs/en/drivers/android-uiautomator2.md)
* (DEPRECATED) The [UiAutomator Driver](/docs/en/drivers/android-uiautomator.md)
* The [Windows Driver](/docs/en/drivers/windows.md) (for Windows Desktop apps)
* The [Mac Driver](/docs/en/drivers/mac.md) (for Mac Desktop apps)
### Why Appium?
1. You usually don't have to recompile your app or modify it in any way, due
1. You don't have to recompile your app or modify it in any way, due
to the use of standard automation APIs on all platforms.
2. You can write tests with your favorite dev tools using any
[WebDriver](https://w3c.github.io/webdriver/webdriver-spec.html)-compatible
language such as [Java](https://github.com/appium/java-client),
[JavaScript](https://webdriver.io/), [Python](https://github.com/appium/python-client),
[Ruby](https://github.com/appium/ruby_lib), [C#](https://github.com/appium/appium-dotnet-driver)
with the Selenium WebDriver API. There are also various third party
client implementations for other languages.
language such as Java, Objective-C, JavaScript (Node), PHP, Python, Ruby,
C#, Clojure, or Perl with the Selenium WebDriver API and [language-specific
client libraries](/docs/en/about-appium/appium-clients.md).
3. You can use any testing framework.
4. Some drivers, like xcuitest and uiautomator2 ones have built-in mobile web and
hybrid app support. Within the same script, you can switch seamlessly between native
app automation and webview automation, all using the WebDriver model that's already
the standard for web automation.
5. You can run your automated tests locally and in a cloud. There are multiple
cloud providers that support various Appium drivers (mostly
targeting iOS and Android mobile automation).
6. [Appium Inspector](https://github.com/appium/appium-inspector) allows
visual debugging of automated tests and could be extremely useful for
beginners.
4. Appium has built-in mobile web and hybrid app support. Within the same
script, you can switch seamlessly between native app automation and webview
automation, all using the WebDriver model that's already the standard for
web automation.
Investing in the
[WebDriver](https://w3c.github.io/webdriver/webdriver-spec.html) protocol means
@@ -192,14 +59,15 @@ Java/Kotlin. Appium opens up the possibility of true cross-platform native app
automation, for mobile and beyond. Finally!
If you're new to Appium or want a more comprehensive description of what this is all
about, please read our [Introduction to Appium Concepts](/docs/en/about-appium/intro.md).
about, please read our [Introduction to Appium
Concepts](/docs/en/about-appium/intro.md).
### Requirements
Your environment needs to be set up for the particular platforms that you want
to run tests on. Each of the drivers above documents the requirements for their
particular brand of automation. At a minimum, you will need to be able to run
the recent [LTS](https://nodejs.org/en/about/releases/) Node.js version.
Node.js 10+.
### Get Started
@@ -237,13 +105,14 @@ Interested in where Appium is heading in the future? Check out the [Roadmap](ROA
### User Forums
Announcements and debates often take place on the [Discussion Group](https://discuss.appium.io),
be sure to sign up!
Announcements and debates often take place on the [Discussion
Group](https://discuss.appium.io), be sure to sign up!
### Troubleshooting
We put together a [troubleshooting guide](/docs/en/writing-running-appium/other/troubleshooting.md).
Please have a look here first if you run into any problems. It contains instructions for checking
We put together a [troubleshooting
guide](/docs/en/writing-running-appium/other/troubleshooting.md). Please have a look
here first if you run into any problems. It contains instructions for checking
a lot of common errors and how to get in touch with the community if you're
stumped.
-32
View File
@@ -1,32 +0,0 @@
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "14"
},
"shippedProposals": true
}
]
],
"plugins": ["source-map-support", "@babel/plugin-transform-runtime"],
"comments": false,
"sourceMaps": "both",
"env": {
"coverage": {
"plugins": [
[
"istanbul",
{
"exclude": ["test", "build"]
}
]
]
},
"test": {
"retainLines": true,
"comments": true
}
}
}
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env node
/* eslint no-console:0 */
/*
* Small tool, launching and monitoring ios-web-kit-proxy, and relaunching
* on predefined errors.
*
* Usage:
* ./bin/ios-webkit-debug-proxy-launcher.js [args]
* args: ios-webkit-debug-proxy args (they will be passed over)
*
* Example:
* ./bin/ios-webkit-debug-proxy-launcher.js -c <UDID>:27753 -d
*
* Note:
* For iOS8.1 try this first:
* brew install --HEAD ideviceinstaller
*/
'use strict';
const spawn = require('child_process').spawn;
const _ = require('lodash');
const args = process.argv.slice(2);
const RESTART_ON_MESSAGES = [
'Invalid message _rpc_applicationUpdated',
'Invalid message _rpc_applicationSentListing'];
const PROXY_CMD = 'ios_webkit_debug_proxy';
let proxy;
const handleKillProcess = function (exitCode) {
console.log('\nKilling proxy process!');
proxy.kill('SIGTERM');
process.exit((exitCode || 0));
};
const startProxy = function () {
console.log(`RUNNING: ${PROXY_CMD} ${args.join(' ')}`);
proxy = spawn(PROXY_CMD, args);
proxy.stdout.on('data', function onStdout (data) {
console.log(`stdout: ${data}`);
});
proxy.stderr.on('data', function onStderr (data) {
console.log(`stderr: ${data}`);
const restartMessage = _(RESTART_ON_MESSAGES).find(function findMessage (message) {
return ('' + data).indexOf(message) >= 0;
});
if (restartMessage) {
console.log(`Detected error message: ${restartMessage}`);
console.log('Killing proxy!');
proxy.kill('SIGTERM');
process.nextTick(startProxy);
}
});
proxy.on('close', function onClose (code) {
console.log(`Child process exited with code ${code}`);
});
};
process.on('SIGINT', handleKillProcess);
process.on('SIGTERM', handleKillProcess);
startProxy();
+4 -13
View File
@@ -1,18 +1,11 @@
#!/usr/bin/env node
const path = require('path');
const childProcess = require('child_process');
const _ = require('lodash');
const res = JSON.parse(
childProcess.execSync('npm pack --dry-run --json --ignore-scripts', {
cwd: path.join(__dirname, '..'),
encoding: 'utf8',
})
)[0];
const res = JSON.parse(childProcess.execSync('npm pack --dry-run --json --ignore-scripts', {encoding: 'utf8'}))[0];
// List of files we are testing to make sure they are included in package
const testFiles = [
'npm-shrinkwrap.json', // Check that npm-shrinkwrap.json is being packed
'LICENSE', // Check that license is included
'build/lib/appium.js', // Sanity check that build files are being included by testing just one file
];
@@ -21,10 +14,8 @@ const testFiles = [
const missingFiles = _.without(testFiles, ..._.map(res.files, 'path'));
if (!_.isEmpty(missingFiles)) {
throw new Error(
`Files [${missingFiles.join(', ')}] are not included in package.json "files". ` +
`Please make sure these files are included before publishing.`
);
throw new Error(`Files [${missingFiles.join(', ')}] are not included in package.json "files". ` +
`Please make sure these files are included before publishing.`);
}
process.exit(0);
+25
View File
@@ -0,0 +1,25 @@
const _ = require('lodash');
const { asyncify } = require('asyncbox');
const { fs, logger } = require('appium-support');
const path = require('path');
const log = new logger.getLogger('ShrinkwrapValidator');
async function main () {
const shrinkwrapPath = path.resolve('npm-shrinkwrap.json');
if (!(await fs.exists(shrinkwrapPath))) {
log.info('No shrinkwrap found. Skipping shrinkwrap check');
return;
}
const shrinkwrap = JSON.parse(await fs.readFile(shrinkwrapPath));
const backupShrinkwrap = JSON.parse(await fs.readFile(path.resolve('npm-shrinkwrap-backup.json')));
log.info('Checking that pruned shrinkwrap is a subset of primary shrinkwrap');
if (!_.isMatch(backupShrinkwrap, shrinkwrap)) {
log.errorAndThrow('Pruned shrinkwrap (shrinkwrap with dev dependencies removed) is not a subset of the original npm-shrinkwrap.json');
}
log.info('Shrinkwrap check passed');
}
if (require.main === module) {
asyncify(main);
}
+29
View File
@@ -0,0 +1,29 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
- script: npm install
displayName: NPM install
- script: |
git remote add triager https://triager:$GITHUB_TOKEN@github.com/appium/appium
git checkout -b $MINOR_BRANCH_NAME
git status
node ./ci-jobs/scripts/set-package-json-version
rm -rf package-lock.json
npm shrinkwrap
git add .
git commit -n -m "Set version to $(MINOR_BRANCH_NAME).0-rc.0"
git push -u triager $MINOR_BRANCH_NAME
displayName: Create branch
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
MINOR_BRANCH_NAME: $(MINOR_BRANCH_NAME)
- script: |
git tag $MINOR_BRANCH_NAME.0-rc.0
git push --tags -u triager
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc
npm publish --tag $(node ./ci-jobs/scripts/parse-tag)
env:
NPM_TOKEN: $(NPM_TOKEN)
displayName: Tag and Publish
+2 -2
View File
@@ -1,3 +1,3 @@
const semver = require('semver');
const {version} = require('../../package.json');
console.log(semver(version).prerelease[0]); //eslint-disable-line no-console
const { version } = require('../../package.json');
console.log(semver(version).prerelease[0]); //eslint-disable-line no-console
+5 -5
View File
@@ -1,17 +1,17 @@
const path = require('path');
const {fs, logger} = require('appium-support');
const {asyncify} = require('asyncbox');
const { fs, logger } = require('appium-support');
const { asyncify } = require('asyncbox');
const packageJson = require('../../package.json');
const log = new logger.getLogger('Create Release Branch:');
async function setPackageJsonVersion(version = `${process.env.MINOR_BRANCH_NAME}.0-rc.0`) {
async function setPackageJsonVersion (version = `${process.env.MINOR_BRANCH_NAME}.0-rc.0`) {
packageJson.version = version;
log.info(`Setting version to: ${version}`);
await fs.writeFile(
path.resolve(__dirname, '..', '..', 'package.json'),
JSON.stringify(packageJson, null, 2),
'utf8'
'utf8',
);
}
@@ -19,4 +19,4 @@ if (require.main === module) {
asyncify(setPackageJsonVersion);
}
module.exports = setPackageJsonVersion;
module.exports = setPackageJsonVersion;
+8 -1
View File
@@ -12,8 +12,15 @@ jobs:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
- script: npm install
- script: npm ci || npm install # "npm ci" if shrinkwrap is present
displayName: Install NPM Dependencies
- script: |
pushd node_modules/appium-webdriveragent
carthage bootstrap --no-use-binaries
cp Cartfile.resolved Carthage
mkdir -p ./Resources/WebDriverAgent.bundle
popd
displayName: Fully build XCUITestDriver
- script: npm run build
displayName: npm run build
- script: npm prune --production
+22
View File
@@ -0,0 +1,22 @@
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
## Appium API Documentation
{{#if path}}
### {{path}}
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
{{/if}}
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
<div class="api-index">
{{#*inline "commands"}}
{{#each commands}}
<li>{{#if commands}}<a href='{{path}}'>{{name}}</a><ul>{{>commands}}</ul>{{else}}<a href='{{path}}'>{{name}}</a>{{/if}}</li>
{{/each}}
{{/inline}}
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
<ul>
{{>commands}}
</ul>
</div>
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
@@ -0,0 +1,88 @@
---
name: Get Current Context
short_description: Get the current context in which Appium is running
description:
>
Retrieve the current context. This can be either `NATIVE_APP` for the native
context, or a web view context, which will be:
* iOS - `WEBVIEW_<id>`
* Android - `WEBVIEW_<package name>`
For information on contexts, see Appium's [hybrid automation docs](/docs/en/writing-running-appium/web/hybrid.md).
example_usage:
java:
|
String context = driver.getContext();
python:
|
context = driver.current_context
# or
context = driver.context
javascript_wd:
|
let context = await driver.currentContext();
javascript_wdio:
|
let context = driver.getContext();
ruby:
|
context = current_context
ruby_core:
context = @driver.current_context
php:
|
$context = $driver->context();
csharp:
|
string Context = driver.Context;
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/AppiumDriver.html#getContext--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.context.Context.current_context"
javascript_wdio: "https://webdriver.io/docs/api/mjsonwp.html#getcontext"
javascript_wd: "https://github.com/admc/wd/blob/master/doc/api.md"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_context-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_context-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/context
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: String
description: The name of the current context
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts
@@ -0,0 +1,93 @@
---
name: Get All Contexts
short_description: Get all the contexts available to automate
description:
>
Retrieve all the contexts available to be automated. This will include, at
least, the native context. There can also be zero or more web view contexts.
For information on the format of the context names, see the [get context
documentation](/docs/en/commands/context/get-context.md).
[mobile command](/docs/en/commands/mobile-command.md)
`mobile: getContexts` is available on iOS (XCUITest) and Android
(UIAutomator2 and Espresso) to get more detailed contexts.
For information on contexts, see Appium's [hybrid automation docs](/docs/en/writing-running-appium/web/hybrid.md).
example_usage:
java:
|
Set<String> contextNames = driver.getContextHandles();
python:
|
contexts = driver.contexts
javascript_wd:
|
let contexts = await driver.contexts();
javascript_wdio:
|
let contexts = driver.getContexts();
ruby:
|
context = available_contexts
ruby_core:
|
context = @driver.available_contexts
php:
|
$contexts = $driver->contexts();
csharp:
|
List<string> AllContexts = new List<string>();
foreach (var context in (driver.Contexts))
{
AllContexts.Add(context);
}
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/AppiumDriver.html#getContextHandles--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.context.Context.contexts"
javascript_wdio: "https://webdriver.io/docs/api/mjsonwp.html#getcontexts"
javascript_wd: "https://github.com/admc/wd/blob/master/doc/api.md"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#available_contexts-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#available_contexts-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/contexts
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: Array<String>
description: Array of the names of all available contexts
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts
@@ -0,0 +1,118 @@
---
name: Set Current Context
short_description: Set the context being automated
description:
>
Set the current context to that passed in. If this is moving into a web view
context it will involve attempting to connect to that web view:
* iOS - attempt to connect to the application through the remote debugger
* Android - start a [Chromedriver](/docs/en/writing-running-appium/web/chromedriver.md)
process and begin a session to connect to the web view
For information on contexts, see Appium's [hybrid automation docs](/docs/en/writing-running-appium/web/hybrid.md).
example_usage:
java:
|
Set<String> contextNames = driver.getContextHandles();
driver.context(contextNames.toArray()[1]);
// ...
driver.context("NATIVE_APP");
python:
|
webview = driver.contexts[1]
driver.switch_to.context(webview)
# ...
driver.switch_to.context('NATIVE_APP')
javascript_wd:
|
let contexts = await driver.contexts();
await driver.context(contexts[1]);
// ...
await driver.context('NATIVE_APP');
javascript_wdio:
|
let contexts = driver.getContexts();
driver.switchContext(contexts[1]);
// ...
driver.switchContext('NATIVE_APP');
ruby:
|
webview = available_contexts[1]
set_context(webview)
# ...
set_context('NATIVE_APP')
ruby_core:
|
webview = @driver.available_contexts[1]
@driver.set_context(webview)
# ...
@driver.set_context('NATIVE_APP')
php:
|
$contexts = $driver->contexts();
$driver->context($contexts[1]);
// ...
$driver->context('NATIVE_APP');
csharp:
|
// Switch to specific webview
List<string> AllContexts = new List<string>();
foreach (var context in (driver.Contexts))
{
AllContexts.Add(context);
}
driver.Context = (AllContexts[1]);
// Switch to NATIVE_APP
driver.Context = ("NATIVE_APP");
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/AppiumDriver.html#context-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.context.Context.context"
javascript_wdio: "https://webdriver.io/docs/api/mjsonwp.html#switchcontext"
javascript_wd: "https://github.com/admc/wd/blob/master/doc/api.md"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#set_context-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#set_context-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/context
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: name
type: String
description: The name of the context to which to change
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts
@@ -0,0 +1,77 @@
---
name: Get Current Activity
short_description: Get the name of the current Android activity
example_usage:
java:
|
String activity = driver.currentActivity();
python:
|
activity = self.driver.current_activity;
javascript_wd:
|
let activity = await driver.getCurrentActivity();
javascript_wdio:
|
let activity = driver.getCurrentActivity();
ruby:
|
current_activity
ruby_core:
|
@driver.current_activity
php:
|
$activity = $driver->currentActivity();
csharp:
|
string activity = driver.CurrentActivity;
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/StartsActivity.html#currentActivity--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.activities.Activities.current_activity"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getcurrentactivity"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2519"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_activity-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_activity-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/current_activity
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: string
description: Name of the current [activity](https://developer.android.com/reference/android/app/Activity.html)
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L366
@@ -0,0 +1,77 @@
---
name: Get Current Package
short_description: Get the name of the current Android package
example_usage:
java:
|
String package = driver.getCurrentPackage();
python:
|
package = self.driver.current_package;
javascript_wd:
|
let package = await driver.getCurrentPackage();
javascript_wdio:
|
let package = driver.getCurrentPackage();
ruby:
|
current_package
ruby_core:
|
@driver.current_package
php:
|
// TODO PHP sample
csharp:
|
string package = driver.CurrentPackage;
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/StartsActivity.html#getCurrentPackage--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.common.Common.current_package"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2526"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getcurrentpackage"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_package-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_package-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: false
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/current_package
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: string
description: Name of the current [package](https://developer.android.com/reference/java/lang/Package.html)
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L369
@@ -0,0 +1,103 @@
---
name: Start Activity
short_description: Start an Android activity by providing package name and activity name
example_usage:
java:
|
driver.startActivity(new Activity("com.example", "ActivityName"));
python:
|
self.driver.start_activity("com.example", "ActivityName");
javascript_wd:
|
await driver.startActivity({
appPackage: "com.example",
appActivity: "ActivityName"
});
javascript_wdio:
|
driver.startActivity("com.example", "ActivityName");
ruby:
|
start_activity app_package: "com.example", app_activity: "ActivityName"
ruby_core:
|
@driver.start_activity app_package: "com.example", app_activity: "ActivityName"
php:
|
$driver->startActivity(array('appPackage' => 'com.example',
'appActivity' => 'ActivityName'));
csharp:
|
driver.StartActivity("com.example", "ActivityName");
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/AndroidMobileCommandHelper.html#startActivityCommand-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.activities.Activities.start_activity"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#startactivity"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2948"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#start_activity-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#start_activity-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/start_activity
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: appPackage
type: string
description: Name of the [package](https://developer.android.com/reference/java/lang/Package.html)
- name: appActivity
type: string
description: Name of the [activity](https://developer.android.com/reference/android/app/Activity.html)
- name: appWaitPackage
type: string
description: Automation will begin after this package starts
- name: intentAction
type: string
description: "[Intent](https://developer.android.com/reference/android/content/Intent.html) action which will be used to start activity"
- name: intentCategory
type: string
description: Intent category which will be used to start activity
- name: intentFlags
type: string
description: Flags that will be used to start activity
- name: optionalIntentArguments
type: string
description: Additional intent arguments that will be used to start activity
- name: dontStopAppOnReset
type: boolean
description: Should the app stop on reset
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L411
@@ -0,0 +1,88 @@
---
name: Activate App
short_description: Activate the given app onto the device
description:
>
iOS tests with XCUITest can also use the `mobile: activateApp` method. See
detailed [documentation](http://appium.io/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management/index.html#mobile-activateapp).
example_usage:
java:
|
driver.activateApp('com.apple.Preferences');
driver.activateApp('io.appium.android.apis');
python:
|
driver.activate_app('com.apple.Preferences')
driver.activate_app('io.appium.android.apis')
javascript_wd:
|
// Supports only `mobile: queryAppState` for iOS, XCUITest
javascript_wdio:
|
driver.activateApp(null, 'com.apple.Preferences')
driver.activateApp('io.appium.android.apis')
ruby:
|
activate_app('com.apple.Preferences')
activate_app('io.appium.android.apis')
ruby_core:
|
@driver.activate_app('com.apple.Preferences')
@driver.activate_app('io.appium.android.apis')
php:
|
// Supports only `mobile: queryAppState` for iOS, XCUITest
csharp:
|
driver.activateApp('com.apple.Preferences');
driver.activateApp('io.appium.android.apis');
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#activateApp-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.activate_app"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#activateapp"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js" # TODO wd documentation link
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#activate_app-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#activate_app-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/activate_app
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: bundleId or appId
type: string
description: BundleId for iOS. Package name for Android.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L427
@@ -0,0 +1,95 @@
---
name: Get app state
short_description: Get the given app status on the device
description:
>
iOS tests with XCUITest can also use the `mobile: queryAppState` method. See
detailed [documentation](http://appium.io/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management/index.html#mobile-queryappstate).
example_usage:
java:
|
driver.queryAppState('com.apple.Preferences');
driver.queryAppState('io.appium.android.apis');
python:
|
driver.query_app_state('com.apple.Preferences')
driver.query_app_state('io.appium.android.apis')
javascript_wd:
|
// Supports only `mobile: queryAppState` for iOS, XCUITest
javascript_wdio:
|
driver.queryAppState(null, 'com.apple.Preferences')
driver.queryAppState('io.appium.android.apis')
ruby:
|
app_state('com.apple.Preferences')
query_app_state('io.appium.android.apis') # `query_` prefix is also available
ruby_core:
|
@driver.app_state('com.apple.Preferences')
@driver.query_app_state('io.appium.android.apis') # `query_` prefix is also available
php:
|
// Supports only `mobile: queryAppState` for iOS, XCUITest
csharp:
|
// Supports only `mobile: queryAppState` for iOS, XCUITest
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#queryAppState-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.query_app_state"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#queryappstate"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js" # TODO wd documentation link
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Base/Driver#app_state-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Base/Driver#app_state-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/app_state
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: bundleId or appId
type: string
description: BundleId for iOS. Package name for Android.
response:
- type: number
description: Current the target app status. (Clients wrap the response properly)
`0` is not installed.
`1` is not running.
`2` is running in background or suspended.
`3` is running in background.
`4` is running in foreground.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L462
@@ -0,0 +1,99 @@
---
name: Background App
short_description: Send the currently running app for this session to the background
description:
>
Send the currently active app to the background, and either return after a
certain amount of time, or leave the app deactivated.
There are 3 types of parameters which may be passed to this method:
1. An object that looks like `{"seconds": secs}`, where `secs` is an
integer designating how long, in seconds, to background the app for. -1
means to deactivate the app entirely.
2. `null`, which means to deactivate the app entirely.
3. _Deprecated_ An integer: how long, in seconds, to background the app for. -1 means to
deactivate the app entirely.
iOS tests with XCUITest can also use the `mobile: terminateApp` method to
terminate the current app (see detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-terminateapp)),
and the `mobile: activateApp` to activate an existing application on the
device under test and moves it to the foreground (see detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-activateapp)).
example_usage:
java:
|
driver.runAppInBackground(Duration.ofSeconds(10));
python:
|
self.driver.background_app(10)
javascript_wd:
|
await driver.backgroundApp(10);
javascript_wdio:
|
driver.background(10);
ruby:
|
background_app(10)
ruby_core:
|
@driver.background_app(10)
php:
|
$driver->backgroundApp(10);
csharp:
|
driver.BackgroundApp(10)
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#runAppInBackground-java.time.Duration-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.background_app"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#background"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2841"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#background_app-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#background_app-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/app/background
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: seconds
type: number
description: How long to run app in background.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L439
@@ -0,0 +1,73 @@
---
name: Close an App
short_description: Close an app on device
example_usage:
java:
|
driver.closeApp();
python:
|
self.driver.close_app()
javascript_wd:
|
await driver.closeApp();
javascript_wdio:
|
driver.closeApp();
ruby:
|
close_app
ruby_core:
|
@driver.close_app
php:
|
$driver->closeApp();
csharp:
|
driver.CloseApp();
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#closeApp--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.close_app"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#closeapp"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2798"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#close_app-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#close_app-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: false
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/app/close
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L433
@@ -0,0 +1,80 @@
---
name: End Test Coverage
short_description: Get test coverage data
example_usage:
java:
|
driver.endTestCoverage("Intent", "/path");
python:
|
self.driver.end_test_coverage("Intent", "/path")
javascript_wd:
|
await driver.endTestCoverageForApp("Intent", "/path");
javascript_wdio:
|
driver.endCoverage("Intent", "/path");
ruby:
|
end_coverage("Intent", "/path")
ruby_core:
|
@driver.end_coverage("Intent", "/path")
php:
|
$driver->endTestCoverage('Intent', '/path');
csharp:
|
driver.EndTestCoverage("Intent", "/path");
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/AndroidDriver.html#endTestCoverage-java.lang.String-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.common.Common.end_test_coverage"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2858"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#endcoverage"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#end_coverage-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#end_coverage-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: false
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/app/end_test_coverage
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: intent
type: string
description: Intent to broadcast
- name: path
type: string
description: Path to .ec file
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L442
@@ -0,0 +1,80 @@
---
name: Get App Strings
short_description: Get app strings
example_usage:
java:
|
Map<String, String> appStrings = driver.getAppStringMap("en", "/path/to/file");
python:
|
appStrings = self.driver.app_strings("en", "/path/to/file")
javascript_wd:
|
let appStrings = await driver.getAppStrings();
javascript_wdio:
|
let appStrings = driver.getStrings("en");
ruby:
|
app_strings("en")
ruby_core:
|
@driver.app_strings("en")
php:
|
$strings = $driver->appStrings();
csharp:
|
Dictionary<string, object> appStrings = driver.GetAppStringDictionary("end", "/path/to/file");
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/HasAppStrings.html#getAppStringMap--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.app_strings"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getstrings"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2916"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#app_strings-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#app_strings-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/app/strings
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: language
type: string
description: Language code (optional)
- name: stringFile
type: string
description: Path to the string file (optional)
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L445
@@ -0,0 +1,82 @@
---
name: Install App
short_description: Install the given app onto the device
description:
>
iOS tests with XCUITest can also use the `mobile: installApp` method. See
detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-installapp).
example_usage:
java:
|
driver.installApp("/Users/johndoe/path/to/app.apk");
python:
|
self.driver.install_app('/Users/johndoe/path/to/app.apk');
javascript_wd:
|
await driver.installAppOnDevice('/Users/johndoe/path/to/app.apk');
javascript_wdio:
|
driver.installApp('/Users/johndoe/path/to/app.apk')
ruby:
|
install_app('/Users/johndoe/path/to/app.apk')
ruby_core:
|
@driver.install_app('/Users/johndoe/path/to/app.apk')
php:
|
$driver->installApp('/Users/johndoe/path/to/app.apk');
csharp:
|
driver.InstallApp("/Users/johndoe/path/to/app.apk")
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#installApp-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.install_app"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#installapp"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2540"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#install_app-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#install_app-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/install_app
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: appPath
type: string
description: Path of the app being installed
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L372
@@ -0,0 +1,85 @@
---
name: Is App Installed
short_description: Check whether the specified app is installed on the device
description:
>
iOS tests with XCUITest can also use the `mobile: isAppInstalled` method. See
detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-isappinstalled).
example_usage:
java:
|
driver.isAppInstalled("com.example.AppName");
python:
|
self.driver.is_app_installed('com.example.AppName');
javascript_wd:
|
await driver.isAppInstalledOnDevice('com.example.AppName');
javascript_wdio:
|
driver.isAppInstalled('com.example.AppName')
ruby:
|
app_installed?('com.example.AppName')
ruby_core:
|
@driver.app_installed?('com.example.AppName')
php:
|
$driver->isAppInstalled('com.example.AppName')
csharp:
|
driver.IsAppInstalled("com.example.AppName");
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#isAppInstalled-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.is_app_installed"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#isappinstalled"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2586"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#app_installed%3F-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#app_installed%3F-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/app_installed
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: bundleId
type: string
description: iOS bundleID or Android package name
response:
- type: boolean
description: Return true if installed, false if not
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L378
@@ -0,0 +1,81 @@
---
name: Launch App
short_description: Launch the app-under-test on the device
description:
>
If the app-under-test (AUT) is closed, or backgrounded, it will launch it.
If the AUT is already open, it will background it and re-launch it.
iOS tests with XCUITest can also use the `mobile: launchApp` method. See
detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-launchapp).
example_usage:
java:
|
driver.launchApp();
python:
|
self.driver.launch_app()
javascript_wd:
|
await driver.launchApp();
javascript_wdio:
|
driver.launchApp();
ruby:
|
launch_app
ruby_core:
|
@driver.launch_app
php:
|
$driver->launchApp();
csharp:
|
driver.LaunchApp();
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#launchApp--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.launch_app"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#launchapp"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2798"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#launch_app-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#launch_app-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: false
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/app/launch
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L430
@@ -0,0 +1,86 @@
---
name: Remove App
short_description: Remove an app from the device
description:
>
iOS tests with XCUITest can also use the `mobile: removeApp` method. See
detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-removeapp).
example_usage:
java:
|
driver.removeApp("com.example.AppName");
python:
|
self.driver.remove_app('com.example.AppName');
javascript_wd:
|
await driver.removeAppFromDevice('com.example.AppName');
javascript_wdio:
|
driver.removeApp('com.example.AppName')
ruby:
|
remove_app('com.example.AppName')
ruby_core:
|
@driver.remove_app('com.example.AppName')
php:
|
$driver->removeApp('com.example.AppName');
csharp:
|
driver.RemoveApp("com.example.AppName");
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#removeApp-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.remove_app"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#removeapp"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2563"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#remove_app-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#remove_app-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/remove_app
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: appId
type: string
description: The iOS [App ID](https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/AppID.html)
- name: bundleId
type: string
description: iOS bundleID or Android package name
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L375
@@ -0,0 +1,73 @@
---
name: Reset App
short_description: Reset the currently running app for this session
example_usage:
java:
|
driver.resetApp();
python:
|
self.driver.reset()
javascript_wd:
|
await driver.resetApp();
javascript_wdio:
|
driver.reset();
ruby:
|
reset
ruby_core:
|
@driver.reset
php:
|
$driver->reset();
csharp:
|
driver.ResetApp();
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#resetApp--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.reset"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#reset"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2827"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#reset-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#reset-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: false
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/app/reset
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L436
@@ -0,0 +1,90 @@
---
name: Terminate App
short_description: Terminate the given app on the device
description:
>
iOS tests with XCUITest can also use the `mobile: terminateApp` method. See
detailed [documentation](http://appium.io/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management/index.html#mobile-terminateapp).
example_usage:
java:
|
driver.terminateApp('com.apple.Preferences');
driver.terminateApp('io.appium.android.apis');
python:
|
driver.terminate_app('com.apple.Preferences')
driver.terminate_app('io.appium.android.apis')
javascript_wd:
|
// Supports only `mobile: queryAppState` for iOS, XCUITest
javascript_wdio:
|
driver.terminateApp(null, 'com.apple.Preferences')
driver.terminateApp('io.appium.android.apis')
ruby:
|
terminate_app('com.apple.Preferences')
terminate_app('io.appium.android.apis')
ruby_core:
|
@driver.terminate_app('com.apple.Preferences')
@driver.terminate_app('io.appium.android.apis')
php:
|
// Supports only `mobile: queryAppState` for iOS, XCUITest
csharp:
|
// Supports only `mobile: queryAppState` for iOS, XCUITest
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#terminateApp-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.terminate_app"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#terminateapp"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js" # TODO wd documentation link
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Base/Driver#terminate_app-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Base/Driver#terminate_app-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/terminate_app
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: bundleId or appId
type: string
description: BundleId for iOS. Package name for Android.
- name: options.timeout
type: number
description: (Only Android) Timeout to retry terminate the app.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L445
@@ -0,0 +1,85 @@
---
name: Finger print
short_description: Authenticate users by using their finger print scans on supported emulators.
description:
|
For Android emulator.
Authenticate users by using their finger print scans.
Touch ID by iOS is [here](http://appium.io/docs/en/commands/device/simulator/touch-id/)
example_usage:
java:
|
driver.fingerPrint(1);
python:
|
self.driver.finger_print(1)
javascript_wd:
|
await driver.fingerprint(1);
javascript_wdio:
|
await driver.fingerPrint(1);
ruby:
|
finger_print 1
ruby_core:
|
@driver.finger_print 1
php:
|
// PHP Code here
csharp:
|
// CSharp Code here
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#click--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.finger_print"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#fingerprint"
javascript_wd: "https://github.com/appium/appium-android-driver/blob/d16c7161d92ab6f6c9cec3f22218219ac3659716/lib/commands/actions.js#L260"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device#finger_print-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device#finger_print-instance_method"
php:
csharp:
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/finger_print
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: fingerprintId
type: number
description: finger prints stored in Android Keystore system (from 1 to 10)
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L379
@@ -0,0 +1,90 @@
---
name: Get Clipboard
short_description: Get the content of the system clipboard
description:
>
Get the content of the system clipboard
(For iOS real devices)
Apple security preferences require the WebDriverAgentRunner application to be in [foreground](https://github.com/appium/WebDriverAgent/issues/330) in order to be able to receive the system clipboard content. Otherwise an empty string is always returned. Consider using [Activate App](/docs/en/commands/device/app/activate-app.md) and [Background App](/docs/en/commands/device/app/background-app.md) to change the foreground application.
example_usage:
java:
|
driver.getClipboard(ClipboardContentType.PLAINTEXT); // get plaintext
driver.getClipboardText();
python:
|
self.driver.get_clipboard()
self.driver.get_clipboard_text()
javascript_wd:
|
await driver.getClipboard();
javascript_wdio:
|
driver.getClipboard();
ruby:
|
get_clipboard
ruby_core:
|
@driver.get_clipboard
php:
|
// PHP Code here
csharp:
|
// CSharp Code here
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#click--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.clipboard.Clipboard.get_clipboard"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getclipboard"
javascript_wd: "https://github.com/admc/wd/releases"
ruby:
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_clipboard-instance_method"
- ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#get_clipboard-instance_method"
ruby_core:
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_clipboard-instance_method"
- ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#get_clipboard-instance_method"
php: "https://github.com/appium/php-client/releases/latest"
csharp: "https://github.com/appium/appium" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: false
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
endpoint:
url: /session/:session_id/appium/device/get_clipboard
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: contentType
type: string
description: The type of the content to get. Plaintext, Image, URL. Android supports only plaintext.
response:
- type: string
description: Clipboard content as base64-encoded string or an empty string if the clipboard is empty
specifications: no
@@ -0,0 +1,93 @@
---
name: Set Clipboard
short_description: Set the content of the system clipboard
description:
>
Set the content of the system clipboard
example_usage:
java:
|
// base64Content is Base64-encoded content
driver.setClipboard("label", ClipboardContentType.PLAINTEXT, base64Content);
driver.setClipboardText("happy testing");
python:
|
self.driver.set_clipboard('happy testing')
self.driver.set_clipboard_text('happy testing')
javascript_wd:
|
await driver.setClipboard('happy testing', 'plaintext')
javascript_wdio:
|
driver.setClipboard('happy testing', 'plaintext')
ruby:
|
set_clipboard content: 'happy testing'
ruby_core:
|
@driver.set_clipboard content: 'happy testing'
php:
|
// PHP Code here
csharp:
|
// CSharp Code here
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#click--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.clipboard.Clipboard.get_clipboard"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#setclipboard"
javascript_wd: "https://github.com/admc/wd/releases"
ruby:
- ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#set_clipboard-instance_method"
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#set_clipboard-instance_method"
ruby_core:
- ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#set_clipboard-instance_method"
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#set_clipboard-instance_method"
php: "https://github.com/appium/php-client/releases/latest"
csharp: "https://github.com/appium/appium" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: false
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
endpoint:
url: /session/:session_id/appium/device/set_clipboard
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: content
type: String
description: The actual base64 encoded clipboard content.
- name: contentType
type: string
description: The type of the content to get. Plaintext, Image, URL. Android supports only plaintext.
- name: label
type: string
description: Clipboard data label for Android.
response:
- type: string
description: Response from Appium server
specifications: no
@@ -0,0 +1,71 @@
---
name: Emulate power state
short_description: Emulate power state change on the connected emulator.
description:
|
For Android emulator.
To set the state of the battery charger to connected or not.
example_usage:
java:
|
driver.setPowerAC(PowerACState.OFF);
python:
|
self.driver.set_power_ac(Power.AC_OFF)
javascript_wdio:
|
driver.powerAC('on')
ruby:
|
set_power_ac :on
ruby_core:
|
@driver.set_power_ac :on
client_docs:
java: "https://appium.github.io/java-client/" # TODO: Link
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.power.Power.set_power_ac"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#powerac"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_power_ac-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_power_ac-instance_method"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: false
javascript_wdio: false
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/power_ac
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: state
type: string
description: set the state. on or off
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L381
@@ -0,0 +1,70 @@
---
name: Emulate power capacity
short_description: Emulate power capacity change on the connected emulator.
description:
|
For Android emulator.
To set the battery percentage.
example_usage:
java:
|
driver.setPowerCapacity(100);
python:
|
self.driver.set_power_capacity(50)
javascript_wdio:
|
driver.powerCapacity(50)
ruby:
|
set_power_capacity 50
ruby_core:
|
@driver.set_power_capacity 50
client_docs:
java: "https://appium.github.io/java-client/" # TODO: Link
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.power.Power.set_power_capacity"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#powercapacity"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_power_capacity-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_power_capacity-instance_method"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: false
javascript_wdio: false
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/power_capacity
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: percent
type: integer
description: ercentage value in range [0, 100]
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L378
@@ -0,0 +1,81 @@
---
name: Pull File
short_description: Retrieve a file from the device's file system
example_usage:
java:
|
byte[] fileBase64 = driver.pullFile("/path/to/device/foo.bar");
python:
|
file_base64 = self.driver.pull_file('/path/to/device/foo.bar');
javascript_wd:
|
let fileBase64 = await driver.pullFile('/path/to/device/foo.bar');
javascript_wdio:
|
let data = driver.pullFile('/data/local/tmp/file.txt');
ruby:
|
pull_file('/data/local/tmp/file.txt')
ruby_core:
|
@driver.pull_file('/data/local/tmp/file.txt')
php:
|
$data = $driver->pullFile('data/local/tmp/file.txt');
csharp:
|
byte[] fileBase64 = driver.PullFile("/path/to/device/foo.bar");
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithFiles.html#pullFile-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.remote_fs.RemoteFS.pull_file"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#pullfile"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2665"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#pull_file-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#pull_file-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/pull_file
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: path
type: string
description: Path on the device to pull file from
response:
- type: string
description: Contents of file in base64
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L390
@@ -0,0 +1,81 @@
---
name: Pull Folder
short_description: Retrieve a folder from the device's file system
example_usage:
java:
|
byte[] folder = driver.pullFolder("/path/to/device/foo.bar");
python:
|
folder_base64 = self.driver.pull_folder('/path/to/device/foo.bar');
javascript_wd:
|
let folderBase64 = await driver.pullFolder('/path/to/device/foo.bar');
javascript_wdio:
|
let data = driver.pullFolder('/data/local/tmp/file.txt');
ruby:
|
pull_folder('/data/local/tmp/file.txt')
ruby_core:
|
@driver.pull_folder('/data/local/tmp/file.txt')
php:
|
$folderBase64 = $driver->pullFolder($path);
csharp:
|
byte[] folder = driver.PullFolder("/path/to/device");
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithFiles.html#pullFolder-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.remote_fs.RemoteFS.pull_folder"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#pullfolder"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2688"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#pull_folder-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#pull_folder-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/pull_folder
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: path
type: string
description: Path to an entire folder on the device
response:
- type: string
description: A string of Base64 encoded data, representing a zip archive of the contents of the requested folder.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L393
@@ -0,0 +1,84 @@
---
name: Push File
short_description: Place a file onto the device in a particular place
example_usage:
java:
|
driver.pushFile("/path/to/device/foo.bar", new File("/Users/johndoe/files/foo.bar"));
python:
|
dest_path = '/data/local/tmp/test_push_file.txt'
data = bytes('This is the contents of the file to push to the device.', 'utf-8')
self.driver.push_file(dest_path, base64.b64encode(data).decode('utf-8'))
javascript_wd:
|
await driver.pushFileToDevice('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=');
javascript_wdio:
|
let data = new Buffer("Hello World").toString('base64');
driver.pushFile('/data/local/tmp/file.txt', data);
ruby:
|
push_file('/path/to/device/foo.bar', File.read('path/to/file.png'))
ruby_core:
|
@driver.push_file('/path/to/device/foo.bar', File.read('path/to/file.png'))
php:
|
$driver->pushFile('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=');
csharp:
|
driver.PushFile("/path/to/device/foo.bar", new FileInfo("/Users/johndoe/files/foo.bar"))
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/PushesFiles.html#pushFile-java.lang.String-java.io.File-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.remote_fs.RemoteFS.push_file"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#pushfile"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2640"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#push_file-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#push_file-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO: Verify this
windows:
windows: false # TODO: Verify this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/push_file
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: path
type: string
description: Path to install the data to
- name: data
type: string
description: Contents of file in base64
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L387
@@ -0,0 +1,78 @@
---
name: Is Device Locked
short_description: Check whether the device is locked or not
example_usage:
java:
|
boolean isLocked = driver.isDeviceLocked();
python:
|
self.driver.is_locked()
javascript_wd:
|
let isLocked = await driver.isLocked();
javascript_wdio:
|
driver.isLocked();
ruby:
|
device_locked?
ruby_core:
|
@driver.device_locked?
php:
|
// TODO PHP sample
csharp:
|
bool isLocked = driver.IsLocked(); // Supported by IOSDriver & AndroidDriver
client_docs:
java: "http://appium.github.io/java-client/io/appium/java_client/LocksDevice.html#isDeviceLocked--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.is_locked"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#islocked"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2407"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#device_locked%3F-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#device_locked%3F-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: true # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/is_locked
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: boolean
description: True if the device is locked, false if not
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L313
@@ -0,0 +1,82 @@
---
name: Lock
short_description: Lock the device
example_usage:
java:
|
driver.lockDevice();
python:
|
self.driver.lock();
javascript_wd:
|
await driver.lock();
javascript_wdio:
|
driver.lock();
ruby:
|
lock
lock(5) # lock 5 seconds
ruby_core:
|
@driver.lock
@driver.lock(5) # lock 5 seconds
php:
|
$driver->lock(5);
csharp:
|
driver.Lock(); // Supported by IOSDriver & AndroidDriver
client_docs:
java: "http://appium.github.io/java-client/io/appium/java_client/LocksDevice.html#lockDevice--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.lock"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#lock"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2363"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#lock-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#lock-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: true # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/lock
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: seconds
type: number
description: How long to lock the screen (iOS only).
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L307
@@ -0,0 +1,81 @@
---
name: Rotate
short_description: Rotate the device in three dimensions
example_usage:
java:
|
driver.rotate(new DeviceRotation(10, 10, 10));
javascript_wd:
|
driver.rotateDevice({x: 114, y: 198, duration: 5, radius: 3, rotation: 220, touchCount: 2});
javascript_wdio:
|
driver.rotateDevice(100, 100);
php:
|
// TODO PHP sample
csharp:
|
driver.Rotate(new Dictionary<string, int> { { "x", 114 }, { "y", 198 }, { "duration", 5 }, { "radius", 3 }, { "rotation", 220 }, { "touchCount", 2 } });
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/AppiumDriver.html#rotate-org.openqa.selenium.DeviceRotation-"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#rotatedevice"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2470"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: true
android:
uiautomator2: false
espresso: false
uiautomator: false
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/rotate
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: x
type: number
description: x offset to use for the center of the rotate gesture
- name: y
type: number
description: y offset to use for the center of the rotate gesture
- name: radius
type: number
description: The distance in points from the center to the edge of the circular path
- name: rotation
type: number
description: The length of rotation in radians
- name: touchCount
type: number
description: The number of touches to use in the specified gesture. (Effectively, the number of fingers a user would use to make the specified gesture.) Valid values are 1 to 5.
- name: duration
type: number
description: The length of hold time for the specified gesture, in seconds.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L361
@@ -0,0 +1,75 @@
---
name: Shake
short_description: Perform a shake action on the device
example_usage:
java:
|
driver.shake();
python:
|
self.driver.shake();
javascript_wd:
|
await driver.shake();
javascript_wdio:
|
driver.shake();
ruby:
|
shake
ruby_core:
|
@driver.shake
php:
|
$driver->shake();
csharp:
|
driver.ShakeDevice();
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/ios/ShakesDevice.html#shake--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.shake"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#shake"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2342"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#shake-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#shake-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/iOS/IOSDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true (simulator only)
uiautomation: true
android:
uiautomator2: false
espresso: false
uiautomator: false
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: false # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/shake
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L301
@@ -0,0 +1,78 @@
---
name: Unlock
short_description: Unlock the device
example_usage:
java:
|
driver.lockDevice();
driver.unlockDevice();
python:
|
self.driver.lock();
self.driver.unlock();
javascript_wd:
|
await driver.lock();
await driver.unlock();
javascript_wdio:
|
driver.lock()
.unlock();
ruby:
|
unlock
ruby_core:
|
@driver.unlock
php:
|
// TODO PHP sample
csharp:
|
driver.Unlock(); // Supported by IOSDriver & AndroidDriver
client_docs:
java: "http://appium.github.io/java-client/io/appium/java_client/LocksDevice.html#unlockDevice--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.unlock"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#unlock"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2386"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#unlock-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#unlock-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: true # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/unlock
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L310
@@ -0,0 +1,90 @@
---
name: Hide Keyboard
short_description: Hide soft keyboard
example_usage:
java:
|
driver.hideKeyboard();
python:
|
self.driver.hide_keyboard()
javascript_wd:
|
await driver.hideDeviceKeyboard();
javascript_wdio:
|
driver.hideKeyboard();
ruby:
|
hide_keyboard
ruby_core:
|
@driver.hide_keyboard
php:
|
$driver->hideKeyboard();
$driver->hideKeyboard(array(
'keyName' => 'Done'
));
csharp:
|
driver.HideKeyboard();
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/HidesKeyboard.html#hideKeyboard--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.keyboard.Keyboard.hide_keyboard"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#hidekeyboard"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2723"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#hide_keyboard-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#hide_keyboard-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/hide_keyboard
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: strategy
type: string
description: Hide keyboard strategy (optional, UIAutomation only). Available strategies - 'press', 'pressKey', 'swipeDown', 'tapOut', 'tapOutside', 'default'.
- name: key
type: string
description: Key (optional)
- name: keyCode
type: string
description: Key code (optional)
- name: keyName
type: string
description: Key name (optional)
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L381
@@ -0,0 +1,69 @@
---
name: Is Keyboard Shown
short_description: Whether or not the soft keyboard is shown
example_usage:
java:
|
boolean isKeyboardShown = driver.isKeyboardShown();
python:
|
driver.is_keyboard_shown()
javascript_wd:
|
await driver.isKeyboardShown();
javascript_wdio:
|
driver.isKeyboardShown();
ruby:
|
is_keyboard_shown
ruby_core:
|
@driver.is_keyboard_shown
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/HasOnScreenKeyboard.html#isKeyboardShown--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.keyboard.Keyboard.is_keyboard_shown"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2638"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#iskeyboardshown"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#is_keyboard_shown-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#is_keyboard_shown-instance_method"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: false
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/is_keyboard_shown
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: boolean
description: True if the keyboard is shown.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: routes.js
@@ -0,0 +1,86 @@
---
name: Long Press Key Code
short_description: Press and hold a particular key code on an Android device
description: See https://developer.android.com/reference/android/view/KeyEvent.html# for reference of available Android key codes
example_usage:
java:
|
driver.longPressKeyCode(AndroidKeyCode.HOME);
python:
|
self.driver.long_press_keycode(10);
javascript_wdio:
|
driver.longPressKeyCode(10);
javascript_wd:
|
await driver.longPressKeycode(10);
ruby:
|
long_press_keycode(10)
ruby_core:
|
@driver.long_press_keycode(10)
php:
|
// TODO PHP sample
csharp:
|
driver.LongPressKeyCode(WindowsKeyCode.Back);
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/windows/PressesKeyCode.html#longPressKeyCode-int-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.keyboard.Keyboard.long_press_keycode"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#longpresskeycode"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2478"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#long_press_keycode-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#long_press_keycode-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Windows/WindowsDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: true # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/long_press_keycode
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: keycode
type: number
description: Key code pressed on the device. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
- name: metastate
type: number
description: Metastate for the keypress. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
- name: flags
type: number
description: Flags for the keypress. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L331
@@ -0,0 +1,86 @@
---
name: Press Key Code
short_description: Press a particular key on an Android Device
description: See https://developer.android.com/reference/android/view/KeyEvent.html for reference of available Android key code values
example_usage:
java:
|
driver.pressKeyCode(AndroidKeyCode.SPACE, AndroidKeyMetastate.META_SHIFT_ON);
python:
|
self.driver.press_keycode(10);
javascript_wdio:
|
driver.pressKeyCode(10);
javascript_wd:
|
await driver.pressKeycode(10);
ruby:
|
press_keycode(10)
ruby_core:
|
@driver.press_keycode(10)
php:
|
// TODO PHP sample
csharp:
|
driver.PressKeyCode(WindowsKeyCode.Windows);
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/windows/PressesKeyCode.html#pressKeyCode-int-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.keyboard.Keyboard.press_keycode"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#presskeycode"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2457"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#press_keycode-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#press_keycode-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Windows/WindowsDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: true # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/press_keycode
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: keycode
type: number
description: Key code pressed on the device. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
- name: metastate
type: number
description: Metastate for the keypress. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
- name: flags
type: number
description: Flags for the keypress. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L328
@@ -0,0 +1,80 @@
---
name: GSM Call
short_description: Make GSM call (Emulator only)
example_usage:
java:
|
driver.makeGsmCall("5551234567", GsmCallActions.CALL);
python:
|
self.driver.make_gsm_call('5551234567', GsmCallActions.CALL)
javascript_wd:
|
await driver.gsmCall('555-123-4567', 'Phone');
javascript_wdio:
|
driver.gsmCall('555-123-4567', 'call');
ruby:
|
gsm_call(phone_number: '5551234567', action: :call)
ruby_core:
|
@driver.gsm_call(phone_number: '5551234567', action: :call)
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#makeGsmCall-java.lang.String-io.appium.java_client.android.GsmCallActions-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.gsm.Gsm.make_gsm_call"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3183"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#gsmcall"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_call-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_call-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
uiautomator2: true
espresso: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/gsm_call
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: phoneNumber
type: string
description: The phone number to call to
- name: action
type: string
description: The action - 'call', 'accept', 'cancel', 'hold'.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L340
@@ -0,0 +1,77 @@
---
name: GSM Signal
short_description: Set GSM signal strength (Emulator only)
example_usage:
java:
|
driver.setGsmSignalStrength(GsmSignalStrength.GOOD);
python:
|
self.driver.set_gsm_signal(GsmSignalStrength.GOOD)
javascript_wd:
|
await driver.gsmSignal(3);
javascript_wdio:
|
driver.gsmSignal(3);
ruby:
|
gsm_signal :good
ruby_core:
|
@driver.gsm_signal :good
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#setGsmSignalStrength-io.appium.java_client.android.GsmSignalStrength-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.gsm.Gsm.set_gsm_signal"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3221"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#gsmsignal"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_signal-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_signal-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
uiautomator2: true
espresso: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/gsm_signal
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: signalStrength
type: string
description: Signal strength in the range [0, 4]
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L343
@@ -0,0 +1,77 @@
---
name: GSM Voice
short_description: Set GSM voice state (Emulator only)
example_usage:
java:
|
driver.setGsmVoice(GsmVoiceState.HOME);
python:
|
self.driver.set_gsm_voice(GsmVoiceState.HOME)
javascript_wd:
|
await driver.gsmVoice('Voice state');
javascript_wdio:
|
driver.gsmVoice('home');
ruby:
|
gsm_voice :home
ruby_core:
|
@driver.gsm_voice :home
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#setGsmVoice-io.appium.java_client.android.GsmVoiceState-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.gsm.Gsm.set_gsm_voice"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3241"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#gsmvoice"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_voice-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_voice-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
uiautomator2: true
espresso: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/gsm_voice
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: state
type: string
description: State of GSM voice - 'unregistered', 'home', 'roaming', 'searching', 'denied', 'off', 'on'.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L346
@@ -0,0 +1,69 @@
---
name: Network speed
short_description: Set network speed (Emulator only)
example_usage:
java:
|
driver.setNetworkSpeed(NetworkSpeed.LTE);
python:
|
self.driver.set_network_speed(NetSpeed.LTE)
javascript_wd:
|
await driver.networkSpeed('Network type');
javascript_wdio:
|
driver.toggleNetworkSpeed('lte');
ruby:
|
set_network_speed :lte
ruby_core:
|
@driver.set_network_speed :lte
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#setNetworkSpeed-io.appium.java_client.android.NetworkSpeed-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.network.Network.set_network_speed"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3411"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#togglenetworkspeed"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_network_speed-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_network_speed-instance_method"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
uiautomator2: true
espresso: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/network_speed
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: netspeed
type: string
description: Network type - 'full','gsm', 'edge', 'hscsd', 'gprs', 'umts', 'hsdpa', 'lte', 'evdo'
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L346
@@ -0,0 +1,80 @@
---
name: Send SMS
short_description: Simulate an SMS message (Emulator only)
example_usage:
java:
|
driver.sendSMS("555-123-4567", "Hey lol");
python:
|
self.driver.send_sms('555-123-4567', 'Hey lol')
javascript_wd:
|
await driver.sendSms('555-123-4567', 'Hey lol');
javascript_wdio:
|
driver.sendSms('555-123-4567', 'Hey lol');
ruby:
|
send_sms(phone_number: '555-123-4567', message: 'Hey lol')
ruby_core:
|
@driver.send_sms(phone_number: '555-123-4567', message: 'Hey lol')
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#sendSMS-java.lang.String-java.lang.String-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.sms.Sms.send_sms"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3183"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#sendsms"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#send_sms-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#send_sms-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/send_sms
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: phoneNumber
type: string
description: The phone number to send the SMS too
- name: message
type: string
description: The SMS message
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L337
@@ -0,0 +1,69 @@
---
name: Toggle Airplane Mode
short_description: Toggle airplane mode on device
example_usage:
java:
|
driver.toggleAirplaneMode();
javascript_wd:
|
await driver.toggleAirplaneMode();
javascript_wdio:
|
driver.toggleAirplaneMode();
ruby:
|
toggle_flight_mode
ruby_core:
|
@driver.toggle_flight_mode
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsNetworkStateManagement.html#toggleAirplaneMode--"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#toggleairplanemode"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2712"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#toggle_flight_mode-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#toggle_flight_mode-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: false
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/toggle_airplane_mode
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L396
@@ -0,0 +1,75 @@
---
name: Toggle Data
short_description: Switch the state of data service
description:
|
Switch the state of data service.
(For Android) This API does not work for Android API level 21+
because it requires system or carrier privileged permission, and Android <= 21 does not support granting permissions.
example_usage:
java:
|
driver.toggleData();
javascript_wd:
|
await driver.toggleData();
javascript_wdio:
|
driver.toggleData();
ruby:
|
toggle_data
ruby_core:
|
@driver.toggle_data
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsNetworkStateManagement.html#toggleData--"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#toggledata"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2771"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_data-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_data-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: false
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/toggle_data
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L399
@@ -0,0 +1,73 @@
---
name: Toggle Location Services
short_description: Switch the state of the location service
example_usage:
java:
|
driver.toggleLocationServices();
python:
|
self.driver.toggle_location_services();
javascript_wd:
|
await driver.toggleLocationServices();
javascript_wdio:
|
driver.toggleLocationServices();
ruby:
|
toggle_location_services
ruby_core:
|
@driver.toggle_location_services
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/AndroidDriver.html#toggleLocationServices--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.location.Location.toggle_location_services"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#togglelocationservices"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2758"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_location_services-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_location_services-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/toggle_location_services
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L405
@@ -0,0 +1,81 @@
---
name: Toggle WiFi
short_description: Switch the state of the WiFi service
description:
>
Switch the state of the WiFi service.
Since Android Q, a method to change the WiFi service state has been restricted. [#12327](https://github.com/appium/appium/issues/12327)
Please toggle the state via UI instead of this method.
The UI flow depends on devices. Please make sure to encode the correct UI flow on your target device under test.
example_usage:
java:
|
driver.toggleWifi();
python:
|
driver.toggle_wifi()
javascript_wd:
|
await driver.toggleWiFi();
javascript_wdio:
|
driver.toggleWiFi();
ruby:
|
toggle_wifi
ruby_core:
|
@driver.toggle_wifi
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsNetworkStateManagement.html#toggleWifi--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.network.Network.toggle_wifi"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#togglewifi"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2738"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_wifi-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_wifi-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/toggle_wifi
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L402
@@ -0,0 +1,88 @@
---
name: Get Performance Data
short_description: Returns the information of the system state which is supported to read as like cpu, memory, network traffic, and battery
example_usage:
java:
|
List<List<Object>> performanceData = driver.getPerformanceData("my.app.package", "cpuinfo", 5);
python:
|
self.driver.get_performance_data('my.app.package', 'cpuinfo', 5)
javascript_wd:
|
await driver.getPerformanceData('my.app.package', 'cpuinfo', 5);
javascript_wdio:
|
driver.getPerformanceData('my.app.package', 'cpuinfo', 5);
ruby:
|
get_performance_data package_name: 'io.appium.android.apis', data_type: 'cpuinfo', data_read_timeout: 10
ruby_core:
|
@driver.get_performance_data package_name: 'io.appium.android.apis', data_type: 'cpuinfo', data_read_timeout: 10
php:
|
// TODO PHP sample
csharp:
|
// Not supported
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/HasSupportedPerformanceDataType.html#getSupportedPerformanceDataTypes--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.performance.Performance.get_performance_data"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3412"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getperformancedata"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_performance_data-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_performance_data-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: false # TODO Confirm this
client_support:
java: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/getPerformanceData
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: packageName
type: string
description: The package name of the application
- name: dataType
type: string
description: The type of system state which wants to read. It should be one of the supported performance data types.
- name: dataReadTimeout
type: number
description: The number of attempts to read (optional)
response:
- type: array<string>
description: The information type of the system state which is supported to read as like cpu, memory, network traffic, and battery
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L325
@@ -0,0 +1,77 @@
---
name: Get Performance Data Types
short_description: Returns the information types of the system state which is supported to read as like cpu, memory, network traffic, and battery
example_usage:
java:
|
List<String> performanceTypes = driver.getSupportedPerformanceDataTypes();
python:
|
self.driver.get_performance_data_types()
javascript_wd:
|
await driver.getSupportedPerformanceDataTypes();
javascript_wdio:
|
driver.getPerformanceDataTypes();
ruby:
|
get_performance_data_types
ruby_core:
|
@driver.get_performance_data_types
php:
|
// TODO PHP sample
csharp:
|
// Not supported
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/HasSupportedPerformanceDataType.html#getSupportedPerformanceDataTypes--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.performance.Performance.get_performance_data_types"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3398"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getperformancedatatypes"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_performance_data_types-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_performance_data_types-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: false # TODO Confirm this
client_support:
java: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/performanceData/types
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: array<string>
description: The available performance data types (cpuinfo|batteryinfo|networkinfo|memoryinfo)
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L322
@@ -0,0 +1,150 @@
---
name: Start Recording Screen
short_description: Start recording screen
example_usage:
java:
|
driver.startRecordingScreen();
driver.startRecordingScreen(new BaseStartScreenRecordingOptions(....));
javascript_wd:
|
await driver.startRecordingScreen();
javascript_wdio:
|
driver.startRecordingScreen();
ruby:
|
start_recording_screen
start_recording_screen video_size: '1280x720', time_limit: '180', bit_rate: '5000000' # Android
start_recording_screen video_type: 'h264', time_limit: '260' # iOS
ruby_core:
|
@driver.start_recording_screen
@driver.start_recording_screen video_size: '1280x720', time_limit: '180', bit_rate: '5000000' # Android
@driver.start_recording_screen video_type: 'h264', time_limit: '260' # iOS
python:
|
self.driver.start_recording_screen()
php:
|
// TODO PHP sample
csharp:
|
driver.StartRecordingScreen(
AndroidStartScreenRecordingOptions.GetAndroidStartScreenRecordingOptions()
.WithTimeLimit(TimeSpan.FromSeconds(10))
.WithBitRate(500000)
.WithVideoSize("720x1280"));
client_docs:
java: "https://static.javadoc.io/io.appium/java-client/6.1.0/io/appium/java_client/screenrecording/CanRecordScreen.html#startRecordingScreen-T-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.screen_record.ScreenRecord.start_recording_screen"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3412"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#startrecordingscreen"
ruby:
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#start_recording_screen-instance_method"
ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Xcuitest/Device#start_recording_screen-instance_method"
ruby_core:
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#start_recording_screen-instance_method"
ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Xcuitest/Device#start_recording_screen-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: false # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/start_recording_screen
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: options
type: object
description: The following parameters of the action
- name: options.remotePath
type: string
description: The path to the remote location, where the resulting video should be uploaded.
The following protocols are supported http/https, ftp.
Null or empty string value (the default setting) means the content of resulting
file should be encoded as Base64 and passed as the endpoint response value.
An exception will be thrown if the generated media file is too big to
fit into the available process memory.
This option only has an effect if there is screen recording process in progress
and `forceRestart` parameter is not set to `true`.
- name: options.username
type: string
description: The name of the user for the remote authentication.
- name: options.password
type: string
description: The password for the remote authentication.
- name: options.method
type: string
description: The http multipart upload method name. The 'PUT' one is used by default.
- name: options.forceRestart
type: boolean
description: Whether to try to catch and upload/return the currently running screen recording
(`false`, the default setting on server) or ignore the result of it
and start a new recording immediately (`true`).
- name: options.timeLimit
type: string
description: Recording time. 180 seconds is by default.
- name: options.videoType
type: string
description: (iOS Only) The format of the screen capture to be recorded.
Available formats are the output of `ffmpeg -codecs` such as `libx264` and `mpeg4`. Defaults to `mpeg4`.
- name: options.videoQuality
type: string
description: (iOS Only) The video encoding quality (low, medium, high, photo - defaults to medium).
- name: options.videoFps
type: string
description: (iOS Only) The Frames Per Second rate of the recorded video.
Change this value if the resulting video is too slow or too fast. Defaults to 10.
This can decrease the resulting file size.
- name: options.videoScale
type: string
description: (iOS Only) The scaling value to apply. Read https://trac.ffmpeg.org/wiki/Scaling for possible values.
Example value of 720p scaling is '1280:720'. This can decrease/increase the resulting file size.
No scale is applied by default.
- name: options.bitRate
type: string
description: (Android Only) The video bit rate for the video, in megabits per second.
4 Mbp/s(4000000) is by default for Android API level below 27. 20 Mb/s(20000000) for API level 27 and above.
- name: options.videoSize
type: string
description: (Android Only) The format is widthxheight.
The default value is the device's native display resolution (if supported),
1280x720 if not. For best results,
use a size supported by your device's Advanced Video Coding (AVC) encoder.
For example, "1280x720"
- name: options.bugReport
type: string
description: (Android Only) Set it to `true` in order to display additional information on the video overlay,
such as a timestamp, that is helpful in videos captured to illustrate bugs.
This option is only supported since API level 27 (Android O).
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L345
@@ -0,0 +1,91 @@
---
name: Stop Recording Screen
short_description: Stop recording screen
example_usage:
java:
|
driver.stopRecordingScreen();
driver.stopRecordingScreen(new BaseStopScreenRecordingOptions(....));
javascript_wd:
|
await driver.stopRecordingScreen();
javascript_wdio:
|
driver.stopRecordingScreen();
ruby:
|
stop_recording_screen
stop_recording_screen remote_path: 'https://example.com', user: 'example', pass: 'pass', method: 'POST'
ruby_core:
|
@driver.stop_recording_screen
@driver.stop_recording_screen remote_path: 'https://example.com', user: 'example', pass: 'pass', method: 'POST'
python:
|
self.driver.stop_recording_screen()
php:
|
// TODO PHP sample
csharp:
|
driver.StopRecordingScreen();
client_docs:
java: "https://static.javadoc.io/io.appium/java-client/6.1.0/io/appium/java_client/screenrecording/CanRecordScreen.html#stopRecordingScreen--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.screen_record.ScreenRecord.stop_recording_screen"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3398"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#stoprecordingscreen"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#stop_recording_screen-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#stop_recording_screen-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: false # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/stop_recording_screen
method: POST
url_parameters:
- name: remotePath
description: The path to the remote location, where the resulting video should be uploaded.
The following protocols are supported http/https, ftp.
Null or empty string value (the default setting) means the content of resulting
file should be encoded as Base64 and passed as the endpoint response value.
An exception will be thrown if the generated media file is too big to
fit into the available process memory.
- name: username
description: The name of the user for the remote authentication.
- name: password
description: The password for the remote authentication.
- name: method
description: The http multipart upload method name. The 'PUT' one is used by default.
response:
- type: string
description: Base64 encoded string. If remote_path is set, the response is empty string.
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L348
@@ -0,0 +1,85 @@
---
name: Toggle Touch ID Enrollment
short_description: Toggle the simulator being [enrolled](https://support.apple.com/en-ca/ht201371) to accept touchId (iOS Simulator only)
description:
|
To enable this feature, the `allowTouchIdEnroll` desired capability must be set to true. When `allowTouchIdEnroll` is set to true
the Simulator will be enrolled by default, and the 'Toggle Touch ID Enrollment' changes the enrollment state.
This call will only work if the Appium process or its parent application (e.g., Terminal.app or Appium.app) has access to Mac OS accessibility in System Preferences > Security & Privacy > Privacy > Accessibility list
example_usage:
java:
|
driver.toggleTouchIDEnrollment(true);
python:
|
self.driver.toggle_touch_id_enrollment()
javascript_wd:
|
await driver.toggleTouchIdEnrollment();
javascript_wdio:
|
driver.toggleEnrollTouchId(true);
ruby:
|
toggle_touch_id_enrollment
ruby_core:
|
@driver.toggle_touch_id_enrollment
php:
|
// TODO PHP sample
csharp:
|
// TODO C# sample
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/ios/PerformsTouchID.html#performTouchID-boolean-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.toggle_touch_id_enrollment"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#toggleenrolltouchid"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3150"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#toggle_touch_id_enrollment-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#toggle_touch_id_enrollment-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
uiautomator2: false
espresso: false
uiautomator: false
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/simulator/toggle_touch_id_enrollment
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: enabled
type: boolean
description: If true, enable, if falsey disable, otherwise toggle (optional)
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L427
@@ -0,0 +1,102 @@
---
name: Perform Touch ID
short_description: Simulate a [touch id](https://support.apple.com/en-ca/ht201371) event (iOS Simulator only)
description:
|
To enable this feature, the `allowTouchIdEnroll` desired capability must be set to true and the Simulator
must be [enrolled](https://support.apple.com/en-ca/ht201371).
When you set `allowTouchIdEnroll` to true, it will set the Simulator to be enrolled by default.
The enrollment state can be [toggled](/docs/en/commands/device/simulator/toggle-touch-id-enrollment.md)
This call will only work if Appium process or its parent application (e.g. Terminal.app or Appium.app) has access to Mac OS accessibility in System Preferences > Security & Privacy > Privacy > Accessibility list
Finger Print by Android is [here](http://appium.io/docs/en/commands/device/authentication/finger-print/)
example_usage:
java:
|
driver.performTouchID(false); // Simulates a failed touch
driver.performTouchID(true); // Simulates a passing touch
python:
|
self.driver.touch_id(false); # Simulates a failed touch
self.driver.touch_id(true); # Simulates a passing touch
javascript_wd:
|
await driver.touchId(false); // Simulates a failed touch
await driver.touchId(true); // Simulates a failed touch
javascript_wdio:
|
driver.touchId(false); // Simulates a failed touch
driver.touchId(true); // Simulates a passing touch
ruby:
|
touch_id(false)
touch_id(true)
ruby_core:
|
@driver.touch_id(false) # Simulates a failed touch
@driver.touch_id(true) # Simulates a passing touch
php:
|
// TODO PHP sample
csharp:
|
driver.PerformTouchID(false); // Simulates a failed touch
driver.PerformTouchID(true); // Simulates a passing touch
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/ios/PerformsTouchID.html#performTouchID-boolean-"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.touch_id"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#touchid"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3133"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#touch_id-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#touch_id-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/iOS/IOSDriver.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: false
android:
uiautomator2: false
espresso: false
uiautomator: false
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/simulator/touch_id
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: match
type: boolean
description: Are we simulating a successful touch (true) or a failed touch (false)
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L424
links:
- name: Appium Docs
url: https://github.com/appium/appium-xcuitest-driver/blob/master/docs/touch-id.md
@@ -0,0 +1,64 @@
---
name: Get Display Density
short_description: Retrieve display density(dpi) of the Android device
example_usage:
java:
|
driver.getDeviceDensity();
python:
|
self.driver.get_display_density()
javascript_wdio:
|
driver.getDisplayDensity();
ruby:
|
get_device_density
ruby_core:
|
@driver.get_device_density
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/AndroidMobileCommandHelper.html#getDisplayDensityCommand--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.display.Display.get_display_density"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_display_density-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_display_density-instance_method"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getdisplaydensity"
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: false
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/display_density
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: number
description: The device density(dpi) of the Android device
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L530
@@ -0,0 +1,73 @@
---
name: Open Notifications
short_description: Open Android notifications (Emulator only)
example_usage:
java:
|
driver.openNotifications();
python:
|
self.driver.open_notifications();
javascript_wd:
|
await driver.openNotifications();
javascript_wdio:
|
driver.openNotifications();
ruby:
|
open_notifications();
ruby_core:
|
@driver.open_notifications();
php:
|
$driver->openNotifications();
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/AndroidDriver.html#openNotifications--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.common.Common.open_notifications"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#opennotifications"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3004"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#open_notifications-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#open_notifications-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: false
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/open_notifications
method: POST
url_parameters:
- name: session_id
description: ID of the session to route the command to
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L408
@@ -0,0 +1,72 @@
---
name: Get System Bars
short_description: Retrieve visibility and bounds information of the status and navigation bars
example_usage:
java:
|
Map<String, String> systemBars = driver.getSystemBars();
python:
|
self.driver.get_system_bars()
javascript_wdio:
|
driver.getSystemBars();
ruby:
|
get_system_bars
ruby_core:
|
@driver.get_system_bars
php:
|
// TODO
csharp:
|
// TODO
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/android/HasAndroidDeviceDetails.html#getSystemBars--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.system_bars.SystemBars.get_system_bars"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getsystembars"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#get_system_bars-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#get_system_bars-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: false
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/system_bars
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: array<object>
description: Information about visibility and bounds of status and navigation bar
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L418
@@ -0,0 +1,79 @@
---
name: Get System Time
short_description: Get the time on the device
example_usage:
java:
|
String time = driver.getDeviceTime();
python:
|
time = self.driver.device_time
time = self.driver.get_device_time()
time = self.driver.get_device_time("YYYY-MM-DD")
javascript_wdio:
|
let time = driver.getDeviceTime();
javascript_wd:
|
let time = await driver.getDeviceTime();
ruby:
|
device_time
ruby_core:
|
@driver.device_time
php:
|
$time = $driver->getDeviceTime();
csharp:
|
string result = driver.DeviceTime;
client_docs:
java: "https://appium.github.io/java-client/io/appium/java_client/HasDeviceTime.html#getDeviceTime--"
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.device_time.DeviceTime.device_time"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getdevicetime"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3119"
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#device_time-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#device_time-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: false
windows:
windows: false
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/system_time
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
response:
- type: string
description: Time on the device
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L304
@@ -0,0 +1,80 @@
---
name: Clear Element
short_description: Clear an element's value
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
element.clear();
python:
|
self.driver.find_element_by_accessibility_id('SomeAccessibilityID').clear()
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
await element.clear();
javascript_wdio:
|
$("~SomeAccessibilityId").clearValue();
ruby:
|
find_element(:accessibility_id, "SomeAccessibilityID").clear
ruby_core:
|
@driver.find_element(:accessibility_id, "SomeAccessibilityID").clear
php:
|
// TODO PHP sample
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
element.Clear();
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#clear--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.clear"
javascript_wdio: "https://webdriver.io/docs/api/element/clearValue.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1780"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element:clear"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element:clear"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/SeleniumHQ/selenium/blob/master/dotnet/src/webdriver/Remote/RemoteWebElement.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/clear
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to clear.
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-get-element-tag-name
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidclear
@@ -0,0 +1,90 @@
---
name: Click
short_description: Click element at its center point.
description:
>
Clicks element at its center point. If the element's center point is obscured by another element, an element click intercepted error is returned. If the element is outside the viewport, an element not interactable error is returned.
Not all drivers automatically scroll the element into view and may need to be scrolled to in order to interact with it.
example_usage:
java:
|
MobileElement el = driver.findElementByAccessibilityId("SomeId");
el.click();
python:
|
el = self.driver.find_element_by_accessibility_id('SomeId')
el.click();
javascript_wd:
|
let element = await driver.elementByAccessibilityId('id', 'SomeId');
await element.click();
javascript_wdio:
|
$('#SomeId').click();
ruby:
|
find_element(:accessibility_id, 'SomeId').click
ruby_core:
|
@driver.find_element(:accessibility_id, 'SomeId').click
php:
|
$driver->byAccessibilityId('SomeId')->click();
csharp:
|
MobileElement el = driver.FindElement(MobileByAccessibilityID("Some ID");
el.click();
//Example
MobileElement el = driver.FindElement(MobileById("Some ID");
el.click();
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#click--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.click"
javascript_wdio: "https://webdriver.io/docs/api/element/click.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1672"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#click-instance_method"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#click-instance_method"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/click
method: 'POST'
url_parameters:
- name: session_id
description: UUID of the session
- name: element_id
description: UUID of the element
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#element-click
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidclick
@@ -0,0 +1,97 @@
---
name: Send Keys
short_description: Send a sequence of key strokes to an element
description:
>
Any UTF-8 character may be specified, however, if the server does not support native key events, it should simulate key strokes for a standard US keyboard layout. The Unicode Private Use Area code points, 0xE000-0xF8FF, are used to represent pressable, non-text keys (see table below).
(See [Unicode document](/docs/en/writing-running-appium/other/unicode.md) for information on Unicode characters)
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
element.sendKeys("Hello world!");
python:
|
self.driver.find_element_by_accessibility_id('SomeAccessibilityID').send_keys('Hello world!')
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
await element.type("Hello world!")
javascript_wdio:
|
$("~SomeAccessibilityId").addValue("Enter");
ruby:
|
find_element(:accessibility_id, "SomeAccessibilityID").send_keys("Hello World!")
ruby_core:
|
@driver.find_element(:accessibility_id, "SomeAccessibilityID").send_keys("Hello World!")
php:
|
$el = $this->byAccessibilityId('SomeAccessibilityID');
$el->setText('Hello world!');
csharp:
|
MobileElement el = driver.FindElement(MobileByAccessibilityID("Some ID");
el.SendKeys("Some Text");
//Example
MobileElement el = driver.FindElement(MobileById("Some ID");
el.SendKeys("Hello World");
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#sendKeys-java.lang.CharSequence...-"
python: "http://selenium-python.readthedocs.io/api.html?highlight=active_element#selenium.webdriver.common.action_chains.ActionChains.send_keys"
javascript_wdio: "https://webdriver.io/docs/api/element/addValue.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1700"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#send_keys-instance_method"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#send_keys-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/value
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to send keys to.
json_parameters:
- name: value
type: array<string>
description: (MJSONWP) The sequence of keys to type. An array must be provided. The server should flatten the array items to a single string to be typed
- name: text
type: string
description: (W3C) A single string to be typed
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-element-send-keys
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidvalue
@@ -0,0 +1,87 @@
---
name: Get Element Attribute
short_description: Get the value of an element's attribute
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
String tagName = element.getAttribute("content-desc");
python:
|
tagName = self.driver.find_element_by_accessibility_id('SomeAccessibilityID').get_attribute('content-desc')
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let tagName = await element.getAttribute("content-desc");
javascript_wdio:
|
let attribute = $("~SomeAccessibilityId").getAttribute("content-desc");
ruby:
|
find_element(:accessibility_id, 'SomeAccessibilityID').attribute("content-desc")
ruby_core:
|
@driver.find_element(:accessibility_id, 'SomeAccessibilityID').attribute("content-desc")
php:
|
$el = $this->byAccessibilityId('SomeAccessibilityID');
$name = $el->attribute('name');
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
string tagName = element.GetAttribute("content-desc");
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getAttribute"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.get_attribute"
javascript_wdio: "https://webdriver.io/docs/api/element/getAttribute.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1350"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium%2FWebDriver%2FElement:attribute"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium%2FWebDriver%2FElement:attribute"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm if all the drivers support this
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/attribute/:name
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the attribute from
- name: name
description: The name of the attribute
response:
- type: string
description: The value of the attribute or null if not set
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-get-element-attribute
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidattributename
@@ -0,0 +1,91 @@
---
name: Get Element CSS Value
short_description: Query the value of a web element's computed CSS property
description:
|
The CSS property to query should be specified using the CSS property name, not the JavaScript property name (e.g. background-color instead of backgroundColor).
This command only applies to webview contexts
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementById("SomeId");
String cssProperty = element.getCssValue("style");
python:
|
cssProperty = self.driver.find_element_by_accessibility_id('SomeId').value_of_css_property("style")
javascript_wd:
|
let element = await driver.elementById("SomeId");
let cssProperty = await element.getComputedCss();
javascript_wdio:
|
let cssProperty = $("~SomeId").getCSSProperty("style");
ruby:
|
find_element(:id, 'SomeId').css_value
ruby_core:
|
@driver.find_element(:id, 'SomeId').css_value
php:
|
// TODO PHP sample
csharp:
|
var element = driver.FindElementById("SomeId");
string cssProperty = element.GetCssValue("style");
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getCssValue--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.value_of_css_property"
javascript_wdio: "https://webdriver.io/docs/api/element/getCSSProperty.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1447"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element:css_value"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element:css_value"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm if all the drivers support this
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/css/:property_name
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the property from
- name: property_name
description: Name of the CSS property
response:
- type: string
description: Value of the CSS property
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-get-element-css-value
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidcsspropertyname
@@ -0,0 +1,83 @@
---
name: Is Element Displayed
short_description: Determine if an element is currently displayed
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
boolean isDisplayed = element.isDisplayed();
python:
|
self.driver.find_element_by_accessibility_id('SomeAccessibilityID').is_displayed()
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let isDisplayed = await element.isDisplayed();
javascript_wdio:
|
let isDisplayed = $("~SomeAccessibilityId").isDisplayed();
ruby:
|
find_element(:accessibility_id, "SomeAccessibilityID").displayed?
ruby_core:
|
@driver.find_element(:accessibility_id, "SomeAccessibilityID").displayed?
php:
|
$el = $this->byAccessibilityId('SomeAccessibilityID');
$isDisplayed = $el->displayed();
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
bool isDisplayed = element.Displayed;
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#isDisplayed--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.is_displayed"
javascript_wdio: "https://webdriver.io/docs/api/element/isDisplayed.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1370"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium%2FWebDriver%2FElement:displayed%3F"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium%2FWebDriver%2FElement:displayed%3F"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm support for these per platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/displayed
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to check if it is displayed
response:
- type: boolean
description: Whether the element is displayed
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementiddisplayed
@@ -0,0 +1,82 @@
---
name: Is Element Enabled
short_description: Determine if an element is currently enabled
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
boolean isEnabled = element.isEnabled();
python:
|
self.driver.find_element_by_accessibility_id('SomeAccessibilityID').is_enabled()
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let isEnabled = await element.isEnabled();
javascript_wdio:
|
let isEnabled = $("~SomeAccessibilityId").isEnabled();
ruby:
|
find_element(:accessibility_id, "SomeAccessibilityID").enabled?
ruby_core:
|
@driver.find_element(:accessibility_id, "SomeAccessibilityID").enabled?
php:
|
// TODO PHP sample
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
bool isEnabled = element.Enabled;
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#isEnabled---"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.is_enabled"
javascript_wdio: "https://webdriver.io/docs/api/element/isEnabled.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1386"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#enabled%3F-instance_method"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#enabled%3F-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm support for these per platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/enabled
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to check if it is enabled
response:
- type: boolean
description: Whether the element is enabled
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-is-element-enabled
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidenabled
@@ -0,0 +1,65 @@
---
name: Get Element Location in View
short_description: Determine an element's location on the screen once it has been scrolled into view (mainly an internal command and not supported by all clients)
example_usage:
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let location = await element.getLocationInView();
python:
|
element = self.driver.find_element_by_accessibility_id('SomeAccessibilityID')
element.location_in_view
javascript_wdio:
|
let element = $("~SomeAccessibilityId")
let location = driver.getElementLocationInView(element.elementId);
client_docs:
javascript_wdio: "https://webdriver.io/docs/api/jsonwp.html#getelementlocationinview"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2189"
# TODO: Confirm if all the drivers support this
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/location_in_view
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the location-in-view of
response:
- name: x
type: number
description: X coordinate
- name: y
type: number
description: Y coordinate
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidlocation_in_view
@@ -0,0 +1,89 @@
---
name: Get Element Location
short_description: Determine an element's location on the page or screen
description: The point (0, 0) refers to the upper-left corner of the page. The element's coordinates are returned as a JSON object with x and y properties
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
Point location = element.getLocation();
python:
|
location = self.driver.find_element_by_accessibility_id('SomeAccessibilityID').location
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let location = await element.getLocation();
javascript_wdio:
|
let location = $("~SomeAccessibilityId").getLocation();
ruby:
|
find_element(:accessibility_id, 'SomeAccessibilityID').location
ruby_core:
|
@driver.find_element(:accessibility_id, 'SomeAccessibilityID').location
php:
|
$el = $this->byAccessibilityId('SomeAccessibilityID');
$location = $el->location();
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
Point location = element.Location;
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getLocation--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.location"
javascript_wdio: "https://webdriver.io/docs/api/element/getLocation.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2175"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element:location"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element:location"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm if all the drivers support this
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/location
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the location of
response:
- name: x
type: number
description: X coordinate
- name: y
type: number
description: Y coordinate
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidlocation
@@ -0,0 +1,83 @@
---
name: Get Tag Name
short_description: Get an element's tag name
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
String tagName = element.getTagName();
python:
|
tagName = self.driver.find_element_by_accessibility_id('SomeAccessibilityID').tag_name
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let tagName = await element.getTagName();
javascript_wdio:
|
let tagName = $("~SomeAccessibilityId").getTagName();
ruby:
|
find_element(:accessibility_id, 'SomeAccessibilityID').tag_name
ruby_core:
|
@driver.find_element(:accessibility_id, 'SomeAccessibilityID').tag_name
php:
|
// TODO PHP sample
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
string tagName = element.TagName;
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getTagName--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.tag_name"
javascript_wdio: "https://webdriver.io/docs/api/element/getTagName.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1336"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#tag_name-instance_method"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#tag_name-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm if all the drivers support this
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/name
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the name from
response:
- type: string
description: The tag name of the element
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-get-element-tag-name
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidname
@@ -0,0 +1,75 @@
---
name: Get Tag Name
short_description: Get an element's tag name
example_usage:
java:
|
// TODO Java sample
python:
|
// TODO Python sample
javascript_wd:
|
// TODO javascript_wd sample
javascript_wdio:
|
driver.getPageIndex()
ruby:
|
// TODO Ruby sample
php:
|
// TODO PHP sample
csharp:
|
// TODO C# sample
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getTagName--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.tag_name"
javascript_wdio: "https://webdriver.io/docs/api/mjsonwp.html#getpageindex"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1336"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#tag_name-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# TODO: Confirm if all the drivers support this
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/pageIndex
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the name from
response:
- type: string
description: The tag name of the element
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L285
@@ -0,0 +1,93 @@
---
name: Get Element Rect
short_description: Gets dimensions and coordinates of an element
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
Rectangle rect = element.getRect();
python:
|
element = self.driver.find_element_by_accessibility_id('SomeAccessibilityID')
element.rect
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let rect = await element.getRect();
javascript_wdio:
|
let element = $("~SomeAccessibilityId")
let rect = driver.getElementRect(element.elementId);
ruby:
|
element = find_element :accessibility_id, "SomeAccessibilityID"
element.rect
ruby_core:
|
element = @driver.find_element :accessibility_id, "SomeAccessibilityID"
element.rect
php:
|
// TODO PHP sample
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
Rectangle rect = element.Rect;
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getRect--"
javascript_wdio: "https://webdriver.io/docs/api/webdriver.html#getelementrect"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#rect-instance_method"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#rect-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm if all the drivers support this
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/rect
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the rect of
response:
- name: x
type: number
description: X coordinate
- name: y
type: number
description: Y coordinate
- name: height
type: number
description: Height of the bounding rectangle
- name: width
type: number
description: Width of the bounding rectangle
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-get-element-rect
@@ -0,0 +1,89 @@
---
name: Replace the value
short_description: Replace the value to element directly
description:
>
Replace the value to element directly.
example_usage:
java:
|
// TODO Java sample
python:
|
self.driver.set_value('some')
javascript_wd:
|
// TODO JavaScript sample
javascript_wdio:
|
let element = $("~SomeAccessibilityId")
driver.replaceValue(element.elementId, 'some')
ruby:
|
element = find_element :accessibility_id, "SomeAccessibilityID"
replace_value element, 'some'
ruby_core:
|
element = @driver.find_element :accessibility_id, "SomeAccessibilityID"
@driver.replace_value element, 'some'
php:
|
// TODO PHP sample
csharp:
|
// TODO C# sample
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getText--" # TODO Java documentation link
python: "http://selenium-python.readthedocs.io/api.html" # TODO Python documentation link
javascript_wdio: "https://webdriver.io/docs/api/appium.html#replacevalue"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1832" # TODO JAvaScript documentation link
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#replace_value-instance_method"
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#replace_value-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: false
uiautomation: false
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/element/:element_id/replace_value
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the text from
json_parameters:
- name: value
type: array<string>
description: (MJSONWP) The sequence of keys to type. An array must be provided. The server should flatten the array items to a single string to be typed
- name: text
type: string
description: (W3C) A single string to be typed
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L451
@@ -0,0 +1,82 @@
---
name: Is Element Selected
short_description: Determine if a form or form-like element (checkbox, select, etc...) is selected
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
boolean isSelected = element.isSelected();
python:
|
self.driver.find_element_by_accessibility_id('SomeAccessibilityID').is_selected()
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let isSelected = await element.isSelected();
javascript_wdio:
|
let isSelected = $("~SomeAccessibilityId").isSelected();
ruby:
|
find_element(:accessibility_id, "SomeAccessibilityID").selected?
ruby_core:
|
@driver.find_element(:accessibility_id, "SomeAccessibilityID").selected?
php:
|
// TODO PHP sample
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
bool isSelected = element.Selected;
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#isSelected--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.is_selected"
javascript_wdio: "https://webdriver.io/docs/api/element/isSelected.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1402"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#selected%3F-instance_method"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#selected%3F-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm support for these per platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/selected
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to check if it is selected
response:
- type: boolean
description: Whether the element is selected
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-is-element-selected
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidselected
@@ -0,0 +1,89 @@
---
name: Get Element Size
short_description: Determine an element's size in pixels
description: The size will be returned as an object with width and height properties.
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
Dimension elementSize = element.getSize();
python:
|
size = self.driver.find_element_by_accessibility_id('SomeAccessibilityID').size
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let size = await element.getSize();
javascript_wdio:
|
let size = $("~SomeAccessibilityId").getSize();
ruby:
|
find_element(:accessibility_id, 'SomeAccessibilityID').size
ruby_core:
|
@driver.find_element(:accessibility_id, 'SomeAccessibilityID').size
php:
|
$el = $this->byAccessibilityId('SomeAccessibilityID');
$size = $el->size();
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
Size elementSize = element.Size;
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getSize--"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webelement.WebElement.size"
javascript_wdio: "https://webdriver.io/docs/api/element/getSize.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2203"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element:size"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element:size"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# TODO: Confirm if all the drivers support this
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/size
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the size of
response:
- name: width
type: number
description: Width of the element
- name: height
type: number
description: Height of the element
# Links to specifications. Should link to at least one specification
specifications:
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidsize
@@ -0,0 +1,87 @@
---
name: Get Element Text
short_description: Returns visible text for element
description:
>
Returns the visible text for the element.
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByClassName("SomeClassName");
String elText = element.getText();
python:
|
el = self.driver.find_element_by_accessibility_id('SomeAccessibilityID')
text = el.text
javascript_wd:
|
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
await element.text();
javascript_wdio:
|
$("~SomeAccessibilityId").getText();
ruby:
|
element = find_element :accessibility_id, "SomeAccessibilityID"
element.text
ruby_core:
|
element = @driver.find_element :accessibility_id, "SomeAccessibilityID"
element.text
php:
|
$el = $this->byAccessibilityId('SomeAccessibilityID');
$text = $el->text();
csharp:
|
var element = driver.FindElementByClassName("SomeClassName");
string elText = element.Text;
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getText--"
python: "http://selenium-python.readthedocs.io/api.html" # TODO Python documentation link
javascript_wdio: "https://webdriver.io/docs/api/element/getText.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1832"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#text-instance_method"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Element#text-instance_method"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/text
method: 'GET'
url_parameters:
- name: session_id
description: ID of the session to route the command to
- name: element_id
description: ID of the element to get the text from
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-get-element-text
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelementidtext
@@ -0,0 +1,92 @@
---
name: Find Element
short_description: Search for an element on the page
description:
>
Get the first element that matches a [locator strategy](/docs/en/commands/element/find-elements.md#selector-strategies)
example_usage:
java:
|
MobileElement elementOne = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
MobileElement elementTwo = (MobileElement) driver.findElementByClassName("SomeClassName");
python:
|
el = self.driver.find_element_by_accessibility_id('SomeAccessibilityID')
javascript_wd:
|
let elementOne = await driver.elementByAccessibilityId("SomeAccessibilityID");
let elementTwo = await driver.element("id", "SomeID");
javascript_wdio:
|
$("~SomeAccessibilityId");
ruby:
|
find_element(:accessibility_id, 'SomeAccessibilityID')
ruby_core:
|
@driver.find_element(:accessibility_id, 'SomeAccessibilityID')
php:
|
$el = $this->byAccessibilityId('SomeAccessibilityID');
csharp:
|
AndroidElement elementOne = driver.FindElementByAccessibilityID("Some ID");
AndroidElement elementTwo = driver.FindElementByClassName("Some class");
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#findElement-org.openqa.selenium.By-"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.find_element"
javascript_wdio: "https://webdriver.io/docs/api/browser/$.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L745"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/SearchContext:find_element"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/SearchContext:find_element"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: using
type: string
description: The locator strategy to use
- name: value
type: string
description: The search target
response:
- name: ELEMENT
type: object
description: A JSON object for the located element
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#find-element
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelement
@@ -0,0 +1,112 @@
---
name: Find Elements
short_description: Search for multiple elements
description:
>
Get a list of elements that match the [locator selector](/docs/en/writing-running-appium/finding-elements.md).
selector_strategies:
- name: Accessibility ID
description: Read a unique identifier for a UI element. For XCUITest it is the element's `accessibility-id` attribute. For Android it is the element's `content-desc` attribute.
- name: Class name
description: "For IOS it is the full name of the XCUI element and begins with XCUIElementType. For Android it is the full name of the UIAutomator2 class (e.g.: android.widget.TextView)"
- name: ID
description: Native element identifier. `resource-id` for android; `name` for iOS.
- name: Name
description: Name of element
- name: XPath
description: Search the app XML source using xpath (not recommended, has performance issues)
- name: Image
description: Locate an element by matching it with a base 64 encoded image file
- name: Android UiAutomator (UiAutomator2 only)
description: Use the UI Automator API, in particular the [UiSelector](https://developer.android.com/reference/android/support/test/uiautomator/UiSelector.html) class to locate elements. In Appium you send the Java code, as a string, to the server, which executes it in the application’s environment, returning the element or elements.
- name: Android View Tag (Espresso only)
description: Locate an element by its [view tag](https://developer.android.com/reference/android/support/test/espresso/matcher/ViewMatchers.html#withTagValue(org.hamcrest.Matcher%3Cjava.lang.Object%3E))
- name: Android Data Matcher (Espresso only)
description: Locate an element using [Espresso DataMatcher](https://developer.android.com/reference/android/support/test/espresso/Espresso#ondata)
- name: IOS UIAutomation
description: When automating an iOS application, Apple’s [Instruments](/docs/en/drivers/ios-uiautomation.md) framework can be used to find elements
example_usage:
java:
|
List<MobileElement> elementsOne = (List<MobileElement>) driver.findElementsByAccessibilityId("SomeAccessibilityID");
List<MobileElement> elementsTwo = (List<MobileElement>) driver.findElementsByClassName("SomeClassName");
python:
|
el = self.driver.find_elements_by_accessibility_id('SomeAccessibilityID')
javascript_wd:
|
let elementsOne = await driver.elementsByAccessibilityId("SomeAccessibilityID");
let elementsTwo = await driver.elements("id", "SomeID");
javascript_wdio:
|
$$("~SomeAccessibilityId");
ruby:
|
find_elements(:accessibility_id, "~SomeAccessibilityID")
ruby_core:
|
@driver.find_elements(:accessibility_id, "~SomeAccessibilityID")
php:
|
$els = $this->elements($this->using('accessibility id')->value('SomeAccessibilityID'));
csharp:
|
IEnumerable<AppiumWebElement> elementsOne = driver.FindElementsByAccessibilityId("SomeAccessibilityID");
IEnumerable<AppiumWebElement> elementsTwo = driver.FindElementsByClassName("SomeClassName");
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#findElements-org.openqa.selenium.By-"
python: "http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.find_elements"
javascript_wdio: "https://webdriver.io/docs/api/browser/$$.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L798"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/SearchContext:find_elements"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/SearchContext:find_elements"
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
# Driver support by platform
driver_support:
ios:
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
uiautomator: true
mac:
mac: true
windows:
windows: true
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements
method: 'POST'
url_parameters:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: using
type: string
description: The locator strategy to use
- name: value
type: string
description: The search target
response:
- type: Array<String>
description: A list of of JSON objects for the located elements
# Links to specifications. Should link to at least one specification
specifications:
w3c: https://www.w3.org/TR/webdriver/#dfn-find-elements
jsonwp: https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelements

Some files were not shown because too many files have changed in this diff Show More