Compare commits

..
Author SHA1 Message Date
Dan Graham 00af3f0a80 Prepare for 1.12.0-rc.1 (#12345) 2019-03-19 10:48:33 -07:00
986 changed files with 23830 additions and 59039 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 -41
View File
@@ -1,43 +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/*/scripts/**/*.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
+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.
-1
View File
@@ -10,7 +10,6 @@ _Put an `x` in the boxes that apply_
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation Update (if none of the other choices apply)
## Checklist
-20
View File
@@ -1,20 +0,0 @@
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
-26
View File
@@ -1,26 +0,0 @@
# Configuration for Lock Threads - https://github.com/dessant/lock-threads
# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 365
# Skip issues and pull requests created before a given timestamp. Timestamp must
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
skipCreatedBefore: false
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
exemptLabels: []
# Label to add before locking, such as `outdated`. Set to `false` to disable
lockLabel: false
# Comment to post before locking. Set to `false` to disable
lockComment: >
This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue for
related bugs.
# Assign `resolved` as the reason for locking. Set to `false` to disable
setLockReason: false
# Limit to only `issues` or `pulls`
only: issues
-53
View File
@@ -1,53 +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]
jobs:
test:
name: Test
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 17.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install latest npm
run: npm install -g npm
- name: Install dependencies
run: npm install
- name: Run unit tests
run: npm run test:ci
- name: Install @appium/fake-driver
run: npm run install-fake-driver
- name: Run E2E tests
run: npm run e2e-test
lint:
name: Lint & Check Types
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@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@v3
- name: Install dependencies
run: npm install
- name: Generate docs
run: npm run generate-docs
-21
View File
@@ -1,21 +0,0 @@
name: License Checks
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
jobs:
fossa-check:
name: Run FOSSA Analysis
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: '2.0'
- 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}}
+14 -20
View File
@@ -8,10 +8,10 @@ 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
@@ -25,6 +25,7 @@ lib/devices/android/bootstrap/target/
.*~
*~
org.eclipse.ltk.core.refactoring.prefs
/selendroid
.appiumconfig*
build/
.idea
@@ -40,22 +41,15 @@ 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/.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
-12
View File
@@ -1,12 +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
+123
View File
@@ -0,0 +1,123 @@
language: node_js
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.8
env:
global:
- CXX=g++-4.8
node_js: "10"
jobs:
include:
- stage: Tests
os: linux
script: npm run test && npm run e2e-test
node_js: "11"
after_script: npm run coverage
- stage:
os: linux
script: npm run test && npm run e2e-test
node_js: "10"
- stage:
os: linux
script: npm run test && npm run e2e-test
node_js: "8"
- stage:
name: test documentation generation
os: linux
before_script:
- npm install
script:
- npm run generate-docs
- stage: Update assets
name: Documentation
os: osx
if: branch = master AND type != pull_request AND !tag
env:
- GITHUB_TOKEN=$TRIAGER_BOT_TOKEN
before_script:
- brew install hub
- hub --version
- git remote set-url origin https://triager:$TRIAGER_BOT_TOKEN@github.com/appium/appium
- git checkout -b generate-docs-$TRAVIS_COMMIT
- npm install
script:
# Generate the docs
- npm run generate-docs
- git add .
# log the status so we know what is going on, on failure
- git status -s
# If docs were generated, make a PR to update the docs
- |
if [[ -n $(git status -s) ]]; then
git commit -a -n -m 'Update generated docs';
git push origin generate-docs-$TRAVIS_COMMIT;
hub pull-request -b "appium:master" -h "appium:generate-docs-$TRAVIS_COMMIT" -m "Update auto-generated docs";
fi
- stage:
name: Bundle
# only want to run this on the main master branch
if: branch = master AND type != pull_request
os:
- osx
- osx_image: xcode9.4
env:
- NODE_ENV=production
- CC=gcc
- CXX=g++
before_install:
- gcc --version
- brew upgrade carthage
install:
# Install prod dependencies
- npm install
# Install only the dev dependencies that we need
- npm install --only=dev gulp
- npm install --only=dev appium-gulp-plugins
# get appium-xcuitest-driver fully built
- pushd node_modules/appium-xcuitest-driver/WebDriverAgent
# do not use build script because Travis _will_ have rate limits
- carthage bootstrap --no-use-binaries
- cp Cartfile.resolved Carthage
- mkdir -p ./Resources/WebDriverAgent.bundle
- popd
before_script:
# Build the assets
- npm run build
# Remove the dev depenedencies
- npm prune
script:
- npm run zip
- npm install --only=dev gulp
- npm install --only=dev appium-gulp-plugins
- npm run upload
- stage: Update appium.io
if: tag
os: osx
env:
- HUB_VERBOSE=true GITHUB_TOKEN=$TRIAGER_BOT_TOKEN
before_script:
- brew install hub
- pip install mkdocs==0.16.3
# Checkout appium.io repository
- git clone https://triager:$TRIAGER_BOT_TOKEN@github.com/appium/appium.io.git --branch=gh-pages && cd appium.io/
- git checkout -b docs-$TRAVIS_TAG
- bundle install
- npm install
script:
# Build the docs and make a PR to get them on appium.io
- npm run build:docs
- git commit -a -n -m 'Updated docs for latest Appium version'
- git push origin docs-$TRAVIS_TAG
- hub pull-request -b "appium:gh-pages" -h "appium:docs-$TRAVIS_TAG" -m "Update documentation for latest version" | exit 0 # The PR command works but always returns non-negative
+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}"
]
}
]
}
-136
View File
@@ -1,136 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"script": "dev",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [],
"label": "npm: dev",
"detail": "lerna exec --parallel gulp dev",
"isBackground": true,
},
{
"type": "shell",
"command": "npm",
"args": [
"exec",
"--",
"lerna",
"exec",
"--scope=@appium/fake-driver",
"--",
"gulp",
"transpile"
],
"label": "transpile: @appium/fake-driver",
"problemMatcher": []
},
{
"type": "shell",
"command": "npm",
"args": [
"exec",
"--",
"lerna",
"exec",
"--scope=appium",
"--",
"gulp",
"transpile"
],
"label": "transpile: appium",
"problemMatcher": []
},
{
"type": "shell",
"command": "npm",
"args": [
"exec",
"--",
"lerna",
"exec",
"--scope=@appium/support",
"--",
"gulp",
"transpile"
],
"label": "transpile: @appium/support",
"problemMatcher": []
},
{
"type": "shell",
"command": "npm",
"args": [
"exec",
"--",
"lerna",
"exec",
"--scope=@appium/test-support",
"--",
"gulp",
"transpile"
],
"label": "transpile: @appium/test-support",
"problemMatcher": []
},
{
"type": "shell",
"command": "npm",
"args": [
"exec",
"--",
"lerna",
"exec",
"--scope=@appium/gulp-plugins",
"--",
"gulp",
"transpile"
],
"label": "transpile: @appium/gulp-plugins",
"problemMatcher": []
},
{
"type": "shell",
"command": "npm",
"args": [
"exec",
"--",
"lerna",
"exec",
"--scope=@appium/doctor",
"--",
"gulp",
"transpile"
],
"label": "transpile: @appium/doctor",
"problemMatcher": []
},
{
"type": "shell",
"command": "npm",
"args": [
"exec",
"--",
"lerna",
"exec",
"--scope=@appium/base-driver",
"--",
"gulp",
"transpile"
],
"label": "transpile: @appium/base-driver",
"problemMatcher": []
},
{
"type": "npm",
"script": "test:e2e:appium",
"problemMatcher": [],
"label": "npm: test:e2e:appium",
"detail": "e2e tests: appium"
}
]
}
-66
View File
@@ -1,66 +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/**/*',
'./packages/*/test/**/mocks.js',
'./packages/*/test/helpers.js',
'./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/**/*',
},
{
instrument: false,
pattern: './packages/gulp-plugins/build/**/*',
},
// this setup file is special
{
instrument: false,
pattern: './test/setup.js'
}
],
testFramework: 'mocha',
tests: [
'./packages/*/test/**/*-specs.js',
'./packages/*/test/unit/**/*.spec.js',
'!./packages/*/test/**/*-e2e-specs.js',
'!./packages/*/test/e2e/**/*',
'!./packages/*/node_modules/**',
// this is more of an E2E test and it's tedious to run
'!./packages/gulp-plugins/test/transpile-specs.js',
],
workers: {
restart: true,
},
setup() {
require('./test/setup');
},
runMode: 'onsave'
};
};
+2 -877
View File
@@ -1,878 +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)
===================================
Appium 1.19.0 is a minor release
### Android General
* Add capabilities:
* `allowDelayAdb` to prevent `-delay-adb` command line option to detect emulator startup [#14773](https://github.com/appium/appium/issues/14773)
* Add `mobile:` functions:
* `mobile:getContexts` to get WebView details [appium-android-driver#662](https://github.com/appium/appium-android-driver/pull/662)
* Accept Web Authentication routes (they are part of W3C) [appium-base-driver#433](https://github.com/appium/appium-base-driver/pull/433)
* Change to enable `ensureWebviewsHavePages` by default [appium-android-driver#652](https://github.com/appium/appium-android-driver/pull/652)
* Change to close pending requests on the server side if the server is terminated [appium-base-driver#424](https://github.com/appium/appium-base-driver/pull/424)
* Fix CPU performance data parsing [appium-android-driver#659](https://github.com/appium/appium-android-driver/pull/659)
* Fix possible memory leak [appium-base-driver#430](https://github.com/appium/appium-base-driver/pull/430)
* Fix responses to unexpected server errors [appium-base-driver#432](https://github.com/appium/appium-base-driver/pull/432)
### Android(UIAutomator2)
* Add `mobile:` functions:
* `mobile:dragGesture`, `mobile:flingGesture`, `mobile:longClickGesture`, `mobile:pinchCloseGesture`, `mobile:pinchOpenGesture`, `mobile:swipeGesture` and `mobile:scrollGesture`: [Automating Mobile Gestures With UiAutomator2 Backend](https://appium.io/docs/en/writing-running-appium/android/android-mobile-gestures/)
* Add css selector support [appium-uiautomator2-driver#410](https://github.com/appium/appium-uiautomator2-driver/pull/410)
* `css selector` will be converted to `-android uiautomator` selector in UIAutomator2. Read [appium-uiautomator2-driver#410](https://github.com/appium/appium-uiautomator2-driver/pull/410) for more details.
* Enhance XPath lookup performance [appium-uiautomator2-server#386](https://github.com/appium/appium-uiautomator2-server/pull/386)
* Fix port guard logic to avoid port conflict [appium-uiautomator2-driver#409](https://github.com/appium/appium-uiautomator2-driver/pull/409)
### Android(Espresso)
* Raise `InvalidContextError` error when the app under test stops because of instrumentation process crashes (appium-espresso-driver#591)[https://github.com/appium/appium-espresso-driver/pull/591]
* Add a possibility to allow JSON formatted string as `espressoBuildConfig` capability [appium-espresso-driver#609](https://github.com/appium/appium-espresso-driver/pull/609)
* Add `mobile:` functions:
* `mobile:registerIdlingResources`, `mobile:unregisterIdlingResources` and `mobile:listIdlingResources` to customize idling resources [appium-espresso-driver#597](https://github.com/appium/appium-espresso-driver/pull/597)
* Add a custom exception description, which helps to debug issues when the application under test is not idling long enough [appium-espresso-driver#589](https://github.com/appium/appium-espresso-driver/pull/589)
* The `com.google.android.material` dependency became optional [appium-espresso-driver#616](https://github.com/appium/appium-espresso-driver/pull/616)
* `espressoBuildConfig` now allows to prevent custom dependencies for both categories: `additionalAppDependencies` and `additionalAndroidTestDependencies`. Please check [caps](https://appium.io/docs/en/writing-running-appium/caps/).
* `mobile:navigateTo` requires `com.google.android.material`, so please add `"espressoBuildConfig": "{\"additionalAndroidTestDependencies\":[\"com.google.android.material:material:1.2.1\"]}"` as your capabilities if needed
* Fix to exclude transitive dependencies of espresso-contrib[appium-espresso-driver#596](https://github.com/appium/appium-espresso-driver/pull/596)
* Fix to be able to build with SDK 29 [appium-espresso-driver#604](https://github.com/appium/appium-espresso-driver/pull/604)
### iOS(general)
* Improve the performane of simulator state state checks [appium-ios-simulator#284](https://github.com/appium/appium-ios-simulator/pull/284)
* Fix granting access to Calendar on Xcode 11.4 and later [appium-ios-simulator#288](https://github.com/appium/appium-ios-simulator/pull/288)
* Adjust the decimal separator in the Simulator location setting script according to system locale settings [appium-ios-simulator#295](https://github.com/appium/appium-ios-simulator/pull/295)
### iOS(XCUITest)
* Add capabilities:
* `simulatorDevicesSetPath` allows to set an alternative path to a Simulator devices set [appium-ios-simulator#290](https://github.com/appium/appium-ios-simulator/pull/290)
* `allowProvisioningDeviceRegistration` adds `-allowProvisioningUpdates` and `-allowProvisioningDeviceRegistration` flag to the list of xcodebuild arguments [appium-xcuitest-driver#1241](https://github.com/appium/appium-xcuitest-driver/pull/1241)
* Add mobile functions:
* `mobile:resetPermission` to reset all previous allowed or denied permissions for the application under test. It requires Xcode 11.4 and later [https://github.com/appium/appium-xcuitest-driver#1239](https://github.com/appium/appium-xcuitest-driver/pull/1239), [WebDriverAgent#392](https://github.com/appium/WebDriverAgent/pull/392)
* Add `velocity` argument for over Xcode 11.4 in `mobile:swipe` [appium#14793](https://github.com/appium/appium/pull/14793)
* Enhance performance
* e.g. improve taking snapshot to get elements [WebDriverAgent#393](https://github.com/appium/WebDriverAgent/pull/393)
* Fix alert handling in some cases [WebDriverAgent#400](https://github.com/appium/WebDriverAgent/pull/400)
### Flutter
The version is `0.25`
### You.i Engine Driver
The version is `1.2.7`
CHANGES IN VERSION 1.18.2 and 1.18.3 (FROM 1.18.1)
===================================
Appium 1.18.2 and 1.18.3 are patch releases
* Supports Xcode 12 + iOS 14
### iOS(XCUITest)
* Allow to input text by send keys API without focus check for newer Xcode versions [WebDriverAgent#379](https://github.com/appium/WebDriverAgent/pull/379)
* Add supports `xcrun xctrace` instead of `instruments` command for Xcode 12+ [appium-xcuitest-driver#1223](https://github.com/appium/appium-xcuitest-driver/pull/1223)
CHANGES IN VERSION 1.18.1 (FROM 1.18.0)
===================================
Appium 1.18.1 is a patch release
#### Android General
* Fix to properly clean up forwarded ports if parallel sessions are running [appium-chromedriver#183](https://github.com/appium/appium-chromedriver/pull/183)
* Fix to avoid a redundant Chromedriver download operation if a matching driver is already present [appium-chromedriver#186](https://github.com/appium/appium-chromedriver/pull/186)
#### Android (UiAutomator2)
* Fix to return a proper response for missing route [appium/appium-uiautomator2-server#373](https://github.com/appium/appium-uiautomator2-server/pull/373)
* Fix to allow double values as touch action coordinates [ appium/appium-uiautomator2-server#372](https://github.com/appium/appium-uiautomator2-server/pull/372)
* Fix [#14586](https://github.com/appium/appium/issues/14586) which might affect XPath locators executed on elemetns, retrieved from nested lookup requests [appium/appium-uiautomator2-server#372](https://github.com/appium/appium-uiautomator2-server/pull/371)
* A known issue in 1.18.0
CHANGES IN VERSION 1.18.0 (FROM 1.17.1)
===================================
Appium 1.18.0 is a minor release
#### General
* Add `score` attribute for ImageElement [appium-base-driver#396](https://github.com/appium/appium-base-driver/pull/396)
* Add a route to be able to execute Chrome DevTools commands to downstream drivers [appium-base-driver#405](https://github.com/appium/appium-base-driver/pull/405)
* e.g. Clients can send `/session/:sessionId/goog/cdp/execute` command to Chromedriver
* Fix socket leak by handling connections in a shared pool [appium-base-driver#416](https://github.com/appium/appium-base-driver/pull/416)
* Fix to encode filenames with UTF-8 while extracting `.ipa` packages [appium-base-driver#419](https://github.com/appium/appium-base-driver/pull/419)
* The change fixes `.ipa` packages deployment that contain file names containing non-ASCII characters like [this issue](https://github.com/appium/appium/issues/14100)
#### Android General
* Add capabilities:
* `mockLocationApp` to make location mock configurable [appium-android-driver#632](https://github.com/appium/appium-android-driver/pull/632)
* `logcatFormat`, `logcatFilterSpecs` to allow logcat output format customization [appium-adb#528](https://github.com/appium/appium-adb/pull/528)
* `ignoreHiddenApiPolicyError` to ignore permission error when hidden api policy change happens [appium-adb#507](https://github.com/appium/appium-adb/pull/507)
* Add `mobile:` functions:
* `mobile: getDeviceTime` to get the device time [appium-android-driver#623](https://github.com/appium/appium-android-driver/pull/623)
* `mobile: execEmuConsoleCommand` to send [emulator console commands](https://developer.android.com/studio/run/emulator-console) [appium-android-driver#517](https://github.com/appium/appium-adb/pull/517) [#630](https://github.com/appium/appium-android-driver/pull/630)
* `mobile: deleteFile` to delete a file [appium-android-driver#634](https://github.com/appium/appium-android-driver/pull/634)
* `mobile: startService` and `mobile: stopService` to start or stop services via [adb shell commands](https://stackoverflow.com/questions/7415997/how-to-start-and-stop-android-service-from-a-adb-shell) [appium-android-driver#647](https://github.com/appium/appium-android-driver/pull/647)
* Add including native context log for getLog command [appium-android-driver#646](https://github.com/appium/appium-android-driver/pull/646)
* Fix tapping by element coordinate [appium-android-driver#355](https://github.com/appium/appium-android-driver/pull/355)
#### Android (UiAutomator2)
* Add capabilities:
* `disableSuppressAccessibilityService` to control [FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES]((https://developer.android.com/reference/android/app/UiAutomation#FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES)) flag [appium-uiautomator2-driver#376](https://github.com/appium/appium-uiautomator2-driver/pull/376)
waitForLaunch
* `mjpegServerPort` to customize MJPEG server port [appium-uiautomator2-driver#386](https://github.com/appium/appium-uiautomator2-driver/pull/386)
* Add `mobile:` functions:
* `mobile: sensorSet` to set sensor [appium-uiautomator2-driver#378](https://github.com/appium/appium-uiautomator2-driver/pull/378)
* `mobile: scroll` to allow to scroll action in some ways. Please read [appium-uiautomator2-driver](https://github.com/appium/appium-uiautomator2-driver/blob/master/lib/commands/general.js) for more details. [appium-uiautomator2-driver#385](https://github.com/appium/appium-uiautomator2-driver/pull/385)
* `mobile: deepLink` to send deeplink command with `waitForLaunch` option to handle the wait for logic [appium-uiautomator2-driver#389](https://github.com/appium/appium-uiautomator2-driver/pull/389)
* `mobile: viewportRect` to return view port rectangle [appium-uiautomator2-driver#404](https://github.com/appium/appium-uiautomator2-driver/pull/404)
* Known issue
* [#14586](https://github.com/appium/appium/issues/14586): [Root element fix](https://github.com/appium/appium-uiautomator2-server/pull/363) might affect XPath locators executed on elements, retrieved from nested lookup requests (the document root for such elements is now the element itself rather than a fake `hierarchy` root)
#### Android (Espresso)
* Add capabilities:
* `disableSuppressAccessibilityService` to control [FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES]((https://developer.android.com/reference/android/app/UiAutomation#FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES)) flag [appium-espresso-driver#559](https://github.com/appium/appium-espresso-driver/pull/559)
* `appLocale` to set [Locale](https://developer.android.com/reference/java/util/Locale) for [the target context](https://developer.android.com/reference/androidx/test/core/app/ApplicationProvider#getApplicationContext()) [appium-espresso-driver#580](https://github.com/appium/appium-espresso-driver/pull/580)
* Add `mobile:` functions:
* `mobile: sensorSet` to set sensor [appium-espresso-driver](https://github.com/appium/appium-espresso-driver/pull/560)
### iOS (XCUITest)
* Add Xcode 12 beta and iOS 14 support
* Add settings:
* `boundElementsByIndex` for bounding strategy to lookup elements [WebDriverAgent#357](https://github.com/appium/WebDriverAgent/pull/357)
* Add XCTest `mobile:` functions: [appium-xcuitest-driver#1205](https://github.com/appium/appium-xcuitest-driver/pull/1205). Please read [test code](https://github.com/appium/appium-xcuitest-driver/blob/master/test/functional/device/xctest-e2e-specs.js) as an example.
* `mobile: runXCTest` to run XCTest bundle
* `mobile: installXCTestBundle` to install the xctest bundle
* `mobile: listXCTestBundles` to get list of xctests within bundle
* `mobile: listXCTestsInTestBundle` to return the list of XCTest bundles
* Add audio recording for simulators and real devices [appium-xcuitest-driver#1207](https://github.com/appium/appium-xcuitest-driver/pull/1207)
* Read [Audio Capture From iOS Simulators and Real Devices](https://appium.io/docs/en/writing-running-appium/ios/audio-capture/)
* Add prebuilt WebDriverAgentRunner snapshots to speed up tests execution on iOS Simulator in `appium-webdriveragend` npm package [WebDriverAgent#331](https://github.com/appium/WebDriverAgent/pull/331)
* The path is `appium/node_modules/appium-webdriveragend/WebDriverAgentRunner-Runner.app.zip`
* The usage is:
```bash
idb install /WebDriverAgentRunner-Runner.app --udid <device-udid>
idb launch com.facebook.WebDriverAgentRunner.xctrunner
```
* Fix a memory leak by removing unnecessary dependencies [WebDriverAgent#348](https://github.com/appium/WebDriverAgent/pull/348) [WebDriverAgent#350](https://github.com/appium/WebDriverAgent/pull/350) [WebDriverAgent#351](https://github.com/appium/WebDriverAgent/pull/351)
* Fix respecting `webDriverAgentUrl` in favor of `wdaLocalPort` and `wdaBaseUrl` for real devices [WebDriverAgent#342](https://github.com/appium/WebDriverAgent/pull/342)
* Fix ignoring the case where process locking the socket is not alive [WebDriverAgent#339](https://github.com/appium/WebDriverAgent/pull/339)
* Fix to improve alert buttons detection [WebDriverAgent#322](https://github.com/appium/WebDriverAgent/pull/322)
### Windows
* Add video recording [appium-windows-driver#66](https://github.com/appium/appium-windows-driver/pull/66)
* Add findByImage [appium-windows-driver#67](https://github.com/appium/appium-windows-driver/pull/67)
CHANGES IN VERSION 1.17.1 (FROM 1.17.0)
===================================
Appium 1.17.1 is a patch release
### iOS (XCUITest)
* feature: get idb working under launchWithIDB cap (https://github.com/appium/appium-xcuitest-driver/pull/1193)
* feature: Add mobile command to get device time (https://github.com/appium/appium-xcuitest-driver/pull/1190)
* feature: Add mobile command for tapWithNumberOfTaps (https://github.com/appium/appium-xcuitest-driver/pull/1184)
* fix: datetime retrieval for real devices (https://github.com/appium/appium-xcuitest-driver/pull/1189) (https://github.com/appium/appium-xcuitest-driver/pull/1192)
## iOS (Web)
* feature: allow safari alert with block/allow buttons to be handled (https://github.com/appium/appium-xcuitest-driver/pull/1185)
* fix: cookie functions should not get proxied to wda ever (https://github.com/appium/appium-xcuitest-driver/pull/1182)
* fix: wait for atom finish before checking for alerts (https://github.com/appium/appium-xcuitest-driver/pull/1183)
* fix: properly handle promise during wait for atom (https://github.com/appium/appium-xcuitest-driver/pull/1187)
* fix: do not send Target.exists on iOS 13.4 (https://github.com/appium/appium-remote-debugger/pull/219)
CHANGES IN VERSION 1.17.0 (FROM 1.16.0)
===================================
Appium 1.17.0 is a minor release.
#### General
* Active driver sessions are now properly cleaned up upon main Appium process termination (https://github.com/appium/appium/pull/13913)
* Preliminary support for iOS 13.4
#### iOS General
#### iOS (XCUITest)
* Fix app installation on real devices (https://github.com/appium/appium-xcuitest-driver/pull/1139) (https://github.com/appium/appium-xcuitest-driver/pull/1138) (https://github.com/appium/appium-xcuitest-driver/pull/1140) (https://github.com/appium/appium-xcuitest-driver/pull/1152) (https://github.com/appium/appium-ios-device/pull/67)
* Fix temporary log file to be more efficient (https://github.com/appium/appium-xcuitest-driver/pull/1147)
* Fix port cleanup during shutdown (https://github.com/appium/appium-xcuitest-driver/pull/1153)
* Fix starting of `idb` when used (https://github.com/appium/appium-idb/pull/20)
* Add `screenshotOrientation` as Settings API to customize screenshot orientation (https://github.com/appium/WebDriverAgent/pull/277)
* Capabilities:
* `simulatorStartupTimeout` change the default timeout for simulator startup (https://github.com/appium/appium-xcuitest-driver/pull/1163)
* `simulatorPasteboardAutomaticSync` turn on/off simulator pasteboard synching at launch (https://github.com/appium/appium-xcuitest-driver/pull/1168)
* `simulatorTracePointer` turn on/off pointer highlighting in simulators (https://github.com/appium/appium-xcuitest-driver/pull/1169)
* Add `snapshotMaxDepth` as Settings API to restrict the depth of getting the elements source tree (https://github.com/appium/WebDriverAgent/pull/273)
* Add `mobile:` functions for new `simctl` functionality in Xcode 11.4+ (https://github.com/appium/appium-xcuitest-driver/pull/1162) (https://github.com/appium/appium-ios-simulator/pull/260) (https://github.com/appium/node-simctl/pull/96)
* `mobile: setPermission`
* `mobile: getAppearance`
* `mobile: setAppearance`
* Webviews/Safari:
* Add webview bundle identifier to data returned with `fullContextList`
* Add `waitForWebviewMs` option to `mobile:getContexts` endpoint, to block for a period while waiting for webview report (https://github.com/appium/appium-xcuitest-driver/pull/1135)
* Allow SafariViewController webviews to be reached automatically (https://github.com/appium/appium-remote-debugger/pull/189) (https://github.com/appium/appium-remote-debugger/pull/197)
* Fix asynchronous execution in webview context for iOS 12.1 and below (https://github.com/appium/appium-remote-debugger/pull/199)
* Fix handling of React components whose state is handled by React (https://github.com/appium/appium-remote-debugger/pull/202)
* Fix webviews for iOS 13.3 and 13.4 (https://github.com/appium/appium-remote-debugger/pull/203) (https://github.com/appium/appium-remote-debugger/pull/204) (https://github.com/appium/appium-remote-debugger/pull/205) (https://github.com/appium/appium-remote-debugger/commit/e067f0eab012b5ef67f1ce67eb85479c4abe440b) (https://github.com/appium/appium-xcuitest-driver/pull/1174)
* Fix handling of alerts opened from webview (https://github.com/appium/appium-xcuitest-driver/pull/1176)
#### Android General
* Add `mobile:` functions:
* `mobile: listSms` to get the list of SMS (https://github.com/appium/appium-android-driver/pull/602 https://github.com/appium/appium-espresso-driver/pull/548)
* `mobile: startScreenStreaming`, `mobile: stopScreenStreaming` (https://github.com/appium/appium-espresso-driver/pull/521)
* `mobile: getNotifications` to get the list of notifications (https://github.com/appium/appium-android-driver/pull/598)
* Fix `toggle_location_services` on Android 9.0 (https://github.com/appium/appium-android-driver/pull/594)
* Add to allow letter as a `platformVersion` like `R` in preview/beta Android OS release ( https://github.com/appium/appium-android-driver/pull/607 )
* Updated emulator detection logic (https://github.com/appium/appium/pull/14015)
* Allow `mobile:` functions to perform actions in WebView contexts (https://github.com/appium/appium-uiautomator2-driver/pull/366) (https://github.com/appium/appium-espresso-driver/pull/549)
#### Android (UiAutomator2)
* Added `mobile: type` endpoint (https://github.com/appium/appium-uiautomator2-driver/pull/365)
* Tuned `sendKeys` endpoint (https://github.com/appium/appium-uiautomator2-server/pull/329)
#### Android (Espresso)
* Capabilities:
* `espressoBuildConfig` customize the espresso server build configuration (https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md#espresso-server-build-configuration-json)
* `intentOptions` customize intent for launching activities (https://github.com/appium/appium-espresso-driver/pull/542)
* `skipServerInstallation` skip espresso driver preparation (https://github.com/appium/appium-espresso-driver/pull/526)
* Add `-android viewmatcher` selector (https://github.com/appium/appium-espresso-driver/pull/516)
* Add `noMultilineButtons`, `noEllipsizedText` and `noOverlaps` as available element attributes to extend available view assertions (https://github.com/appium/appium-espresso-driver/pull/544)
* Support `open_notifications` endpoint (https://github.com/appium/appium-espresso-driver/pull/536/files)
#### Windows
#### MacOS
* Capabilities:
* `a4mHost`, `a4mPort`, `a4mAppPath` and `killAllA4MAppBeforeStart` make mac driver configurable (https://github.com/appium/appium-mac-driver/pull/42) (https://github.com/appium/appium-mac-driver/pull/44)
* Added the possibility to autodetect the location of the server app: https://github.com/appium/appium-mac-driver/pull/44
CHANGES IN VERSION 1.16.0 (FROM 1.15.1)
===================================
Appium 1.16.0 is a minor release
#### General
* Fix handling of unexpected shutdown (https://github.com/appium/appium-base-driver/pull/370) (https://github.com/appium/appium/pull/13635) (https://github.com/appium/appium/pull/13662)
* Beta support for Flutter (https://github.com/appium/appium/pull/12945)
* Add log a custom event and get events (https://github.com/appium/appium-base-driver/pull/364, https://github.com/appium/appium-base-driver/pull/365)
* Improve memory usage
#### IOS General
* Fix creation of simulators on Xcode patch versions (https://github.com/appium/node-simctl/pull/89)
* Support setting geolocation on simulators using [Lyft's set-simulator-location CLI](https://github.com/lyft/set-simulator-location) (https://github.com/appium/appium-ios-simulator/pull/249)
#### IOS (XCUITest):
* Add support for shadow DOM elements (https://github.com/appium/appium-remote-debugger/commit/559395a16088142b27289dbac6d3a5ab36caa716)
* fix problem in webview asynchronous execute on older versions of iOS, when low timeouts would cause the return value to never be returned (https://github.com/appium/appium-remote-debugger/pull/185)
* Allow execution of WDA without app under test (https://github.com/appium/appium-xcuitest-driver/pull/1093)
* Add `mobile: deleteFile` command for removing files/folders from the device (https://github.com/appium/appium-xcuitest-driver/pull/1095)
* Fall back to `ios-deploy` if native install fails (https://github.com/appium/appium-xcuitest-driver/pull/1098)
* Make sure ports are properly closed when cleaning up (https://github.com/appium/appium-xcuitest-driver/pull/1094)
* Handle socket errors on session start (https://github.com/appium/appium-xcuitest-driver/pull/1101)
* Properly handle creating simulators with patch versions (https://github.com/appium/node-simctl/pull/89)
* Fix handling of Safari console log (https://github.com/appium/appium-remote-debugger/pull/176)
* Add ability to interact with Shadow DOM in Safari (https://github.com/appium/appium-remote-debugger/commit/559395a16088142b27289dbac6d3a5ab36caa716)
* New capabilities
* `safariLogAllCommunication` - log all plists passed to and received from the Web Inspector (https://github.com/appium/appium-xcuitest-driver/pull/1105)
* `safariLogAllCommunicationHexDump` - log the raw data passed to and received from the Web Inspector (https://github.com/appium/appium-xcuitest-driver/pull/1105)
* `safariSocketChunkSize` - change the size of the data passed to the Web Inspector on real devices (https://github.com/appium/appium-xcuitest-driver/pull/1105)
* `additionalWebviewBundleIds` - accept an array of bundle identifiers to poll for during webview app selection (https://github.com/appium/appium-xcuitest-driver/pull/1117)
* `appPushTimeout` - timeout for application upload in millisecond, on real devices (https://github.com/appium/appium-xcuitest-driver/pull/1104)
#### Android General
* Add `mobile: sensorSet` to gain access to setting device sensor data (https://github.com/appium/appium-android-driver/pull/555)
* Speed up manifest parsing (https://github.com/appium/appium-adb/pull/471)
* Fix process identification on older Android versions (https://github.com/appium/appium-adb/pull/472)
* Fix batch permission setting (https://github.com/appium/appium-adb/pull/477)
* Allow `appWaitDuration` to be set as low as `0` (https://github.com/appium/appium-adb/pull/479)
#### Android (UiAutomator2)
* Add get clipboard for Android 10+ (https://github.com/appium/appium-uiautomator2-driver/pull/348)
* Fix prefer IPv4 address to the host name (https://github.com/appium/appium-uiautomator2-driver/pull/343)
* Fix Turn write access verification on Windows environment (https://github.com/appium/appium-uiautomator2-driver/pull/340)
* Add bluetooth state as deviceInfo (https://github.com/appium/appium-uiautomator2-server/pull/312)
* Allow session creation without starting an application (https://github.com/appium/appium-uiautomator2-driver/pull/337)
#### Android (Espresso)
* Allow configuring Gradle, AGP, various SDK and Kotlin versions for Espresso server (https://github.com/appium/appium-espresso-driver/pull/496)
* Many thanks to @tinder-ktarasov
* Add get clipboard for Android 10+ (https://github.com/appium/appium-espresso-driver/pull/512)
#### Windows
* Support WinAppDriver 1.2 release candidate (https://github.com/appium/appium-windows-driver/pull/60)
* Important capabilities: `ms:waitForAppLaunch`, `ms:experimental-webdriver`
* Add a possibility to customize application startup timeout (https://github.com/appium/appium-windows-driver/pull/59)
* `createSessionTimeout` (https://github.com/appium/appium-windows-driver#windowsdriver-specific-capabilities)
CHANGES IN VERSION 1.15.1 (FROM 1.15.0)
===================================
Appium 1.15.1 is a patch release that addresses incompatibilities with Node < 10.10
#### General
* Fix: support older nodejs version by just using stat [#130](https://github.com/appium/appium-support/commit/12396d7db50206e70d7f8f633d7e9a5a6f14553a)
CHANGES IN VERSION 1.15.0 (FROM 1.14.1)
===================================
Appium 1.15.0 is a minor release, with support for iOS 13.0.
#### General
* Add `--base-path` server argument to set a custom route prefix [#13079](https://github.com/appium/appium/pull/13079)
* Store the image element for retrieval [#327](https://github.com/appium/appium-base-driver/pull/327)
* Fix handling of W3C/MJSONWP protocols [#331](https://github.com/appium/appium-base-driver/pull/331)
[#336](https://github.com/appium/appium-base-driver/pull/336) [#337](https://github.com/appium/appium-base-driver/pull/337)
[#348](https://github.com/appium/appium-base-driver/pull/348) [#351](https://github.com/appium/appium-base-driver/pull/351)
[#353](https://github.com/appium/appium-base-driver/pull/353) [#355](https://github.com/appium/appium-base-driver/pull/355)
* Fix handling of timezone when getting the device data/time [#392](https://github.com/appium/appium-ios-driver/pull/392) [#557](https://github.com/appium/appium-android-driver/pull/557)
* Fix handling of globally installed `opencv4nodejs` and `mjpeg-consumer` modules [#105](https://github.com/appium/appium-support/pull/105)
* Make it possible to start server without an app or a package id using UiAutomator2 and XCUITest [#337](https://github.com/appium/appium-uiautomator2-driver/pull/337) [#195](https://github.com/appium/WebDriverAgent/pull/195)
* Internally, WebDriverAgent, UiAutomator2 and Espresso servers operate only through W3C spec protocol
#### IOS (XCUITest):
* Support iOS 13/Xcode 11
* Bump generic `"iphone simulator"` device name for iOS 13.0 from `iPhone 8` to `iPhone X` [#1068](https://github.com/appium/appium-xcuitest-driver/pull/1068)
* Add support for `otherApps` capability on iOS like we have on Android [#988](https://github.com/appium/appium-xcuitest-driver/pull/988)
* Add `"mobile: activeAppInfo"` feature [#1025](https://github.com/appium/appium-xcuitest-driver/pull/1025)
* Settings
* `mjpegScalingFactor` [#983](https://github.com/appium/appium-xcuitest-driver/pull/983)
* `snapshotTimeout` [#181](https://github.com/appium/WebDriverAgent/pull/181)
* `useFirstMatch` [#187](https://github.com/appium/WebDriverAgent/pull/187)
* `defaultActiveApplication` [#209](https://github.com/appium/WebDriverAgent/pull/209)
* `activeAppDetectionPoint` [#215](https://github.com/appium/WebDriverAgent/pull/215) [#218](https://github.com/appium/WebDriverAgent/pull/218)
* `includeNonModalElements` [#222](https://github.com/appium/WebDriverAgent/pull/222)
* New capabilities
* `includeSafariInWebviews` [#1060](https://github.com/appium/appium-xcuitest-driver/pull/1060)
* `safariGlobalPreferences` [#1057](https://github.com/appium/appium-xcuitest-driver/pull/1057)
* Remove some third-party dependencies
* `idevicedate` [#1042](https://github.com/appium/appium-xcuitest-driver/pull/1042)
* `iproxy` [#996](https://github.com/appium/appium-xcuitest-driver/pull/996)
* `idevicesyslog` [#1000](https://github.com/appium/appium-xcuitest-driver/pull/1000)
* `idevicelocation` [#1006](https://github.com/appium/appium-xcuitest-driver/pull/1006)
* `ifuse` [#1019](https://github.com/appium/appium-xcuitest-driver/pull/1019)
* `ios-webkit-debug-proxy` [#1023](https://github.com/appium/appium-xcuitest-driver/pull/1023)
* `ios-deploy` [#1009](https://github.com/appium/appium-xcuitest-driver/pull/1009)
* Get only user apps in file-movement for performance aspect [#1014](https://github.com/appium/appium-xcuitest-driver/pull/1014)
* Switch `reduceMotion` via settings API instead of update simulator pref [#1065](https://github.com/appium/appium-xcuitest-driver/pull/1065)
* Add the necessary primitives to be able to automate split-screen apps [#209](https://github.com/appium/webdriveragent/pull/209)
* Add a new endpoint for element rotation [#213](https://github.com/appium/webdriveragent/pull/213)
* Add useful information in `"mobile: deviceInfo"` [#210](https://github.com/appium/webdriveragent/pull/210)
* Add ability to automate split screen applications [#214](https://github.com/appium/webdriveragent/pull/214) [#215](https://github.com/appium/webdriveragent/pull/215) [#204](https://github.com/appium/WebDriverAgent/pull/204)
* Allow setting compression quality and scaling factor for `mjpeg-stream` [#196](https://github.com/appium/WebDriverAgent/pull/196)
* Fix `GET` `/timeouts` [#1067](https://github.com/appium/appium-xcuitest-driver/pull/1067)
* Switch `async execute` to not need CORS (works for real and simulated devices) [#1063](https://github.com/appium/appium-xcuitest-driver/pull/1063)
* Fix uninstalling of `WDA` with '.xctrunner' suffix for real device [#1052](https://github.com/appium/appium-xcuitest-driver/pull/1052)
* Fix caching issues [#1053](https://github.com/appium/appium-xcuitest-driver/pull/1053)
* Fix `mjpegstream` logic for returning screenshots [#1039](https://github.com/appium/appium-xcuitest-driver/pull/1039)
* Fix Node bug when ending session [#1040](https://github.com/appium/appium-xcuitest-driver/pull/1040)
* Fix launching `WDA` multiple times [#999](https://github.com/appium/appium-xcuitest-driver/pull/999)
* Fix "get active element" [#1011](https://github.com/appium/appium-xcuitest-driver/pull/1011)
* Fix screenshot taking for iOS below 11 [#193](https://github.com/appium/WebDriverAgent/pull/193)
* Fix to not throw exception if the app is not in foreground after a timeout [#211](https://github.com/appium/WebDriverAgent/pull/211)
* Fix `tap` and `tapByCoordinate` to use their native implementations since iOS 13.0 [#212](https://github.com/appium/WebDriverAgent/pull/212) [#217](https://github.com/appium/WebDriverAgent/pull/217)
* Fix calculation of touch coordinates in landscape orientation for iOS 13.1 [#220](https://github.com/appium/WebDriverAgent/pull/220)
#### Android General
* Default Chromedriver version is `77.0.3865.40` [#143](https://github.com/appium/appium-chromedriver/pull/143)
* Add server feature to enable automated Chromedriver downloads [#548](https://github.com/appium/appium-android-driver/pull/548)
* New capabilities
* `waitForLaunch` [#556](https://github.com/appium/appium-android-driver/pull/556) [#327](https://github.com/appium/appium-uiautomator2-driver/pull/327)
* `ensureWebviewsHavePages` [#553](https://github.com/appium/appium-android-driver/pull/553)
* `enforceAppInstall` [#573](https://github.com/appium/appium-android-driver/pull/573)
* Fix partial platform version matching [#567](https://github.com/appium/appium-android-driver/pull/567)
#### Android (UiAutomator2)
* New capabilities
* `gpsEnabled` [#320](https://github.com/appium/appium-uiautomator2-driver/pull/320)
* New settings
* `wakeLockTimeout` [#298](https://github.com/appium/appium-uiautomator2-server/pull/298)
* Fix server package install by enabling replace option [#336](https://github.com/appium/appium-uiautomator2-driver/pull/336)
* Fix server package install by copying apks to temporary writeable location if they cannot be written where they are [#338](https://github.com/appium/appium-uiautomator2-driver/pull/338)
#### Android (Espresso)
* Add timezone and locale in `deviceinfo` [#465](https://github.com/appium/appium-espresso-driver/pull/465)
* Fix `sendKey` to allow multi byte strings [#474](https://github.com/appium/appium-espresso-driver/pull/474)
* Fix clipboard get/set `contentType` [#478](https://github.com/appium/appium-espresso-driver/pull/478)
* Fix current context when creating session [#483](https://github.com/appium/appium-espresso-driver/pull/483)
* Fix set value immediately, replace value [#484](https://github.com/appium/appium-espresso-driver/pull/484)
* Fix printing of the original stack trace rather than the wrapped one [#488](https://github.com/appium/appium-espresso-driver/pull/488)
* Fix raise an error for launch app, close app, and reset since they do not apply to Espresso [#485](https://github.com/appium/appium-espresso-driver/pull/485) [#491](https://github.com/appium/appium-espresso-driver/pull/491)
* Fix `createSession` to fulfill W3C spec [#490](https://github.com/appium/appium-espresso-driver/pull/490)
* Fix raise an error for reset as they do not apply to Espresso [#491](https://github.com/appium/appium-espresso-driver/pull/491)
CHANGES IN VERSION 1.14.1 (FROM 1.14.0)
===================================
Appium 1.14.1 is a patch release. You.I Engine Driver is the only affected driver.
#### YouI Engine Driver
* Added support for YIKeyEvents (all supported key events) via Execute Mobile Command when using `mobile:PressButton`
* Added new default port for You.i Engine socket server on PS4 and ability to make it configurable.
CHANGES IN VERSION 1.14.0 (FROM 1.13.0)
===================================
Appium 1.14.0 is a minor release.
#### General
* **IMPORTANT**: The default driver for Android is now set to [UiAutomator2](https://github.com/appium/appium-uiautomator2-driver) instead of [UiAutomator1](https://github.com/appium/appium-android-driver). If the [UiAutomator1](https://github.com/appium/appium-android-driver) driver is still desired, then this can be achieved by setting `automationName=UiAutomator1` in the capabilities
* **IMPORTANT**: Minimum Node version is bumped up to v10
* `--allow-insecure` and `--deny-insecure` server flags are added to deprecate `--relaxed-security` in the future releases [#12778](https://github.com/appium/appium/pull/12778). Please check the [documentation](https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/security.md) for further information
* Drop `--enable-heapdump` for debugging [#12609](https://github.com/appium/appium/pull/12609)
* Fix `--tmp` server arg [#12585](https://github.com/appium/appium/pull/12585)
* Can get selected image by `find element by image` for debugging [#327](https://github.com/appium/appium-base-driver/pull/327)
#### Android (Espresso)
* Fix problems with activity startup not working when the package name value in `appActivity` is different from the one in `appPackage` [#441](https://github.com/appium/appium-espresso-driver/pull/441)
* Add a mobile helper to disable autofill dialog in Android O [#456](https://github.com/appium/appium-espresso-driver/pull/456)
#### Android (UIAutomator2)
* Remove the extra wait for idle calls to speed up element queries [#279](https://github.com/appium/appium-uiautomator2-server/pull/279)
* Added a new capability `trackScrollEvents` to configurate the tracking of scroll movement. This improves performance of touch actions significantly[#284](https://github.com/appium/appium-uiautomator2-server/pull/284)
#### iOS (XCUITest)
* Make `platformVersion` a required capability for iOS Simulators [#954](https://github.com/appium/appium-xcuitest-driver/pull/954)
* Enforce Simulator shutdown if `resetOnSessionStartOnly` is set to false [#950](https://github.com/appium/appium-xcuitest-driver/pull/950)
* Fixed the issue with [addresses problems with long startup times for Safari WebViews on iOS 12.2](https://github.com/appium/appium/issues/12590)
* `platformVersion` capability is now mandatory for Simulators and optional for real devices (but only if Appium can determine the version from ideviceinfo output)[#954](https://github.com/appium/appium-xcuitest-driver/pull/954)
* Update to call `idb` instead of `fbsimctl` which is used for some commands for simulator environment [#12574](https://github.com/appium/appium/pull/12574)
* Fixed the file translation for real device [#12710](https://github.com/appium/appium/pull/12710)
* Read https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/ios/ios-xctest-file-movement.md about the rule
* Fixed the WDA manual code signing issue which happens in some cases [#961](https://github.com/appium/appium-xcuitest-driver/pull/961)
CHANGES IN VERSION 1.13.0 (FROM 1.12.1)
===================================
Appium 1.13.0 is a minor release
#### General
* Appium 1.13 will be the last minor version to use [UiAutomator1](https://github.com/appium/appium-android-driver) as the default Android automation. As of Appium 1.14, the default Android driver will be [UiAutomator2](https://github.com/appium/appium-uiautomator2-driver). If you don't set the `automationName` for an Android session a big [warning](https://github.com/appium/appium/pull/12481) will be displayed notifying you of the change. This will be a breaking change, and it's recommended if you wish to keep the same behavior, add the capability `automationName=UiAutomator1` to your scripts
* Appium 1.13 will be the last minor version to support Node v8. As of Appium 1.14 the supported Node versions will be v10 and v12.
* Added capability `defaultImageTemplateScale` to allow arranging of image comparison logic [#307](https://github.com/appium/appium-base-driver/pull/307)
* Fixes:
* Treat W3C /property and /attribute as aliases in a web context [#311](https://github.com/appium/appium-base-driver/pull/311)
#### Android
* New capabilities:
* `remoteAppsCacheLimit`: sets the limit for how many APKs will be cached on a device [#523](https://github.com/appium/appium-android-driver/pull/523)
* `chromedriverPorts`: allows specifying multiple ports or a range of Chromedriver ports to use for web tests [#529](https://github.com/appium/appium-android-driver/pull/529)
* `buildToolsVersion`: allows you to set the Android `build-tools` version to be something different than the default, which is to use the most recent version [#532](https://github.com/appium/appium-android-driver/pull/532)
* Fixes:
* Emulators have a bug where they sometimes go offline when root/unroot is called. Only affects unrooted emulators. Workaround is to check if a device went offline after root/unroot was called and then restarting the ADB server if it did [#443](https://github.com/appium/appium-adb/pull/443)
* Calls to `mobile:` endpoints weren't being called in web context. Default now is that, in a web context, the native mobile endpoint is always called [#527](https://github.com/appium/appium-android-driver/pull/527)
* `network_connection` endpoint was also not usable from web context [#531](https://github.com/appium/appium-android-driver/pull/531)
* `pushFile` was not working on some later Android SDK's due to permission errors [#439](https://github.com/appium/appium-adb/pull/439)
* Default values in caps not being set correctly [#436](https://github.com/appium/appium-adb/pull/436)
* No longer uninstalls apps when session is terminated if `dontStopAppOnReset` is set [#530](https://github.com/appium/appium-android-driver/pull/530)
* Allow touch actions in a web context. Only works for absolute coordinates. JSONWP only, not related to W3C Actions implementation [#534](https://github.com/appium/appium-android-driver/pull/534/files)
* Update Chromedriver to 73.0.0 [#318](https://github.com/appium/appium-base-driver/pull/318)
#### Android (UiAutomator2)
* Use UiAutomator's screenshot method when default screenshoter fails [#264](https://github.com/appium/appium-uiautomator2-server/pull/264)
* Add detailed network information to the device information endpoint (appium/device/info) [#265](https://github.com/appium/appium-uiautomator2-server/pull/265). Addresses [Issue #12502](https://github.com/appium/appium/issues/12502)
#### Android (Espresso)
* Fixes:
* Changed incorrect naming of Espresso argument `installTimeout` to the correct `androidInstallTimeout` [#426](https://github.com/appium/appium-espresso-driver/pull/426/files)
* Use ADB instead of Espresso to verify activities for better reliability [#425](https://github.com/appium/appium-espresso-driver/pull/425/files)
#### iOS
* Support webview testing for real devices running iOS 12.2+ (1.12.1 already added support for iOS Simulators) [#122](https://github.com/appium/appium-remote-debugger/pull/122). Make sure your ios-webkit-debug-proxy is [up-to-date](https://github.com/google/ios-webkit-debug-proxy/releases/latest) for real devices.
* Supports tvOS [#151](https://github.com/appium/WebDriverAgent/pull/151).
* See [documentation](https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/ios/ios-tvos.md) for details.
* Be sure to update Carthage to the [latest](https://github.com/Carthage/Carthage/releases) to handle TVOs dependencies
* Fixes:
* Improve performance of video recording by using superior startup detection tools [#12486](https://github.com/appium/appium/issues/12486)
* Not able to change video recording parameters in IOS [#12463](https://github.com/appium/appium/issues/12463)
* Change behavior of capability `showXcodeLog` so that when it is explicitly set to false, don't print any Xcode logs, even error logs [#12466](https://github.com/appium/appium/issues/12466)
CHANGES IN VERSION 1.12.1 (FROM 1.12.0)
===================================
* Appium 1.12.1 is a patch release that addresses iOS Simulator 12.2 WebView issues
* `platformVersion` becomes a required capability
#### iOS
* `platformVersion` is necessary for real devices
* Updated Appium Remote Debugger so that Safari webview tests are compatible with Xcode 10.2 (addresses [issue #12239](https://github.com/appium/appium/issues/12239)) [#118](https://github.com/appium/appium-remote-debugger/pull/118)
* Fix `screenshotQuality` cap not being forwarded to WebDriverAgent [#907](https://github.com/appium/appium-xcuitest-driver/pull/907)
* Fix xctestrun file detection when `useXctestrunFile` is true [#903](https://github.com/appium/appium-xcuitest-driver/pull/903)
* Fix problem with Appium not using cached WebDriverAgent [#909](https://github.com/appium/appium-xcuitest-driver/pull/909)
CHANGES IN VERSION 1.12.0 (FROM 1.11.1)
===================================
Appium 1.12.0 is a minor release
#### General
* Fix wrong coordination in _find element by_ . [#306](https://github.com/appium/appium-base-driver/pull/306), [#307](https://github.com/appium/appium-base-driver/pull/307)
* Added `fixImageTemplateScale` to arrange image comparison logic. Read [doc](docs/en/advanced-concepts/image-elements.md) for more details
#### Android
* Add `mobile:` endpoint for enabling/disabling/viewing app permissions [#305](https://github.com/appium/appium-uiautomator2-driver/pull/305)
* Fix exception caused when Appium Settings fails to provide geolocation [#493](https://github.com/appium/appium-android-driver/pull/493)
* Stop chromedriver proxies when reset command is called [#495](https://github.com/appium/appium-android-driver/pull/495)
* Fix pin unlock errors. Turn screen off before doing pin unlock to ensure pin unlock screen has no existing entries. [#498](https://github.com/appium/appium-android-driver/pull/498)
* Add `uninstallOtherPackages` capability [#289](https://github.com/appium/appium-uiautomator2-driver/pull/289)
* Fix pattern unlock problems caused by not using relative touches [#489](https://github.com/appium/appium-android-driver/pull/489)
* Add `chromedriverArgs` capability that passes chromedriver flags into sessions [#519](https://github.com/appium/appium-android-driver/pull/519/files)
* Add `skipLogcatCapture` capability that skip capturing logcat, for possible performance enhancement.
#### Android (UiAutomator2 only)
* Verify file system permissions before signing files to avoid confusing signing errors [#294](https://github.com/appium/appium-uiautomator2-driver/pull/294)
#### Android (Espresso only)
* Add `dataMatcher` selector strategy [#386](https://github.com/appium/appium-espresso-driver/pull/386)
* `mobile:` commands
* Call UiAutomator commands from Espresso [#371](https://github.com/appium/appium-espresso-driver/pull/371)
* `swipe` and `clickAction` delegates to Espresso's `GeneralSwipeAction` and `GeneralClickAction` [#372](https://github.com/appium/appium-espresso-driver/pull/372)
* `webAtom` which delgates to Espresso's `Web Atoms` library [#380](https://github.com/appium/appium-espresso-driver/pull/380)
* Fix orientation change event to not require element [#383](https://github.com/appium/appium-espresso-driver/pull/383)
* Add `remoteAdbHost` capability to allow tests on remote machines [#381](https://github.com/appium/appium-espresso-driver/pull/381)
#### iOS
* Add `eventLoopIdleDelaySec` capability. Delays the invocation of `-[XCUIApplicationProcess setEventLoopHasIdled:]` by the number of seconds specified with this capability. This can help quiescence apps that fail to do so for no obvious reason (and creating a session fails for that reason) [#881](https://github.com/appium/appium-xcuitest-driver/pull/881)
* Add `-r` flag for video recording to make screen video recording more flexible [#867](https://github.com/appium/appium-xcuitest-driver/pull/867)`
* Add `enforceFreshSimulatorCreation` capability [#859](https://github.com/appium/appium-xcuitest-driver/pull/859)
* More helpful logging
* Add `mjpegScalingFactor` settings that change image scale of mjpeg server to stream screen [#138](https://github.com/appium/WebDriverAgent/pull/138)
* Returns a couple of lines of xcodebuild error message if WDA xcodebuild fails. It helps to understand the cause. [#888](https://github.com/appium/appium-xcuitest-driver/pull/888)
CHANGES IN VERSION 1.11.1 (from 1.11.0)
===================================
@@ -894,7 +19,7 @@ CHANGES IN VERSION 1.11.0 (from 1.10.0)
Appium 1.11.0 is a minor release
#### iOS
* Fix issues with MJPEG video streaming [#134](https://github.com/appium/WebDriverAgent/pull/134)
* Fix issues with MJPEG video streaming [#134](https://github.com/appium/WebDriverAgent/pull/134)
* Xcode 10.2 device list support [appium/node-simctl#77](https://github.com/appium/node-simctl/pull/77)
#### Android
@@ -932,7 +57,7 @@ Appium 1.11.0 is a minor release
CHANGES IN VERSION 1.10.0 (from 1.9.1)
===================================
Appium 1.10.0 is a minor release.
Appium 1.10.0 is a minor release.
#### General
* Bring Espresso Driver out of beta and into general availability
+17 -20
View File
@@ -1,14 +1,16 @@
## Appium
[![NPM version](https://badge.fury.io/js/appium.svg)](https://npmjs.org/package/appium)
[![Node.js CI](https://github.com/appium/appium/actions/workflows/node.js.yml/badge.svg?branch=2.0)](https://github.com/appium/appium/actions/workflows/node.js.yml)
[![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)
[![Greenkeeper badge](https://badges.greenkeeper.io/appium/appium.svg)](https://greenkeeper.io/)
Appium is an open-source, cross-platform test automation tool for native,
hybrid, and mobile web and desktop apps. We support simulators (iOS), emulators
Appium is an open source, cross-platform test automation tool for native,
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
@@ -25,16 +27,17 @@ specific information about how that driver works and how to set it up:
* 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)
* (BETA) 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)
* (DEPRECATED) The [Selendroid Driver](/docs/en/drivers/android-selendroid.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 don't have to recompile your app or modify it in any way, due
to the use of standard automation APIs on all platforms.
to 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, Objective-C, JavaScript (Node), PHP, Python, Ruby,
@@ -42,22 +45,22 @@ specific information about how that driver works and how to set it up:
client libraries](/docs/en/about-appium/appium-clients.md).
3. You can use any testing framework.
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
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
you are betting on a single, free, and open protocol for testing that has become
you are betting on a single, free and open protocol for testing that has become
a web standard. Don't lock yourself into a proprietary stack.
For example, if you use Apple's XCUITest library without Appium you can only
write tests using Obj-C/Swift, and you can only run tests through Xcode.
Similarly, with Google's UiAutomator or Espresso, you can only write tests in
Java/Kotlin. Appium opens up the possibility of true cross-platform native app
Similarly, with Google's UiAutomator or Espresso you can only write tests in
Java. 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
If you're new to Appium, or want a fuller description of what this is all
about, please read our [Introduction to Appium
Concepts](/docs/en/about-appium/intro.md).
@@ -66,15 +69,15 @@ Concepts](/docs/en/about-appium/intro.md).
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
Node.js 10+.
Node.js 6+.
### Get Started
Check out our [Getting Started](/docs/en/about-appium/getting-started.md) guide
to get going with Appium.
There is also a sample code that contains [many examples of tests in a variety
of different languages](https://github.com/appium/appium/tree/master/sample-code)!
There is also sample code that contains [many examples of tests in a variety
of different languages](https://github.com/appium/sample-code/tree/master/sample-code)!
### Documentation
@@ -82,16 +85,10 @@ For prettily-rendered docs, please visit [appium.io](http://appium.io). You can
always find the full list of Appium doc pages at [Appium's GitHub
Repo](https://github.com/appium/appium/tree/master/docs/en/) as well.
[update-appium-io.yml](https://github.com/appium/appium/blob/master/ci-jobs/update-appium-io.yml) creates a PR
by [CI job](https://dev.azure.com/AppiumCI/Appium%20CI/_build?definitionId=37).
in the appium.io repository with the documentation update.
Once the PR has been merged, the latest documentation will be in [appium.io](http://appium.io)
### Contributing
Please take a look at our [contribution documentation](CONTRIBUTING.md)
for instructions on how to build, test, and run Appium from the source.
for instructions on how to build, test and run Appium from source.
### Roadmap
-32
View File
@@ -1,32 +0,0 @@
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "12"
},
"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 relauching
* 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 (data) {
console.log('stdout: ' + data);
});
proxy.stderr.on('data', function (data) {
console.log('stderr: ' + data);
const restartMessage = _(RESTART_ON_MESSAGES).find(function (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 (code) {
console.log('child process exited with code ' + code);
});
};
process.on('SIGINT', handleKillProcess);
process.on('SIGTERM', handleKillProcess);
startProxy();
Binary file not shown.
+2 -4
View File
@@ -1,13 +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
];
-40
View File
@@ -1,40 +0,0 @@
# parameters: # No params yet, but may add later
jobs:
- job: generate_docs
pool:
vmImage: "macOS 10.14"
variables:
CC: gcc
CXX: g++
steps:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
- script: |
# do git stuff
npm install
brew install hub
hub --version
git remote add triager https://triager:$GITHUB_TOKEN@github.com/appium/appium
git checkout -b generate-docs-$BUILD_SOURCEVERSION
git status
displayName: Checkout Generate Docs Branch
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
- script: |
# Generate the docs
npm run generate-docs
git add .
# log the status so we know what is going on, on failure
git status -s
# If docs were generated, make a PR to update the docs
if [[ -n $(git status -s) ]]; then
git commit -a -n -m 'Update generated docs [ci skip]'
git push triager generate-docs-$BUILD_SOURCEVERSION
hub pull-request -b "appium:master" -h "appium:generate-docs-$BUILD_SOURCEVERSION" -m "docs: Update auto-generated docs"
fi
displayName: Generate Docs and Make PR
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
-2
View File
@@ -1,2 +0,0 @@
jobs:
- template: templates/bundle-template.yml
-3
View File
@@ -1,3 +0,0 @@
const semver = require('semver');
const { version } = require('../../package.json');
console.log(semver(version).prerelease[0]); //eslint-disable-line no-console
@@ -1,22 +0,0 @@
const path = require('path');
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`) {
packageJson.version = version;
log.info(`Setting version to: ${version}`);
await fs.writeFile(
path.resolve(__dirname, '..', '..', 'package.json'),
JSON.stringify(packageJson, null, 2),
'utf8',
);
}
if (require.main === module) {
asyncify(setPackageJsonVersion);
}
module.exports = setPackageJsonVersion;
-40
View File
@@ -1,40 +0,0 @@
# parameters: # No params yet, but may add later
jobs:
- job: bundle_and_upload_appium_zip
pool:
vmImage: 'macOS 10.14'
variables:
CC: gcc
CXX: g++
steps:
- script: gcc --version
displayName: Print GCC Version
- task: NodeTool@0
inputs:
versionSpec: '12.x'
- script: npm install
displayName: Install NPM Dependencies
- script: npm run build
displayName: npm run build
- script: npm prune --production
displayName: Get rid of dev dependencies
- script: |
curl -o node-darwin.tar.gz https://nodejs.org/dist/v12.16.1/node-v12.16.1-darwin-x64.tar.gz
mkdir node-darwin-unpacked
tar -xzf node-darwin.tar.gz -C node-darwin-unpacked/ --strip-components 1
rm -f node-darwin.tar.gz
cp node-darwin-unpacked/bin/node node-darwin
rm -rf node-darwin-unpacked
displayName: Download NodeJS
- script: npm run zip
displayName: Create the bundle zip
- script: npm install
displayName: Reinstall dev dependencies
- task: PublishPipelineArtifact@0
inputs:
targetPath: appium.zip
artifactName: appium
- script: npm run upload
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
displayName: Upload to appium/appium-build-store Github Releases
-31
View File
@@ -1,31 +0,0 @@
# parameters: # No params yet, but may add later
jobs:
- job: update_appium_io
pool:
vmImage: 'Ubuntu-18.04'
variables:
CC: gcc
CXX: g++
steps:
- task: NodeTool@0
inputs:
versionSpec: '10.x'
- script: |
pip install mkdocs==0.16.3
git config --global user.email "maintainers@appium.io"
git config --global user.name "Appium Triager"
git clone https://triager:$GITHUB_TOKEN@github.com/appium/appium.io.git --branch=gh-pages
pushd appium.io
git remote add triager https://triager:$GITHUB_TOKEN@github.com/appium/appium.io
git checkout -b docs-$BUILD_SOURCEVERSION
bundle install
npm install
npm run build:docs
git add docs
git commit -a -n -m "docs: Update documentation for latest version"
git push triager docs-$BUILD_SOURCEVERSION
hub pull-request -b "appium:gh-pages" -h "appium:docs-$BUILD_SOURCEVERSION" -m "docs: Update documentation for latest version"
popd
displayName: Make branch with Updated Docs and make PR
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
@@ -26,23 +26,27 @@ example_usage:
let context = await driver.currentContext();
javascript_wdio:
|
let context = driver.getContext();
let context = driver.context();
ruby:
|
context = current_context
ruby_core:
context = @driver.current_context
php:
|
$context = $driver->context();
csharp:
|
string Context = driver.Context;
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/README.md#switching-between-native-and-webview"
javascript_wdio: "http://webdriver.io/api/mobile/context.html"
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
@@ -62,6 +66,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -69,7 +74,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/context
url: /wd/hub/session/:session_id/context
method: 'GET'
url_parameters:
- name: session_id
@@ -8,9 +8,10 @@ description:
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.
On iOS, using the XCUITest driver, one can use the `mobile: getContexts`
[mobile command](/docs/en/commands/mobile-command.md) as an alternative to
the standard method in order to get the title and url associated with each
context as additional metadata.
For information on contexts, see Appium's [hybrid automation docs](/docs/en/writing-running-appium/web/hybrid.md).
@@ -26,28 +27,28 @@ example_usage:
let contexts = await driver.contexts();
javascript_wdio:
|
let contexts = driver.getContexts();
let contexts = driver.contexts();
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);
}
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/README.md#switching-between-native-and-webview"
javascript_wdio: "http://webdriver.io/api/mobile/contexts.html"
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
@@ -67,6 +68,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -74,7 +76,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/contexts
url: /wd/hub/session/:session_id/contexts
method: 'GET'
url_parameters:
- name: session_id
@@ -34,10 +34,10 @@ example_usage:
await driver.context('NATIVE_APP');
javascript_wdio:
|
let contexts = driver.getContexts();
driver.switchContext(contexts[1]);
let contexts = driver.contexts();
driver.context(contexts[1]);
// ...
driver.switchContext('NATIVE_APP');
driver.context('NATIVE_APP');
ruby:
|
webview = available_contexts[1]
@@ -50,25 +50,24 @@ example_usage:
@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");
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/README.md#switching-between-native-and-webview"
javascript_wdio: "http://webdriver.io/api/mobile/context.html"
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
@@ -88,6 +87,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -95,7 +95,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/context
url: /wd/hub/session/:session_id/context
method: 'POST'
url_parameters:
- name: session_id
@@ -14,25 +14,29 @@ example_usage:
let activity = await driver.getCurrentActivity();
javascript_wdio:
|
let activity = driver.getCurrentActivity();
let activity = driver.currentActivity();
ruby:
|
current_activity
ruby_core:
|
@driver.current_activity
php:
|
$activity = $driver->currentActivity();
csharp:
|
string activity = driver.CurrentActivity;
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L447"
javascript_wdio: "http://webdriver.io/api/mobile/currentActivity.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
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:
@@ -51,6 +55,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -58,7 +63,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/current_activity
url: /wd/hub/session/:session_id/appium/device/current_activity
method: GET
url_parameters:
- name: session_id
@@ -12,27 +12,27 @@ example_usage:
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;
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L453"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
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:
@@ -51,6 +51,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: false
@@ -58,7 +59,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/current_package
url: /wd/hub/session/:session_id/appium/device/current_package
method: GET
url_parameters:
- name: session_id
@@ -24,18 +24,23 @@ example_usage:
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");
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L591"
javascript_wdio: "http://webdriver.io/api/mobile/startActivity.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
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:
@@ -54,6 +59,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -61,7 +67,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/start_activity
url: /wd/hub/session/:session_id/appium/device/start_activity
method: POST
url_parameters:
- name: session_id
@@ -20,8 +20,7 @@ example_usage:
// Supports only `mobile: queryAppState` for iOS, XCUITest
javascript_wdio:
|
driver.activateApp(null, 'com.apple.Preferences')
driver.activateApp('io.appium.android.apis')
// Supports only `mobile: queryAppState` for iOS, XCUITest
ruby:
|
activate_app('com.apple.Preferences')
@@ -30,18 +29,21 @@ example_usage:
|
@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');
// Supports only `mobile: queryAppState` for iOS, XCUITest
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/extensions/applications.py"
javascript_wdio: "https://webdriver.io/docs/api/appium.html" # TODO wdio documentation link
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
@@ -61,6 +63,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -68,7 +71,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/activate_app
url: /wd/hub/session/:session_id/appium/device/activate_app
method: POST
url_parameters:
- name: session_id
@@ -20,8 +20,7 @@ example_usage:
// Supports only `mobile: queryAppState` for iOS, XCUITest
javascript_wdio:
|
driver.queryAppState(null, 'com.apple.Preferences')
driver.queryAppState('io.appium.android.apis')
// Supports only `mobile: queryAppState` for iOS, XCUITest
ruby:
|
app_state('com.apple.Preferences')
@@ -30,17 +29,21 @@ example_usage:
|
@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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/extensions/applications.py"
javascript_wdio: "https://webdriver.io/docs/api/appium.html" # TODO wdio documentation link
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
@@ -60,6 +63,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -67,8 +71,8 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/app_state
method: POST
url: /wd/hub/session/:session_id/appium/device/app_state
method: GET
url_parameters:
- name: session_id
description: ID of the session to route the command to
@@ -9,7 +9,7 @@ description:
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
1. An object that looks like `{"timeout": secs}`, where `secs` is an
integer designating how long, in seconds, to background the app for. -1
means to deactivate the app entirely.
@@ -42,17 +42,21 @@ example_usage:
ruby_core:
|
@driver.background_app(10)
php:
|
$driver->backgroundApp(10);
csharp:
|
driver.BackgroundApp(10)
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L529"
javascript_wdio: "http://webdriver.io/api/mobile/background.html"
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
@@ -72,6 +76,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -13,25 +13,29 @@ example_usage:
await driver.closeApp();
javascript_wdio:
|
driver.closeApp();
driver.close_app();
ruby:
|
close_app
ruby_core:
|
@driver.close_app
php:
|
$driver->closeApp();
csharp:
|
driver.CloseApp();
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L584"
javascript_wdio: "http://webdriver.io/api/mobile/closeApp.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -39,7 +43,7 @@ driver_support:
xcuitest: true
uiautomation: true
android:
espresso: false
espresso: true
uiautomator2: true
uiautomator: true
mac:
@@ -50,6 +54,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -11,27 +11,27 @@ example_usage:
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");
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L627"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
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:
@@ -50,6 +50,7 @@ client_support:
java: true
python: true
ruby: false
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -13,25 +13,29 @@ example_usage:
let appStrings = await driver.getAppStrings();
javascript_wdio:
|
let appStrings = driver.getStrings("en");
let appStrings = driver.getAppStrings("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");
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L357"
javascript_wdio: "http://webdriver.io/api/mobile/getAppStrings.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -50,6 +54,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -25,18 +25,22 @@ example_usage:
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")
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L554"
javascript_wdio: "http://webdriver.io/api/mobile/installApp.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -55,6 +59,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -62,7 +67,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/install_app
url: /wd/hub/session/:session_id/appium/device/install_app
method: POST
url_parameters:
- name: session_id
@@ -25,18 +25,22 @@ example_usage:
ruby_core:
|
@driver.app_installed?('com.example.AppName')
php:
|
$driver->isAppInstalled('com.example.AppName')
csharp:
|
driver.IsAppInstalled("com.example.AppName");
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L542"
javascript_wdio: "http://webdriver.io/api/mobile/isAppInstalled.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -55,6 +59,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -62,7 +67,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/app_installed
url: /wd/hub/session/:session_id/appium/device/app_installed
method: POST
url_parameters:
- name: session_id
@@ -4,8 +4,8 @@ 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.
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).
@@ -21,25 +21,29 @@ example_usage:
await driver.launchApp();
javascript_wdio:
|
driver.launchApp();
driver.launch();
ruby:
|
launch_app
ruby_core:
|
@driver.launch_app
php:
|
$driver->launchApp();
csharp:
|
driver.LaunchApp();
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L578"
javascript_wdio: "http://webdriver.io/api/mobile/launch.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -47,7 +51,7 @@ driver_support:
xcuitest: true
uiautomation: true
android:
espresso: false
espresso: true
uiautomator2: true
uiautomator: true
mac:
@@ -58,6 +62,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -26,18 +26,22 @@ example_usage:
ruby_core:
|
@driver.remove_app('com.example.AppName')
php:
|
$driver->removeApp('com.example.AppName');
csharp:
|
driver.RemoveApp("com.example.AppName");
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L566"
javascript_wdio: "http://webdriver.io/api/mobile/removeApp.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -56,6 +60,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -63,7 +68,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/remove_app
url: /wd/hub/session/:session_id/appium/device/remove_app
method: POST
url_parameters:
- name: session_id
@@ -20,18 +20,22 @@ example_usage:
ruby_core:
|
@driver.reset
php:
|
$driver->reset();
csharp:
|
driver.ResetApp();
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L372"
javascript_wdio: "http://webdriver.io/api/mobile/reset.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -39,7 +43,7 @@ driver_support:
xcuitest: true
uiautomation: true
android:
espresso: false
espresso: true
uiautomator2: true
uiautomator: true
mac:
@@ -50,6 +54,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -20,8 +20,7 @@ example_usage:
// Supports only `mobile: queryAppState` for iOS, XCUITest
javascript_wdio:
|
driver.terminateApp(null, 'com.apple.Preferences')
driver.terminateApp('io.appium.android.apis')
// Supports only `mobile: queryAppState` for iOS, XCUITest
ruby:
|
terminate_app('com.apple.Preferences')
@@ -30,17 +29,21 @@ example_usage:
|
@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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/extensions/applications.py"
javascript_wdio: "https://webdriver.io/docs/api/appium.html" # TODO wdio documentation link
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
@@ -60,6 +63,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -67,7 +71,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/terminate_app
url: /wd/hub/session/:session_id/appium/device/terminate_app
method: POST
url_parameters:
- name: session_id
@@ -76,7 +80,7 @@ endpoint:
- name: bundleId or appId
type: string
description: BundleId for iOS. Package name for Android.
- name: options.timeout
- name: timeout
type: number
description: (Only Android) Timeout to retry terminate the app.
@@ -21,24 +21,28 @@ example_usage:
await driver.fingerprint(1);
javascript_wdio:
|
await driver.fingerPrint(1);
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"
python: "https://github.com/appium/python-client/blob/07180f7547ffcd13c212de21d027ea0355f9ab96/appium/webdriver/webdriver.py#L1390"
javascript_wdio: "https://github.com/appium/appium-android-driver/blob/d16c7161d92ab6f6c9cec3f22218219ac3659716/lib/commands/actions.js#L260"
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
@@ -58,6 +62,7 @@ client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -5,16 +5,6 @@ description:
>
Get the content of the system clipboard
(For iOS 13+ 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.
Activate App command cannot launch the WebDriverAgent properly on some environments. It depends on XCTest framework by Apple. Then, you should launch the WebDriverAgent using its Springboard's application icon. Follow the example below.
1. Open Springboard, `@driver.activate_app 'com.apple.springboard'`.
2. Find the WDA icon with `@driver.find_element :accessibility_id, 'WebDriverAgentRunner-Runner'` (It should be visible on the screen) and click it.
3. Call the get clipboard API.
4. Open the application under test with the [Activate App](/docs/en/commands/device/app/activate-app.md).
example_usage:
java:
|
@@ -29,21 +19,24 @@ example_usage:
await driver.getClipboard();
javascript_wdio:
|
driver.getClipboard();
await 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"
python: "https://github.com/appium/python-client"
javascript_wdio: "http://webdriver.io/index.html"
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"
@@ -51,6 +44,7 @@ client_docs:
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
@@ -70,12 +64,13 @@ 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
url: /wd/hub/session/:session_id/appium/device/get_clipboard
method: 'POST'
url_parameters:
- name: session_id
@@ -5,15 +5,6 @@ description:
>
Set the content of the system clipboard
(For iOS 15+ real devices)
Apple security preferences require the WebDriverAgentRunner application to be in [foreground](https://github.com/appium/appium/issues/16526) in order to set the system clipboard content. 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.
Activate App command cannot launch the WebDriverAgent properly on some environments. It depends on XCTest framework by Apple. Then, you should launch the WebDriverAgent using its Springboard's application icon. Follow the example below.
1. Open Springboard, `@driver.activate_app 'com.apple.springboard'`.
2. Find the WDA icon with `@driver.find_element :accessibility_id, 'WebDriverAgentRunner-Runner'` (It should be visible on the screen) and click it.
3. Call the get clipboard API.
4. Open the application under test with the [Activate App](/docs/en/commands/device/app/activate-app.md).
example_usage:
java:
|
@@ -29,21 +20,24 @@ example_usage:
await driver.setClipboard('happy testing', 'plaintext')
javascript_wdio:
|
driver.setClipboard('happy testing', 'plaintext')
await 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"
python: "https://github.com/appium/python-client"
javascript_wdio: "http://webdriver.io/index.html"
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"
@@ -51,6 +45,7 @@ client_docs:
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
@@ -70,12 +65,13 @@ 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
url: /wd/hub/session/:session_id/appium/device/set_clipboard
method: 'POST'
url_parameters:
- name: session_id
@@ -11,12 +11,6 @@ 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
@@ -26,8 +20,6 @@ example_usage:
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"
@@ -46,8 +38,9 @@ driver_support:
windows: false
client_support:
java: true
python: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: false
javascript_wdio: false
@@ -11,12 +11,6 @@ example_usage:
java:
|
driver.setPowerCapacity(100);
python:
|
self.driver.set_power_capacity(50)
javascript_wdio:
|
driver.powerCapacity(50)
ruby:
|
set_power_capacity 50
@@ -26,8 +20,6 @@ example_usage:
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"
@@ -46,8 +38,9 @@ driver_support:
windows: false
client_support:
java: true
python: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: false
javascript_wdio: false
@@ -21,18 +21,22 @@ example_usage:
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");
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L491"
javascript_wdio: "http://webdriver.io/api/mobile/pullFile.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -51,6 +55,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -58,7 +63,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/pull_file
url: /wd/hub/session/:session_id/appium/device/pull_file
method: POST
url_parameters:
- name: session_id
@@ -21,18 +21,22 @@ example_usage:
ruby_core:
|
@driver.pull_folder('/data/local/tmp/file.txt')
php:
|
$folderBase64 = $driver->pullFolder($path);
csharp:
|
byte[] folder = driver.PullFolder("/path/to/device");
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L503"
javascript_wdio: "http://webdriver.io/api/mobile/pullFolder.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -51,6 +55,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -58,7 +63,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/pull_folder
url: /wd/hub/session/:session_id/appium/device/pull_folder
method: POST
url_parameters:
- name: session_id
@@ -5,37 +5,39 @@ short_description: Place a file onto the device in a particular place
example_usage:
java:
|
driver.pushFile("/data/local/tmp/foo.bar", new File("/Users/johndoe/files/foo.bar"));
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'))
self.driver.push_file('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=');
javascript_wd:
|
await driver.pushFileToDevice('/data/local/tmp/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=');
await driver.pushFileToDevice('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=');
javascript_wdio:
|
let data = Buffer.from("Hello World").toString('base64');
let data = new Buffer("Hello World").toString('base64');
driver.pushFile('/data/local/tmp/file.txt', data);
ruby:
|
push_file('/data/local/tmp/foo.bar', File.read('path/to/file.png'))
push_file('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=')
ruby_core:
|
@driver.push_file('/data/local/tmp/foo.bar', File.read('path/to/file.png'))
@driver.push_file('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=')
php:
|
$driver->pushFile('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=');
csharp:
|
driver.PushFile("/data/local/tmp/foo.bar", new FileInfo("/Users/johndoe/files/foo.bar"))
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L515"
javascript_wdio: "http://webdriver.io/api/mobile/pushFile.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -54,6 +56,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -61,7 +64,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/push_file
url: /wd/hub/session/:session_id/appium/device/push_file
method: POST
url_parameters:
- name: session_id
@@ -6,9 +6,6 @@ example_usage:
java:
|
boolean isLocked = driver.isDeviceLocked();
python:
|
self.driver.is_locked()
javascript_wd:
|
let isLocked = await driver.isLocked();
@@ -22,18 +19,21 @@ example_usage:
ruby_core:
|
@driver.device_locked?
php:
|
// TODO PHP sample
csharp:
|
bool isLocked = driver.IsLocked(); // Supported by IOSDriver & AndroidDriver
// TODO C# sample
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_wdio: "http://webdriver.io/api/mobile/isLocked.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
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:
@@ -52,6 +52,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -25,18 +25,22 @@ example_usage:
|
@driver.lock
@driver.lock(5) # lock 5 seconds
php:
|
$driver->lock(5);
csharp:
|
driver.Lock(); // Supported by IOSDriver & AndroidDriver
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L643"
javascript_wdio: "http://webdriver.io/api/mobile/lock.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
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:
@@ -55,6 +59,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -11,16 +11,20 @@ example_usage:
driver.rotateDevice({x: 114, y: 198, duration: 5, radius: 3, rotation: 220, touchCount: 2});
javascript_wdio:
|
driver.rotateDevice(100, 100);
driver.rotate(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 } });
// TODO C# sample
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_wdio: "http://webdriver.io/api/mobile/rotate.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2470"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -39,6 +43,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -46,7 +51,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/rotate
url: /wd/hub/session/:session_id/appium/device/rotate
method: 'POST'
url_parameters:
- name: session_id
@@ -22,18 +22,22 @@ example_usage:
ruby_core:
|
@driver.shake
php:
|
$driver->shake();
csharp:
|
driver.ShakeDevice();
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L655"
javascript_wdio: "http://webdriver.io/api/mobile/shake.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/iOS/IOSDriver.cs"
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:
@@ -52,6 +56,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -25,18 +25,21 @@ example_usage:
ruby_core:
|
@driver.unlock
php:
|
// TODO PHP sample
csharp:
|
driver.Unlock(); // Supported by IOSDriver & AndroidDriver
// TODO C# sample
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_wdio: "http://webdriver.io/api/mobile/unlock.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
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:
@@ -55,6 +58,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -14,25 +14,32 @@ example_usage:
await driver.hideDeviceKeyboard();
javascript_wdio:
|
driver.hideKeyboard();
driver.hideDeviceKeyboard();
ruby:
|
hide_keyboard
ruby_core:
|
@driver.hide_keyboard
php:
|
$driver->hideKeyboard();
$driver->hideKeyboard(array(
'keyName' => 'Done'
));
csharp:
|
driver.HideKeyboard();
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L378"
javascript_wdio: "http://webdriver.io/api/mobile/hideDeviceKeyboard.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -51,6 +58,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -58,7 +66,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/hide_keyboard
url: /wd/hub/session/:session_id/appium/device/hide_keyboard
method: 'POST'
url_parameters:
- name: session_id
@@ -12,9 +12,6 @@ example_usage:
javascript_wd:
|
await driver.isKeyboardShown();
javascript_wdio:
|
driver.isKeyboardShown();
ruby:
|
is_keyboard_shown
@@ -24,9 +21,7 @@ example_usage:
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"
@@ -47,6 +42,7 @@ client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: false
@@ -54,7 +50,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/device/is_keyboard_shown
url: /wd/hub/session/:session_id/appium/device/is_keyboard_shown
method: 'GET'
url_parameters:
- name: session_id
@@ -16,25 +16,29 @@ example_usage:
driver.longPressKeyCode(10);
javascript_wd:
|
await driver.longPressKeycode(10);
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);
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L431"
javascript_wdio: "http://webdriver.io/api/mobile/longPressKeycode.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Windows/WindowsDriver.cs"
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:
@@ -48,11 +52,12 @@ driver_support:
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: true # TODO Confirm this
windows: false # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -13,7 +13,7 @@ example_usage:
self.driver.press_keycode(10);
javascript_wdio:
|
driver.pressKeyCode(10);
driver.pressKeycode(10);
javascript_wd:
|
await driver.pressKeycode(10);
@@ -23,18 +23,22 @@ example_usage:
ruby_core:
|
@driver.press_keycode(10)
php:
|
// TODO PHP sample
csharp:
|
driver.PressKeyCode(WindowsKeyCode.Windows);
// TODO C# sample
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L415"
javascript_wdio: "http://webdriver.io/api/mobile/longPressKeycode.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Windows/WindowsDriver.cs"
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:
@@ -48,11 +52,12 @@ driver_support:
mac:
mac: false # TODO Confirm this that mouse movements
windows:
windows: true # TODO Confirm this
windows: false # TODO Confirm this
client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -6,32 +6,28 @@ 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
@@ -40,8 +36,8 @@ driver_support:
xcuitest: false
uiautomation: false
android:
uiautomator2: true
espresso: true
uiautomator2: false
espresso: false
uiautomator: true
mac:
mac: false
@@ -49,8 +45,9 @@ driver_support:
windows: false
client_support:
java: true
python: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -6,32 +6,28 @@ 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
@@ -40,8 +36,8 @@ driver_support:
xcuitest: false
uiautomation: false
android:
uiautomator2: true
espresso: true
uiautomator2: false
espresso: false
uiautomator: true
mac:
mac: false
@@ -49,8 +45,9 @@ driver_support:
windows: false
client_support:
java: true
python: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -6,32 +6,28 @@ 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
@@ -40,8 +36,8 @@ driver_support:
xcuitest: false
uiautomation: false
android:
uiautomator2: true
espresso: true
uiautomator2: false
espresso: false
uiautomator: true
mac:
mac: false
@@ -49,8 +45,9 @@ driver_support:
windows: false
client_support:
java: true
python: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -6,32 +6,28 @@ 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
@@ -49,8 +45,9 @@ driver_support:
windows: false
client_support:
java: true
python: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -18,16 +18,20 @@ example_usage:
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_wdio: "http://webdriver.io/api/mobile/toggleAirplaneMode.html"
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
@@ -47,6 +51,7 @@ client_support:
java: true
python: false
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -1,12 +1,6 @@
---
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:
@@ -24,16 +18,20 @@ example_usage:
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_wdio: "http://webdriver.io/api/mobile/toggleData.html"
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
@@ -53,6 +51,7 @@ client_support:
java: true
python: false
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -21,17 +21,21 @@ example_usage:
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L774"
javascript_wdio: "http://webdriver.io/api/mobile/toggleLocationServices.html"
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
@@ -51,6 +55,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -1,22 +1,11 @@
---
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.
short_description: Switch the state of the wifi service
example_usage:
java:
|
driver.toggleWifi();
python:
|
driver.toggle_wifi()
javascript_wd:
|
await driver.toggleWiFi();
@@ -29,17 +18,20 @@ example_usage:
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_wdio: "http://webdriver.io/api/mobile/toggleWiFi.html"
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
@@ -57,8 +49,9 @@ driver_support:
windows: false
client_support:
java: true
python: true
python: false
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -6,15 +6,9 @@ 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
@@ -22,17 +16,19 @@ example_usage:
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
// TODO C# sample
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
@@ -52,6 +48,7 @@ client_support:
java: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -65,13 +62,13 @@ endpoint:
- name: session_id
description: ID of the session to route the command to
json_parameters:
- name: packageName
- name: package_name
type: string
description: The package name of the application
- name: dataType
- name: data_type
type: string
description: The type of system state which wants to read. It should be one of the supported performance data types.
- name: dataReadTimeout
- name: data_read_timeout
type: number
description: The number of attempts to read (optional)
response:
@@ -6,32 +6,28 @@ 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
// TODO C# sample
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
@@ -51,6 +47,7 @@ client_support:
java: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -10,9 +10,6 @@ example_usage:
javascript_wd:
|
await driver.startRecordingScreen();
javascript_wdio:
|
driver.startRecordingScreen();
ruby:
|
start_recording_screen
@@ -26,25 +23,23 @@ example_usage:
python:
|
self.driver.start_recording_screen()
php:
|
// TODO PHP sample
csharp:
|
driver.StartRecordingScreen(
AndroidStartScreenRecordingOptions.GetAndroidStartScreenRecordingOptions()
.WithTimeLimit(TimeSpan.FromSeconds(10))
.WithBitRate(500000)
.WithVideoSize("720x1280"));
// TODO C# sample
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
@@ -64,6 +59,7 @@ client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -77,10 +73,7 @@ endpoint:
- 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
- name: 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.
@@ -90,52 +83,48 @@ endpoint:
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
- name: username
type: string
description: The name of the user for the remote authentication.
- name: options.password
- name: password
type: string
description: The password for the remote authentication.
- name: options.method
- name: method
type: string
description: The http multipart upload method name. The 'PUT' one is used by default.
- name: options.forceRestart
- name: 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
- name: timeLimit
type: string
description: Recording time. 180 seconds is by default.
- name: options.videoType
- name: 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 `mjpeg`.
- name: options.videoQuality
Available formats "h264", "mp4" or "fmp4". Default is "mp4".
Only works for Simulator.
- name: videoQuality
type: string
description: (iOS Only) The video encoding quality (low, medium, high, photo - defaults to medium).
- name: options.videoFps
- name: 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
- name: bitRate
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.
description: (iOS 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
- name: 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
- name: 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.
@@ -10,9 +10,6 @@ example_usage:
javascript_wd:
|
await driver.stopRecordingScreen();
javascript_wdio:
|
driver.stopRecordingScreen();
ruby:
|
stop_recording_screen
@@ -24,18 +21,20 @@ example_usage:
python:
|
self.driver.stop_recording_screen()
php:
|
// TODO PHP sample
csharp:
|
driver.StopRecordingScreen();
// TODO C# sample
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
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:
@@ -54,6 +53,7 @@ client_support:
java: true
python: true
ruby: true
php: false
csharp: false
javascript_wd: true
javascript_wdio: true
@@ -7,8 +7,6 @@ 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.
Another way to enable touch id is by using `mobile: enrollBiometric`. More info [here](https://github.com/appium/appium-xcuitest-driver#mobile-enrollbiometric).
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:
@@ -23,24 +21,28 @@ example_usage:
await driver.toggleTouchIdEnrollment();
javascript_wdio:
|
driver.toggleEnrollTouchId(true);
driver.toggleTouchIdEnrollment(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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L670"
javascript_wdio: "http://webdriver.io/api/mobile/toggleTouchIdEnrollment.html"
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
@@ -60,6 +62,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -40,19 +40,22 @@ example_usage:
|
@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
// 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.touch_id"
javascript_wdio: "https://webdriver.io/docs/api/appium.html#touchid"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L661"
javascript_wdio: "http://webdriver.io/api/mobile/touchId.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/iOS/IOSDriver.cs"
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:
@@ -71,6 +74,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -21,17 +21,21 @@ example_usage:
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L676"
javascript_wdio: "http://webdriver.io/api/mobile/openNotifications.html"
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
@@ -40,7 +44,7 @@ driver_support:
xcuitest: false
uiautomation: false
android:
espresso: false
espresso: true
uiautomator2: true
uiautomator: true
mac:
@@ -51,6 +55,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -6,28 +6,24 @@ 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
@@ -45,11 +41,12 @@ driver_support:
windows: false
client_support:
java: true
python: true
python: false
ruby: true
php: false
csharp: false
javascript_wd: false
javascript_wdio: true
javascript_wdio: false
# Information about the HTTP endpoints
endpoint:
@@ -24,17 +24,21 @@ example_usage:
ruby_core:
|
@driver.device_time
php:
|
$time = $driver->getDeviceTime();
csharp:
|
string result = driver.DeviceTime;
// TODO
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"
python: "https://github.com/appium/python-client/blob/master/appium/webdriver/webdriver.py#L798"
javascript_wdio: "http://webdriver.io/api/mobile/getDeviceTime.html"
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
@@ -54,6 +58,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -15,27 +15,29 @@ example_usage:
await element.clear();
javascript_wdio:
|
$("~SomeAccessibilityId").clearValue();
driver.clearElement("~SomeAccessibilityId");
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();
// TODO C# sample
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_wdio: "http://webdriver.io/api/action/clearElement.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"
csharp: "https://github.com/SeleniumHQ/selenium/blob/master/dotnet/src/webdriver/Remote/RemoteWebElement.cs"
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:
@@ -54,6 +56,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -61,7 +64,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/clear
url: /wd/hub/session/:session_id/element/:element_id/clear
method: 'POST'
url_parameters:
- name: session_id
@@ -21,7 +21,7 @@ example_usage:
await element.click();
javascript_wdio:
|
$('#SomeId').click();
driver.click('#SomeId');
ruby:
|
find_element(:accessibility_id, 'SomeId').click
@@ -29,22 +29,21 @@ example_usage:
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();
// TODO
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_wdio: "http://webdriver.io/api/action/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
@@ -64,6 +63,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -71,7 +71,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/click
url: /wd/hub/session/:session_id/element/:element_id/click
method: 'POST'
url_parameters:
- name: session_id
@@ -21,29 +21,29 @@ example_usage:
await element.type("Hello world!")
javascript_wdio:
|
$("~SomeAccessibilityId").addValue("Enter");
driver.setValue("~SomeAccessibilityId");
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");
// TODO C# sample
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_wdio: "http://webdriver.io/api/action/setValue.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
@@ -63,6 +63,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -70,7 +71,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/value
url: /wd/hub/session/:session_id/element/value
method: 'POST'
url_parameters:
- name: session_id
@@ -80,10 +81,7 @@ endpoint:
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
description: 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.
# Links to specifications. Should link to at least one specification
specifications:
@@ -5,7 +5,7 @@ short_description: Get the value of an element's attribute
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
List<MobileElement> element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
String tagName = element.getAttribute("content-desc");
python:
|
@@ -16,27 +16,30 @@ example_usage:
let tagName = await element.getAttribute("content-desc");
javascript_wdio:
|
let attribute = $("~SomeAccessibilityId").getAttribute("content-desc");
let attribute = driver.getAttribute("~SomeAccessibilityId", "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");
// TODO C# sample
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_wdio: "http://webdriver.io/api/property/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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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:
@@ -55,6 +58,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -62,7 +66,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/attribute/:name
url: /wd/hub/session/:session_id/elements/:element_id/attribute/:name
method: 'GET'
url_parameters:
- name: session_id
@@ -11,7 +11,7 @@ description:
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementById("SomeId");
List<MobileElement> element = (MobileElement) driver.findElementById("SomeId");
String cssProperty = element.getCssValue("style");
python:
|
@@ -22,26 +22,29 @@ example_usage:
let cssProperty = await element.getComputedCss();
javascript_wdio:
|
let cssProperty = $("~SomeId").getCSSProperty("style");
let cssProperty = driver.getCssProperty("~SomeId", "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");
// TODO C# sample
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_wdio: "http://webdriver.io/api/property/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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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:
@@ -60,6 +63,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -67,7 +71,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/css/:property_name
url: /wd/hub/session/:session_id/elements/:element_id/css/:property_name
method: GET
url_parameters:
- name: session_id
@@ -14,28 +14,33 @@ example_usage:
let element = await driver.elementByAccessibilityId("SomeAccessibilityID");
let isDisplayed = await element.isDisplayed();
# Note that elementIdDisplayed is not a typo in this document, it's a WDIO typo
javascript_wdio:
|
let isDisplayed = $("~SomeAccessibilityId").isDisplayed();
let isDisplayed = driver.elementIdDisplayed("~SomeAccessibilityId");
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;
// TODO C# sample
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_wdio: "http://webdriver.io/api/protocol/elementIdDisplayed.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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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 support for these per platform
driver_support:
@@ -54,6 +59,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -61,7 +67,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/displayed
url: /wd/hub/session/:session_id/element/:element_id/displayed
method: 'GET'
url_parameters:
- name: session_id
@@ -15,26 +15,29 @@ example_usage:
let isEnabled = await element.isEnabled();
javascript_wdio:
|
let isEnabled = $("~SomeAccessibilityId").isEnabled();
let isEnabled = driver.isEnabled("~SomeAccessibilityId");
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;
// TODO C# sample
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_wdio: "http://webdriver.io/api/state/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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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 support for these per platform
driver_support:
@@ -53,6 +56,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -60,7 +64,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/enabled
url: /wd/hub/session/:session_id/element/:element_id/enabled
method: 'GET'
url_parameters:
- name: session_id
@@ -7,17 +7,12 @@ example_usage:
|
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);
let location = driver.getLocationInView("~SomeAccessibilityId");
client_docs:
javascript_wdio: "https://webdriver.io/docs/api/jsonwp.html#getelementlocationinview"
javascript_wdio: "http://webdriver.io/api/property/getLocationInView.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2189"
# TODO: Confirm if all the drivers support this
@@ -37,6 +32,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -44,7 +40,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/location_in_view
url: /wd/hub/session/:session_id/elements/:element_id/location_in_view
method: GET
url_parameters:
- name: session_id
@@ -7,7 +7,7 @@ description: The point (0, 0) refers to the upper-left corner of the page. The e
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
List<MobileElement> element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
Point location = element.getLocation();
python:
|
@@ -18,26 +18,30 @@ example_usage:
let location = await element.getLocation();
javascript_wdio:
|
let location = $("~SomeAccessibilityId").getLocation();
let location = driver.getLocation("~SomeAccessibilityId");
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;
// TODO C# sample
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_wdio: "http://webdriver.io/api/property/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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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:
@@ -56,6 +60,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -63,7 +68,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/location
url: /wd/hub/session/:session_id/elements/:element_id/location
method: GET
url_parameters:
- name: session_id
@@ -5,7 +5,7 @@ short_description: Get an element's tag name
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
List<MobileElement> element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
String tagName = element.getTagName();
python:
|
@@ -16,26 +16,29 @@ example_usage:
let tagName = await element.getTagName();
javascript_wdio:
|
let tagName = $("~SomeAccessibilityId").getTagName();
let tagName = driver.getTagName("~SomeAccessibilityId");
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;
// 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/element/getTagName.html"
javascript_wdio: "http://webdriver.io/api/property/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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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:
@@ -54,6 +57,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -61,7 +65,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/name
url: /wd/hub/session/:session_id/elements/:element_id/name
method: 'GET'
url_parameters:
- name: session_id
@@ -14,10 +14,13 @@ example_usage:
// TODO javascript_wd sample
javascript_wdio:
|
driver.getPageIndex()
// TODO javascript_wdio sample
ruby:
|
// TODO Ruby sample
php:
|
// TODO PHP sample
csharp:
|
// TODO C# sample
@@ -25,9 +28,10 @@ example_usage:
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_wdio: "http://webdriver.io/api/property/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"
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
@@ -47,14 +51,15 @@ 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
url: /wd/hub/session/:session_id/element/:element_id/pageIndex
method: 'GET'
url_parameters:
- name: session_id
@@ -66,5 +71,5 @@ endpoint:
description: The tag name of the element
# Links to specifications. Should link to at least one specification
specifications:
specifications:
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L285
@@ -5,20 +5,15 @@ short_description: Gets dimensions and coordinates of an element
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
List<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);
let rect = driver.elementIdRect("~SomeAccessibilityId");
ruby:
|
element = find_element :accessibility_id, "SomeAccessibilityID"
@@ -27,17 +22,20 @@ example_usage:
|
element = @driver.find_element :accessibility_id, "SomeAccessibilityID"
element.rect
php:
|
// TODO PHP sample
csharp:
|
var element = driver.FindElementByAccessibilityId("SomeAccessibilityID");
Rectangle rect = element.Rect;
// TODO C# sample
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"
javascript_wdio: "http://webdriver.io/api/protocol/elementIdRect.html"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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:
@@ -56,6 +54,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -63,7 +62,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/rect
url: /wd/hub/session/:session_id/elements/:element_id/rect
method: GET
url_parameters:
- name: session_id
@@ -80,7 +79,7 @@ endpoint:
- name: height
type: number
description: Height of the bounding rectangle
- name: width
- name: weight
type: number
description: Width of the bounding rectangle
# Links to specifications. Should link to at least one specification
@@ -11,14 +11,13 @@ example_usage:
// TODO Java sample
python:
|
self.driver.set_value('some')
// TODO: Python example
javascript_wd:
|
// TODO JavaScript sample
javascript_wdio:
|
let element = $("~SomeAccessibilityId")
driver.replaceValue(element.elementId, 'some')
// TODO JavaScript sample
ruby:
|
element = find_element :accessibility_id, "SomeAccessibilityID"
@@ -27,6 +26,9 @@ example_usage:
|
element = @driver.find_element :accessibility_id, "SomeAccessibilityID"
@driver.replace_value element, 'some'
php:
|
// TODO PHP sample
csharp:
|
// TODO C# sample
@@ -34,17 +36,18 @@ example_usage:
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_wdio: "http://webdriver.io/api/property/getText.html" # TODO JAvaScript documentation link
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
xcuitest: true
uiautomation: true
android:
espresso: true
uiautomator2: true
@@ -57,6 +60,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -64,7 +68,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/appium/element/:element_id/replace_value
url: /wd/hub/session/:session_id/appium/element/:element_id/replace_value
method: 'POST'
url_parameters:
- name: session_id
@@ -74,10 +78,7 @@ endpoint:
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
description: 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.
# Links to specifications. Should link to at least one specification
specifications:
@@ -15,26 +15,29 @@ example_usage:
let isSelected = await element.isSelected();
javascript_wdio:
|
let isSelected = $("~SomeAccessibilityId").isSelected();
let isSelected = driver.isSelected("~SomeAccessibilityId");
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;
// TODO C# sample
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_wdio: "http://webdriver.io/api/state/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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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 support for these per platform
driver_support:
@@ -53,6 +56,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -60,7 +64,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/selected
url: /wd/hub/session/:session_id/element/:element_id/selected
method: 'GET'
url_parameters:
- name: session_id
@@ -7,7 +7,7 @@ description: The size will be returned as an object with width and height proper
example_usage:
java:
|
MobileElement element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
List<MobileElement> element = (MobileElement) driver.findElementByAccessibilityId("SomeAccessibilityID");
Dimension elementSize = element.getSize();
python:
|
@@ -18,26 +18,30 @@ example_usage:
let size = await element.getSize();
javascript_wdio:
|
let size = $("~SomeAccessibilityId").getSize();
let size = driver.getElementSize("~SomeAccessibilityId");
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;
// TODO C# sample
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_wdio: "http://webdriver.io/api/property/getElementSize.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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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:
@@ -56,6 +60,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -63,7 +68,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements/:element_id/size
url: /wd/hub/session/:session_id/elements/:element_id/size
method: GET
url_parameters:
- name: session_id
@@ -20,7 +20,7 @@ example_usage:
await element.text();
javascript_wdio:
|
$("~SomeAccessibilityId").getText();
driver.getText("~SomeAccessibilityId");
ruby:
|
element = find_element :accessibility_id, "SomeAccessibilityID"
@@ -29,19 +29,23 @@ example_usage:
|
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;
// TODO C# sample
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_wdio: "http://webdriver.io/api/property/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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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:
@@ -60,6 +64,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -67,7 +72,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/:element_id/text
url: /wd/hub/session/:session_id/element/:element_id/text
method: 'GET'
url_parameters:
- name: session_id
@@ -12,32 +12,35 @@ example_usage:
MobileElement elementTwo = (MobileElement) driver.findElementByClassName("SomeClassName");
python:
|
el = driver.find_element(AppiumBy.ACCESSIBILITY_ID,'SomeAccessibilityID')
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");
driver.element("~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");
// TODO C# sample
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_wdio: "http://webdriver.io/api/protocol/element.html#Usage"
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
@@ -57,6 +60,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -64,7 +68,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element
url: /wd/hub/session/:session_id/element
method: 'POST'
url_parameters:
- name: session_id
@@ -29,37 +29,40 @@ selector_strategies:
example_usage:
java:
|
List<MobileElement> elementsOne = (List<MobileElement>) driver.findElementsByAccessibilityId("SomeAccessibilityID");
List<MobileElement> elementsTwo = (List<MobileElement>) driver.findElementsByClassName("SomeClassName");
List<MobileElement> elementsOne = (MobileElement) driver.findElementsByAccessibilityId("SomeAccessibilityID");
List<MobileElement> elementsTwo = (MobileElement) driver.findElementsByClassName("SomeClassName");
python:
|
el = driver.find_elements(AppiumBy.ACCESSIBILITY_ID,'SomeAccessibilityID')
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");
driver.elements("~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");
// TODO C# sample
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_wdio: "http://webdriver.io/api/protocol/elements.html#Usage"
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"
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumWebElement.cs"
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:
@@ -78,6 +81,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -85,7 +89,7 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/elements
url: /wd/hub/session/:session_id/elements
method: 'POST'
url_parameters:
- name: session_id
@@ -14,26 +14,29 @@ example_usage:
let element = await driver.active();
javascript_wdio:
|
driver.getActiveElement();
driver.elementActive();
ruby:
|
switch_to.active_element
ruby_core:
|
@driver.switch_to.active_element
php:
|
// TODO PHP example
csharp:
|
IWebElement currentElement = driver.SwitchTo().ActiveElement();
// TODO C# example
client_docs:
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html#activeElement--"
python: "http://selenium-python.readthedocs.io/api.html?highlight=active_element#selenium.webdriver.remote.webdriver.WebDriver.switch_to_active_element" # TODO
javascript_wdio: "https://webdriver.io/docs/api/webdriver.html#getactiveelement"
javascript_wdio: "http://webdriver.io/api/protocol/elementActive.html"
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L1934"
ruby: "https://www.rubydoc.info/gems/selenium-webdriver/0.0.28/Selenium/WebDriver/TargetLocator#active_element-instance_method"
ruby_core: "https://www.rubydoc.info/gems/selenium-webdriver/0.0.28/Selenium/WebDriver/TargetLocator#active_element-instance_method"
csharp: "https://github.com/SeleniumHQ/selenium/blob/master/dotnet/src/webdriver/Remote/RemoteTargetLocator.cs"
php: "https://github.com/appium/php-client/" # TODO
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
# Driver support by platform
driver_support:
@@ -52,6 +55,7 @@ client_support:
java: true
python: true
ruby: true
php: true
csharp: true
javascript_wd: true
javascript_wdio: true
@@ -59,8 +63,8 @@ client_support:
# Information about the HTTP endpoints
endpoint:
url: /session/:session_id/element/active
method: "'GET'(W3C), 'POST'(JSONWP)"
url: /wd/hub/session/:session_id/element/active
method: 'POST'
response:
- name: ELEMENT
type: object

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