mirror of
https://github.com/appium/appium.git
synced 2026-11-10 03:44:40 +08:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e82ac0a8c2 | ||
|
|
3cbe1b876a | ||
|
|
0e8beb7526 |
@@ -1,13 +0,0 @@
|
||||
# editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
@@ -0,0 +1,2 @@
|
||||
coverage
|
||||
node_modules
|
||||
-54
@@ -1,54 +0,0 @@
|
||||
# Generated by FOSSA CLI (https://github.com/fossas/fossa-cli)
|
||||
# Visit https://fossa.com to learn more
|
||||
|
||||
version: 3
|
||||
|
||||
project:
|
||||
id: 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/eslint-config-appium-ts
|
||||
- type: npm
|
||||
path: ./packages/fake-driver
|
||||
- type: npm
|
||||
path: ./packages/support
|
||||
- type: npm
|
||||
path: ./packages/test-support
|
||||
- type: npm
|
||||
path: ./packages/types
|
||||
- type: npm
|
||||
path: ./packages/schema
|
||||
- type: npm
|
||||
path: ./packages/universal-xmlplugin
|
||||
- type: npm
|
||||
path: ./packages/opencv
|
||||
- type: npm
|
||||
path: ./packages/images-plugin
|
||||
- type: npm
|
||||
path: ./packages/base-plugin
|
||||
- type: npm
|
||||
path: ./packages/relaxed-caps-plugin
|
||||
- type: npm
|
||||
path: ./packages/fake-plugin
|
||||
- type: npm
|
||||
path: ./packages/docutils
|
||||
|
||||
revision:
|
||||
branch: master
|
||||
@@ -1,4 +0,0 @@
|
||||
* text=auto eol=lf
|
||||
|
||||
# Handle as a text file but merge as binary.
|
||||
package-lock.json merge=binary
|
||||
@@ -0,0 +1,33 @@
|
||||
## The problem
|
||||
|
||||
Briefly describe the issue you are experiencing (or the feature you want to see added to Appium). Tell us what you were trying to do and what happened instead. Remember, this is _not_ a place to ask questions. For that, go to http://discuss.appium.io!
|
||||
|
||||
## Environment
|
||||
|
||||
* Appium version (or git revision) that exhibits the issue:
|
||||
* Last Appium version that did not exhibit the issue (if applicable):
|
||||
* Desktop OS/version used to run Appium:
|
||||
* Node.js version (unless using Appium.app|exe):
|
||||
* Npm or Yarn package manager:
|
||||
* Mobile platform/version under test:
|
||||
* Real device or emulator/simulator:
|
||||
* Appium CLI or Appium.app|exe:
|
||||
|
||||
## Details
|
||||
|
||||
If necessary, describe the problem you have been experiencing in more detail.
|
||||
|
||||
## Link to Appium logs
|
||||
|
||||
Create a [GIST](https://gist.github.com) which is a paste of your _full_ Appium logs, and link them here.
|
||||
Do _NOT_ paste your full Appium logs here, as it will make this issue very long and hard to read!
|
||||
If you are reporting a bug, _always_ include Appium logs!
|
||||
|
||||
|
||||
## Code To Reproduce Issue [ Good To Have ]
|
||||
|
||||
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 `sample-code` directory, use one of your favourite languages and sample apps to reproduce the issue.
|
||||
|
||||
In case a similar scenario is missing in sample-code, please submit a PR with one of the sample apps provided.
|
||||
@@ -1,111 +0,0 @@
|
||||
name: 🐞 Bug Report
|
||||
description: Create a new bug report.
|
||||
title: '🐞 bug: <title>'
|
||||
labels: [Bug, Needs Triage]
|
||||
body:
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: ':stop_sign: _Make sure you are reporting an issue. For general questions, please use [http://discuss.appium.io](http://discuss.appium.io)._'
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Is there an existing issue for this?
|
||||
description: 'Please [search :mag: the issues](https://github.com/appium/appium/issues) to check if this bug has already been reported.'
|
||||
options:
|
||||
- label: I have searched the existing issues
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Appium Version
|
||||
description: What Appium server version are you running?
|
||||
placeholder: Output of `appium --version`
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Appium Host Type
|
||||
description: |
|
||||
How is your Appium server being hosted? For options other than "Command Line", please add more details under "Further Information".
|
||||
options:
|
||||
- Command Line
|
||||
- Virtual Machine/Docker
|
||||
- Cloud Provider (e.g. BrowserStack/Sauce Labs)
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Are you using Appium components not maintained by the Appium team?
|
||||
description: Refer to the [Appium Ecosystem](http://appium.io/docs/en/latest/ecosystem/) page for officially-supported components.
|
||||
placeholder: Please provide the names of any third-party components.
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Is this issue reproducible using the latest components?
|
||||
description: |
|
||||
You can retrieve the latest server/driver/plugin version number by running `npm info <package-name> version`. If you are not up to date, please try to reproduce your issue after updating all affected components.
|
||||
options:
|
||||
- label: I confirm the issue is still reproducible with the latest component versions
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Current Behavior
|
||||
description: Describe the problem you are experiencing. **Please do not paste your logs here.** Screenshots are welcome.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: Describe what you expect to happen instead.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Appium Log
|
||||
description: |
|
||||
Please create a [Gist](https://gist.github.com) with your _full_ Appium server log and link it here. Alternatively, you can directly attach your logfile in the "Further Information" field below.
|
||||
|
||||
:warning: _Remember to redact or remove any sensitive information!_
|
||||
placeholder: 'https://gist.github.com/...'
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Environment Details
|
||||
description: |
|
||||
Please provide additional information about your environment; feel free to remove any items which are not relevant.
|
||||
|
||||
:warning: _Remember to redact or remove any sensitive information!_
|
||||
value: |
|
||||
- Debug details (`appium --show-debug-info`):
|
||||
- Last component version(s) which did _not_ exhibit the problem:
|
||||
- Platform and version of device under test:
|
||||
- Real device or emulator/simulator:
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Minimal Reproducible Example
|
||||
description: |
|
||||
Please provide [the smallest, complete code snippet](https://stackoverflow.com/help/minimal-reproducible-example) that Appium's maintainers can run to reproduce the issue. An easy way to get started is to copy [sample code](https://github.com/appium/appium/tree/master/packages/appium/sample-code) and modify it accordingly. Failing this, any sort of reproduction steps are better than nothing!
|
||||
|
||||
If the result is more than a screenful of text _or_ requires multiple files, please:
|
||||
|
||||
- _Attach_ (do not paste) it to this textarea, _or_
|
||||
- Put it in a [Gist](https://gist.github.com) and paste the link, _or_
|
||||
- Provide a link to a new or existing public repository exhibiting the issue
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Further Information
|
||||
description: If needed, please provide additional information about your issue (attachments, links, references, etc.).
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: ':stop_sign: _Make sure you are reporting an issue. For general questions, please use [http://discuss.appium.io](http://discuss.appium.io)._'
|
||||
@@ -1,5 +0,0 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: ❓ Question
|
||||
url: https://discuss.appium.io/
|
||||
about: Please use the Appium forum for any questions.
|
||||
@@ -1,33 +0,0 @@
|
||||
name: 💡 Feature Request
|
||||
description: Suggest an idea for this project.
|
||||
title: "💡 feat: <title>"
|
||||
labels: [Enhancement]
|
||||
body:
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Is your feature request related to a problem?
|
||||
description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...].
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe the solution you'd like.
|
||||
description: A clear and concise description of what you want to happen.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe alternatives you've considered.
|
||||
description: A clear and concise description of any alternative solutions or features you've considered.
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Add any other context or screenshots about the feature request here.
|
||||
validations:
|
||||
required: false
|
||||
@@ -16,11 +16,11 @@ _Put an `x` in the boxes that apply_
|
||||
|
||||
_Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code._
|
||||
|
||||
- [ ] I have read the [Contributing Guide](https://appium.io/docs/en/latest/contributing/)
|
||||
- [ ] I have signed the CLA
|
||||
- [ ] I have read the [CONTRIBUTING](https://github.com/appium/appium/blob/master/CONTRIBUTING.md) doc
|
||||
- [ ] I have signed the [CLA](https://cla.js.foundation/appium/appium)
|
||||
- [ ] Lint and unit tests pass locally with my changes
|
||||
- [ ] I have added tests that prove my fix is effective or that my feature works
|
||||
- [ ] I have added the necessary documentation (if appropriate)
|
||||
- [ ] I have added necessary documentation (if appropriate)
|
||||
- [ ] Any dependent changes have been merged and published in downstream modules
|
||||
|
||||
## Further comments
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
name: Setup Node, Install, Build
|
||||
|
||||
description: |
|
||||
Common setup for Appium CI jobs: checkout, setup Node, install deps, optional build, optional V8 cache clear.
|
||||
|
||||
inputs:
|
||||
node-version:
|
||||
description: Node.js version to setup
|
||||
required: true
|
||||
install-command:
|
||||
description: npm install command
|
||||
required: false
|
||||
default: npm ci --foreground-scripts
|
||||
run-build:
|
||||
description: Whether to run npm run build
|
||||
required: false
|
||||
default: 'true'
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Use Node.js ${{ inputs.node-version }}
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: ${{ inputs.node-version }}
|
||||
cache: npm
|
||||
- name: SocketDev Security Check
|
||||
uses: SocketDev/action@v1
|
||||
with:
|
||||
mode: firewall-free
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
# Replace npm with sfw npm in the install command
|
||||
install_cmd="${{ inputs.install-command }}"
|
||||
install_cmd="${install_cmd//npm /sfw npm }"
|
||||
$install_cmd
|
||||
- name: Build packages
|
||||
if: ${{ inputs.run-build == 'true' }}
|
||||
shell: bash
|
||||
run: npm run build
|
||||
@@ -0,0 +1,20 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: npm
|
||||
directory: "/sample-code/javascript-webdriverio"
|
||||
schedule:
|
||||
interval: daily
|
||||
time: "11:00"
|
||||
open-pull-requests-limit: 10
|
||||
- package-ecosystem: npm
|
||||
directory: "/sample-code/javascript-wd"
|
||||
schedule:
|
||||
interval: daily
|
||||
time: "11:00"
|
||||
open-pull-requests-limit: 10
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
time: "11:00"
|
||||
open-pull-requests-limit: 10
|
||||
@@ -1,149 +0,0 @@
|
||||
version: v1
|
||||
|
||||
labels:
|
||||
- label: 'Enhancement'
|
||||
sync: true
|
||||
matcher:
|
||||
commits: '^feat.*?:'
|
||||
title: '^feat.*?:'
|
||||
|
||||
- label: 'Bug'
|
||||
sync: true
|
||||
matcher:
|
||||
commits: '^fix.*?:'
|
||||
title: '^fix.*?:'
|
||||
|
||||
- label: 'Documentation'
|
||||
sync: true
|
||||
matcher:
|
||||
commits: '^docs.*?:'
|
||||
title: '^docs.*?:'
|
||||
files: ['packages/docutils/**', 'packages/appium/docs/**', '**/*.md']
|
||||
|
||||
- label: 'chore'
|
||||
sync: true
|
||||
matcher:
|
||||
commits: '^chore.*?:'
|
||||
title: '^chore.*?:'
|
||||
files: ['.github/**', '.husky/**', '.vscode/**', './.*', './*.js', '**/test/**']
|
||||
|
||||
- label: 'SemVer:Breaking'
|
||||
sync: true
|
||||
matcher:
|
||||
commits: '(^(.+?)!:)|(BREAKING CHANGE:)'
|
||||
|
||||
- label: 'Dependencies'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['**/package.json', 'package-lock.json', '**/requirements.txt']
|
||||
author: 'renovate'
|
||||
|
||||
- label: 'appium core'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/appium/**']
|
||||
|
||||
- label: '@appium/base-driver'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/base-driver/**']
|
||||
|
||||
- label: '@appium/base-plugin'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/base-plugin/**']
|
||||
|
||||
- label: '@appium/storage-plugin'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/storage-plugin/**']
|
||||
|
||||
- label: '@appium/docutils'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/docutils/**']
|
||||
|
||||
- label: '@appium/driver-test-support'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/driver-test-support/**']
|
||||
|
||||
- label: '@appium/eslint-config-appium-ts'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/eslint-config-appium-ts/**']
|
||||
|
||||
- label: '@appium/execute-driver-plugin'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/execute-driver-plugin/**']
|
||||
|
||||
- label: '@appium/fake-driver'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/fake-driver/**']
|
||||
|
||||
- label: '@appium/fake-plugin'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/fake-plugin/**']
|
||||
|
||||
- label: '@appium/images-plugin'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/images-plugin/**']
|
||||
|
||||
- label: '@appium/logger'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/logger/**']
|
||||
|
||||
- label: '@appium/opencv'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/opencv/**']
|
||||
|
||||
- label: '@appium/plugin-test-support'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/plugin-test-support/**']
|
||||
|
||||
- label: '@appium/relaxed-caps-plugin'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/relaxed-caps-plugin/**']
|
||||
|
||||
- label: '@appium/schema'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/schema/**']
|
||||
|
||||
- label: '@appium/support'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/support/**']
|
||||
|
||||
- label: '@appium/strongbox'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/strongbox/**']
|
||||
|
||||
- label: '@appium/test-support'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/test-support/**']
|
||||
|
||||
- label: '@appium/tsconfig'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/tsconfig/**']
|
||||
|
||||
- label: '@appium/types'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/types/**']
|
||||
|
||||
- label: '@appium/universal-xml-plugin'
|
||||
sync: true
|
||||
matcher:
|
||||
files: ['packages/universal-xml-plugin/**']
|
||||
@@ -1,16 +0,0 @@
|
||||
name: Labeler
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize]
|
||||
branches: [master]
|
||||
|
||||
permissions: read-all
|
||||
|
||||
jobs:
|
||||
labeler:
|
||||
permissions:
|
||||
pull-requests: write
|
||||
name: Auto-Label PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: fuxingloh/multi-labeler@v4
|
||||
@@ -1,199 +0,0 @@
|
||||
name: Appium Build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# this list of paths could potentially impact the build
|
||||
paths:
|
||||
- '**/tsconfig*.json'
|
||||
- 'packages/base-driver/static/**/*'
|
||||
- 'packages/*/test/**'
|
||||
- 'packages/*/bin'
|
||||
- 'packages/**/*.ts'
|
||||
- 'packages/**/*.json'
|
||||
- 'packages/**/*.js'
|
||||
- 'package*.json'
|
||||
- 'lerna.json'
|
||||
- '.npmrc'
|
||||
- '.mocharc.js'
|
||||
- '.github/workflows/build.yml' # this file
|
||||
- '.eslintrc'
|
||||
- '.eslintignore'
|
||||
- '!**/sample-code/**'
|
||||
- '!packages/*/docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '**/tsconfig*.json'
|
||||
- 'packages/base-driver/static/**/*'
|
||||
- 'packages/*/test/**'
|
||||
- 'packages/*/bin'
|
||||
- 'packages/**/*.ts'
|
||||
- 'packages/**/*.json'
|
||||
- 'packages/**/*.js'
|
||||
- 'package*.json'
|
||||
- 'lerna.json'
|
||||
- '.npmrc'
|
||||
- '.mocharc.js'
|
||||
- '.github/workflows/build.yml' # this file
|
||||
- '.eslintrc'
|
||||
- '.eslintignore'
|
||||
- '!**/sample-code/**'
|
||||
- '!packages/*/docs/**'
|
||||
|
||||
env:
|
||||
CI: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
jobs:
|
||||
prepare_matrix:
|
||||
uses: appium/appium-workflows/.github/workflows/node-lts-matrix.yml@main
|
||||
|
||||
prepare_e2e_packages:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
packages: ${{ steps.discover-packages.outputs.packages }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Discover packages with e2e tests
|
||||
id: discover-packages
|
||||
run: |
|
||||
packages=()
|
||||
for package_dir in packages/*/; do
|
||||
package_json="${package_dir}package.json"
|
||||
if [[ -f "$package_json" ]]; then
|
||||
# Check if package.json has test:e2e script and it's not a no-op
|
||||
has_e2e=$(node -e "
|
||||
try {
|
||||
const pkg = require('./$package_json');
|
||||
const script = pkg.scripts && pkg.scripts['test:e2e'];
|
||||
if (script && !script.includes('echo') && !script.includes('No e2e tests')) {
|
||||
console.log('true');
|
||||
}
|
||||
} catch(e) {
|
||||
// Ignore errors
|
||||
}
|
||||
")
|
||||
if [[ "$has_e2e" == "true" ]]; then
|
||||
# Use the directory path without packages/ prefix (remove trailing slash)
|
||||
package_name="${package_dir%/}"
|
||||
package_name="${package_name#packages/}"
|
||||
packages+=("$package_name")
|
||||
fi
|
||||
fi
|
||||
done
|
||||
# Convert array to JSON array for GitHub Actions matrix
|
||||
if [[ ${#packages[@]} -eq 0 ]]; then
|
||||
echo "No packages with e2e tests found"
|
||||
packages_json="[]"
|
||||
else
|
||||
# Use jq to create a compact single-line JSON array
|
||||
packages_json=$(printf '%s\n' "${packages[@]}" | jq -R '.' | jq -s '.' | jq -c '.')
|
||||
fi
|
||||
echo "packages=$packages_json" >> $GITHUB_OUTPUT
|
||||
echo "Found packages with e2e tests:"
|
||||
echo "$packages_json" | jq -r '.[]' | sed 's/^/ - /'
|
||||
|
||||
test-smoke:
|
||||
needs:
|
||||
- prepare_matrix
|
||||
name: Smoke Tests
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Setup, install and build
|
||||
uses: ./.github/actions/setup-build
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
install-command: npm ci --foreground-scripts
|
||||
run-build: 'true'
|
||||
- name: Run smoke tests
|
||||
run: npm run test:smoke
|
||||
|
||||
test-unit:
|
||||
needs:
|
||||
- prepare_matrix
|
||||
name: Unit Tests
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Setup, install and build
|
||||
uses: ./.github/actions/setup-build
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
install-command: npm ci --foreground-scripts
|
||||
run-build: 'true'
|
||||
- name: Run unit tests
|
||||
run: npm run test:unit
|
||||
|
||||
test-types:
|
||||
needs:
|
||||
- prepare_matrix
|
||||
name: Type Tests
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Setup, install and build
|
||||
uses: ./.github/actions/setup-build
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
install-command: npm ci --foreground-scripts
|
||||
run-build: 'true'
|
||||
- name: Run type tests
|
||||
run: npm run test:types
|
||||
|
||||
test-e2e:
|
||||
needs:
|
||||
- prepare_matrix
|
||||
- prepare_e2e_packages
|
||||
name: E2E Tests - ${{ matrix.package_dir }} (Node ${{ matrix.node-version }})
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
||||
package_dir: ${{ fromJSON(needs.prepare_e2e_packages.outputs.packages) }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Setup, install and build
|
||||
uses: ./.github/actions/setup-build
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
install-command: npm ci --foreground-scripts
|
||||
run-build: 'true'
|
||||
- name: Run E2E tests for ${{ matrix.package_dir }}
|
||||
run: |
|
||||
set -o pipefail
|
||||
cd "packages/${{ matrix.package_dir }}"
|
||||
npm run test:e2e
|
||||
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Setup and install (no build)
|
||||
uses: ./.github/actions/setup-build
|
||||
with:
|
||||
node-version: lts/*
|
||||
install-command: npm ci
|
||||
run-build: 'false'
|
||||
- name: ESLint
|
||||
run: npm run lint:ci
|
||||
@@ -1,36 +0,0 @@
|
||||
name: Cache Cleanup
|
||||
|
||||
# from https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- closed
|
||||
|
||||
jobs:
|
||||
cleanup:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Cleanup
|
||||
run: |
|
||||
gh extension install actions/gh-actions-cache
|
||||
|
||||
REPO=${{ github.repository }}
|
||||
BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
|
||||
|
||||
echo "Fetching list of cache keys"
|
||||
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 )
|
||||
|
||||
## Setting this to not fail the workflow while deleting cache keys.
|
||||
set +e
|
||||
echo "Deleting caches..."
|
||||
for cacheKey in $cacheKeysForPR
|
||||
do
|
||||
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
|
||||
done
|
||||
echo "Done"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -1,44 +0,0 @@
|
||||
# Collects translation statistics from Crowdin for the last calendar month
|
||||
# and posts them to Slack grouped by project, language, and translator
|
||||
|
||||
name: Crowdin Translation Statistics
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# Run on the first day of each month at 9:00 AM UTC
|
||||
- cron: 0 9 1 * *
|
||||
|
||||
jobs:
|
||||
collect-stats:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- project_id_var: CROWDIN_DOCS_PROJECT_ID
|
||||
project_name: appium-documentation
|
||||
- project_id_var: CROWDIN_INSPECTOR_PROJECT_ID
|
||||
project_name: appium-inspector
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Use Node.js LTS
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
- name: Collect Crowdin Stats for ${{ matrix.project_name }}
|
||||
id: crowdin-stats
|
||||
run: node ./scripts/crowdin-stats.mjs > crowdin-stats-${{ matrix.project_name }}.json
|
||||
env:
|
||||
CROWDIN_PROJECT_ID: ${{ vars[matrix.project_id_var] }}
|
||||
CROWDIN_TOKEN: ${{ secrets.CROWDIN_DOCS_TOKEN }}
|
||||
- name: Post to Slack for ${{ matrix.project_name }}
|
||||
uses: slackapi/slack-github-action@v2.1.1
|
||||
with:
|
||||
errors: true
|
||||
webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
webhook-type: incoming-webhook
|
||||
payload-file-path: crowdin-stats-${{ matrix.project_name }}.json
|
||||
@@ -1,38 +0,0 @@
|
||||
# Retrieves non-English translations from Crowdin and creates a PR with new changes
|
||||
|
||||
name: Sync Crowdin Docs Translations
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: 0 0 * * *
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use Node.js LTS
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
- name: Crowdin Sync
|
||||
run: npm run crowdin-sync-docs-translations
|
||||
env:
|
||||
# appium-documentation
|
||||
CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_DOCS_PROJECT_ID }}
|
||||
CROWDIN_TOKEN: ${{ secrets.CROWDIN_DOCS_TOKEN }}
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7.0.9
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
commit-message: 'docs(appium): Update documentation translations'
|
||||
title: 'docs(appium): Update documentation translations'
|
||||
branch: crowdin-sync-${{ github.run_id }}
|
||||
body: 'Automated Update of Documentation Translations: https://crowdin.com/project/appium-documentation'
|
||||
@@ -1,31 +0,0 @@
|
||||
# Updates Crowdin with any changes in document files in English
|
||||
|
||||
name: Update Crowdin English Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
paths:
|
||||
- 'packages/appium/docs/en/**.md'
|
||||
- 'packages/appium/docs/mkdocs-en.yml'
|
||||
- '.github/workflows/crowdin-update-docs-resources.yml' # this file
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Use Node.js LTS
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
- name: Crowdin Update
|
||||
run: npm run crowdin-update-docs
|
||||
env:
|
||||
# appium-documentation
|
||||
CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_DOCS_PROJECT_ID }}
|
||||
CROWDIN_TOKEN: ${{ secrets.CROWDIN_DOCS_TOKEN }}
|
||||
@@ -1,68 +0,0 @@
|
||||
name: Appium Deploy
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
prepare_matrix:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
versions: ${{ steps.generate-matrix.outputs.lts }}
|
||||
steps:
|
||||
- name: Select all current LTS versions of Node.js
|
||||
id: generate-matrix
|
||||
uses: msimerson/node-lts-versions@v1
|
||||
|
||||
check:
|
||||
needs:
|
||||
- prepare_matrix
|
||||
name: Check
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Install Appium
|
||||
run: |
|
||||
if [[ "$GITHUB_REF_TYPE" == tag ]]; then
|
||||
npm i --location=global $GITHUB_REF_NAME
|
||||
else
|
||||
npm i --location=global appium
|
||||
fi
|
||||
shell: bash
|
||||
- name: Install drivers and plugins
|
||||
run: |
|
||||
if grep -q macos <<< ${{ matrix.os }}; then
|
||||
appium driver install xcuitest
|
||||
fi
|
||||
appium driver install uiautomator2
|
||||
appium plugin install images
|
||||
shell: bash
|
||||
- name: Verify installation
|
||||
run: |
|
||||
installed_drivers=$(appium driver list --installed 2>&1)
|
||||
if grep -q macos <<< ${{ matrix.os }}; then
|
||||
grep -q xcuitest <<< $installed_drivers
|
||||
fi
|
||||
grep -q uiautomator2 <<< $installed_drivers
|
||||
installed_plugins=$(appium plugin list --installed 2>&1)
|
||||
grep -q images <<< $installed_plugins
|
||||
shell: bash
|
||||
- name: Verify Appium could be executed
|
||||
run: |
|
||||
appium --use-plugins=images &
|
||||
pid=$(echo $!)
|
||||
sleep 5
|
||||
ps -p $pid || exit 1
|
||||
kill -2 $pid
|
||||
shell: bash
|
||||
@@ -1,53 +0,0 @@
|
||||
name: Build Docs
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '**/tsconfig*.json'
|
||||
- '**/package*.json'
|
||||
- '**/*mkdocs*.ya?ml'
|
||||
- 'packages/docutils/requirements.txt'
|
||||
- 'packages/*/README.md'
|
||||
- 'packages/*/docs/**'
|
||||
- 'packages/*/**/*.ts'
|
||||
- 'packages/*/**/*.js'
|
||||
- '.github/workflows/docs.yml' # this file
|
||||
- '!**/test/**'
|
||||
- '!**/sample-code/**'
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '**/tsconfig*.json'
|
||||
- '**/package*.json'
|
||||
- '**/*mkdocs*.ya?ml'
|
||||
- 'packages/docutils/requirements.txt'
|
||||
- 'packages/*/README.md'
|
||||
- 'packages/*/docs/**'
|
||||
- 'packages/*/**/*.ts'
|
||||
- 'packages/*/**/*.js'
|
||||
- '.github/workflows/docs.yml' # this file
|
||||
- '!**/test/**'
|
||||
- '!**/sample-code/**'
|
||||
|
||||
jobs:
|
||||
docs:
|
||||
name: Docs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Install dependencies (Node.js)
|
||||
uses: bahmutov/npm-install@v1
|
||||
with:
|
||||
useRollingCache: true
|
||||
install-command: npm ci
|
||||
- name: Install dependencies (Python)
|
||||
run: PIP_BREAK_SYSTEM_PACKAGES=1 pip install -r packages/docutils/requirements.txt
|
||||
- name: Configure Git User
|
||||
run: |
|
||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --local user.name "github-actions[bot]"
|
||||
- name: Build Docs
|
||||
run: npm run docs:preview
|
||||
@@ -1,31 +0,0 @@
|
||||
name: License Checks
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
fossa-check:
|
||||
name: Run FOSSA Analysis
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
FOSSA_API_KEY: ${{secrets.FOSSA_API_KEY}}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
ref: master
|
||||
- name: Install dependencies
|
||||
uses: bahmutov/npm-install@v1
|
||||
- name: Install fossa-cli
|
||||
run: |
|
||||
curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install-latest.sh | bash
|
||||
- name: Run FOSSA analysis
|
||||
run: |
|
||||
if [ -n "$FOSSA_API_KEY" ]; then
|
||||
fossa analyze
|
||||
fossa test
|
||||
else
|
||||
echo "License checks did not run. FOSSA_API_KEY is not defined for this fork."
|
||||
fi
|
||||
@@ -1,37 +0,0 @@
|
||||
# Collects GitHub contribution statistics from the Appium organization for the last calendar month
|
||||
# and posts it to Slack
|
||||
|
||||
name: GitHub Contribution Statistics
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# Run on the first day of each month at 09:00 AM UTC
|
||||
- cron: 0 9 1 * *
|
||||
|
||||
jobs:
|
||||
collect-contrib-stats:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Use Node.js LTS
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
- name: Collect GitHub Contribution Stats
|
||||
id: github-stats
|
||||
run: node ./scripts/github-contrib-stats.mjs > github-contrib-stats.json
|
||||
env:
|
||||
# GITHUB_TOKEN is optional - if not provided, uses unauthenticated requests (rate limited)
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Post to Slack
|
||||
uses: slackapi/slack-github-action@v2.1.1
|
||||
with:
|
||||
errors: true
|
||||
webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
webhook-type: incoming-webhook
|
||||
payload-file-path: github-contrib-stats.json
|
||||
@@ -1,15 +0,0 @@
|
||||
name: Disallow "On Hold" PRs
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, labeled, unlabeled, synchronize]
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
label-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check for "On Hold" label
|
||||
uses: egmacke/action-check-label@v4
|
||||
with:
|
||||
label: On Hold
|
||||
state: absent
|
||||
@@ -1,10 +0,0 @@
|
||||
name: Conventional Commits
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, edited, synchronize, reopened]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
uses: appium/appium-workflows/.github/workflows/pr-title.yml@main
|
||||
with:
|
||||
config-preset: angular
|
||||
@@ -1,38 +0,0 @@
|
||||
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
||||
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
|
||||
|
||||
name: Publish docs
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- run: |
|
||||
git config user.name github-actions
|
||||
git config user.email github-actions@github.com
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Install dependencies (Node.js)
|
||||
uses: bahmutov/npm-install@v1
|
||||
with:
|
||||
useRollingCache: true
|
||||
install-command: npm ci
|
||||
- name: Install dependencies (Python)
|
||||
run: PIP_BREAK_SYSTEM_PACKAGES=1 pip install -r packages/docutils/requirements.txt
|
||||
- name: Publish docs
|
||||
run: |
|
||||
cd packages/appium
|
||||
npm run publish:docs
|
||||
@@ -1,30 +0,0 @@
|
||||
name: Validate Renovate Configs
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '.github/workflows/renovate.yml' # this file
|
||||
- '.renovaterc.json'
|
||||
- 'renovate/default.json'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '.github/workflows/renovate.yml' # this file
|
||||
- '.renovaterc.json'
|
||||
- 'renovate/default.json'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
renovate:
|
||||
name: Check Renovate Configs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Validate Renovate Config
|
||||
uses: rinchsan/renovate-config-validator@v0.2.0
|
||||
with:
|
||||
pattern: '{.renovaterc.json,renovate/default.json}'
|
||||
+16
-29
@@ -2,20 +2,21 @@
|
||||
*.swp
|
||||
.DS_Store
|
||||
node_modules
|
||||
package-lock.json
|
||||
*.trace
|
||||
xcuserdata
|
||||
*.sublime-*
|
||||
test/functional/_joined
|
||||
*.iml
|
||||
!examples/java/*.iml
|
||||
!sample-code/java/*.iml
|
||||
*.autosave
|
||||
.idea/
|
||||
!examples/java/.idea/
|
||||
!sample-code/java/.idea/
|
||||
*.log
|
||||
*.t
|
||||
artifacts
|
||||
input
|
||||
./output
|
||||
output
|
||||
lib/devices/android/bootstrap/bin/*
|
||||
lib/devices/android/bootstrap/local.properties
|
||||
lib/devices/android/bootstrap/project.properties
|
||||
@@ -29,40 +30,26 @@ build/
|
||||
.idea
|
||||
*DerivedData
|
||||
__pycache__
|
||||
certificate.cert
|
||||
certificate.key
|
||||
|
||||
# csharp
|
||||
*.pyc
|
||||
*.pdb
|
||||
.vs
|
||||
|
||||
#vscode
|
||||
.history
|
||||
|
||||
old
|
||||
.tern-project
|
||||
coverage
|
||||
docs/mkdocs.yml
|
||||
examples/javascript-wd/node_modules
|
||||
examples/php/vendor
|
||||
examples/php/composer.lock
|
||||
examples/java/out/
|
||||
examples/ruby/Gemfile.lock
|
||||
examples/python/test/results/
|
||||
examples/python/test/input
|
||||
examples/python/.pytest_cache/
|
||||
examples/csharp/test/bin
|
||||
examples/csharp/test/obj
|
||||
examples/csharp/test/bin
|
||||
examples/csharp/packages
|
||||
sample-code/javascript-wd/node_modules
|
||||
sample-code/php/vendor
|
||||
sample-code/php/composer.lock
|
||||
sample-code/java/out/
|
||||
sample-code/ruby/Gemfile.lock
|
||||
sample-code/python/test/results/
|
||||
sample-code/python/test/input
|
||||
sample-code/python/.pytest_cache/
|
||||
sample-code/csharp/test/bin
|
||||
sample-code/csharp/test/obj
|
||||
sample-code/csharp/test/bin
|
||||
sample-code/csharp/packages
|
||||
appium.zip
|
||||
.vscode/settings.json
|
||||
.nyc_output
|
||||
*.lerna_backup
|
||||
**/build-fixtures/**
|
||||
*.tsbuildinfo
|
||||
packages/*/LICENSE
|
||||
\!packages/*/LICENSE
|
||||
local_appium_home
|
||||
*.tgz
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
module.exports = {
|
||||
'*.(js|ts)': ['eslint --fix', 'prettier --write'],
|
||||
'appium-config-schema.js': () => [
|
||||
'npm run --workspace=./packages/schema build',
|
||||
'git add -A packages/schema/lib/appium-config.schema.json',
|
||||
'npm run --workspace=./packages/types build',
|
||||
'git add -A packages/types/lib/appium-config.ts',
|
||||
],
|
||||
'!(package|package-lock)*.json': ['prettier --write'],
|
||||
};
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
// @ts-check
|
||||
|
||||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
require: ['ts-node/register'],
|
||||
// forbids use of .only() in CI
|
||||
forbidOnly: Boolean(process.env.CI),
|
||||
color: true,
|
||||
timeout: '5s',
|
||||
};
|
||||
@@ -1,4 +1,2 @@
|
||||
# Do not disable package-lock. Disabling package-lock also disables npm-shrinkwrap
|
||||
package-lock=true
|
||||
save-exact=true
|
||||
foreground-scripts=true
|
||||
package-lock=true
|
||||
@@ -1,15 +0,0 @@
|
||||
**/node_modules/**
|
||||
**/build/**
|
||||
**/fixtures/**
|
||||
**/*.min.*
|
||||
**/*.md
|
||||
package-lock.json
|
||||
package.json
|
||||
**/.vscode/**
|
||||
**/*.html
|
||||
**/generated/**
|
||||
# generated
|
||||
packages/types/lib/appium-config.ts
|
||||
**/*.hbs
|
||||
|
||||
/.nx/workspace-data
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": ["github>appium/appium//renovate/default"],
|
||||
"schedule": [
|
||||
"after 10pm",
|
||||
"before 5:00am"
|
||||
],
|
||||
"timezone": "America/Vancouver"
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
language: node_js
|
||||
node_js: "10"
|
||||
os: linux
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-4.8
|
||||
- build-essential
|
||||
env:
|
||||
global:
|
||||
- CXX=g++-4.8
|
||||
cache:
|
||||
npm: false
|
||||
jobs:
|
||||
include:
|
||||
- stage: Tests
|
||||
name: node 10
|
||||
before_script: npm outdated || true
|
||||
script: npm run test && npm run e2e-test
|
||||
after_script: npm run coverage
|
||||
- stage:
|
||||
name: node 12
|
||||
before_script: npm outdated || true
|
||||
script: npm run test && npm run e2e-test
|
||||
node_js: "12"
|
||||
- stage:
|
||||
name: test documentation generation
|
||||
script: npm run generate-docs
|
||||
Vendored
-5
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"stateful.runme"
|
||||
]
|
||||
}
|
||||
Vendored
+45
-49
@@ -1,50 +1,46 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"args": [
|
||||
"--log-level=debug"
|
||||
],
|
||||
"console": "integratedTerminal",
|
||||
"cwd": "${workspaceFolder}",
|
||||
"env": {
|
||||
"_FORCE_LOGS": "1"
|
||||
},
|
||||
"internalConsoleOptions": "openOnSessionStart",
|
||||
"name": "Run Appium",
|
||||
"program": "${workspaceFolder}/node_modules/.bin/appium",
|
||||
"request": "launch",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"sourceMaps": true,
|
||||
"type": "node"
|
||||
},
|
||||
{
|
||||
"args": [
|
||||
"--colors",
|
||||
"--no-timeout",
|
||||
"${file}"
|
||||
],
|
||||
"autoAttachChildProcesses": true,
|
||||
"console": "integratedTerminal",
|
||||
"cwd": "${workspaceFolder}",
|
||||
"internalConsoleOptions": "openOnSessionStart",
|
||||
"name": "Test Current File w/ Mocha",
|
||||
"program": "${workspaceFolder}/node_modules/.bin/mocha",
|
||||
"request": "launch",
|
||||
"runtimeArgs": [
|
||||
"--require",
|
||||
"ts-node/register"
|
||||
],
|
||||
"skipFiles": [
|
||||
"<node_internals>/**",
|
||||
"**/node_modules/mocha/**",
|
||||
"**/node_modules/lodash/**",
|
||||
"**/node_modules/ts-node/**"
|
||||
],
|
||||
"sourceMaps": true,
|
||||
"type": "node"
|
||||
}
|
||||
],
|
||||
"version": "0.2.0"
|
||||
}
|
||||
"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}"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
-19
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "dev",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$tsc-watch"
|
||||
],
|
||||
"label": "npm: dev",
|
||||
"detail": "npm run dev",
|
||||
"isBackground": true
|
||||
}
|
||||
]
|
||||
}
|
||||
+3508
-38
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
### What is this code of conduct for?
|
||||
|
||||
Appium is a piece of technology, but **the core of the Appium community is the people in it**. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, gender identity and expression, sexual orientation, ability, physical appearance, body size, race, age, socioeconomic status, religion (or lack thereof), or other marginalized aspect of community members. We expect all members of the Appium community to abide by this Code of Conduct whenever interacting in Appium venues (pull requests, GitHub issues, 1-1 or group chat, meetups, conferences, etc...)
|
||||
Appium is a piece of technology, but **the core of the Appium community is the people in it**. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, gender identity and expression, sexual orientation, ability, physical appearance, body size, race, age, socioeconomic status, religion (or lack thereof), or other marginalized aspect of comunity members. We expect all members of the Appium community to abide by this Code of Conduct whenever interacting in Appium venues (pull requests, GitHub issues, 1-1 or group chat, meetups, conferences, etc...)
|
||||
|
||||
### Examples of inappropriate behavior
|
||||
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Contributing to Appium
|
||||
|
||||
There are a lot of different ways to contribute to Appium. See below for
|
||||
everything you can do and the processes to follow for each contribution method.
|
||||
Note that no matter how you contribute, your participation is governed by our
|
||||
[Code of Conduct](CONDUCT.md).
|
||||
|
||||
### Make changes to the Appium code or docs
|
||||
|
||||
Fork the project, make a change, and send a pull request! Please have a look at
|
||||
our [Style Guide](/docs/en/contributing-to-appium/style-guide.md) before
|
||||
getting to work. Please make sure the unit and functional tests pass before
|
||||
sending a pull request; for more information on how to run tests, keep reading!
|
||||
|
||||
Make sure you read and follow the setup instructions in the README first. And note
|
||||
that all participation in the Appium community (including code submissions) is
|
||||
governed by our [Code of Conduct](CONDUCT.md). Then, have a look at our
|
||||
[running from source doc](/docs/en/contributing-to-appium/appium-from-source.md) for more
|
||||
information on how to get set up to run tests and start slinging code.
|
||||
|
||||
You will probably also want to have a look at this more in-depth [Developer's
|
||||
Overview](/docs/en/contributing-to-appium/developers-overview.md) of the Appium
|
||||
project, how Appium is architected, how to make changes to modules, and so on.
|
||||
|
||||
Finally, before we accept your code, you will need to have signed our
|
||||
[Contributor License
|
||||
Agreement](https://cla.js.foundation/appium/appium).
|
||||
|
||||
### Become an Appium Triager
|
||||
|
||||
You can help us manage our issue tracker! All you need is enough familiarity
|
||||
with Appium to try and reproduce bugs. We triage issues by having conversations
|
||||
with the issue creator and then either closing the issue or moving it into the
|
||||
[Bugs](https://github.com/appium/appium/milestones/Bugs) or
|
||||
[Features](https://github.com/appium/appium/milestones/Features) milestone. We
|
||||
use these buckets as the backlogs for our upcoming releases.
|
||||
|
||||
We use this "algorithm" for triaging issues, which anyone can jump in and follow:
|
||||
|
||||
1. If issue is a feature request, discuss amongst Appium devs.
|
||||
* If we decide to build it, add to the Features milestone.
|
||||
* If we decide not to build it, just close.
|
||||
2. If issue is a bug report, attempt to verify
|
||||
* If it's a duplicate, close with link to bug already reported.
|
||||
* If it ultimately can't be verified, close until we have enough information to verify (e.g., in most cases we need a full set of Appium logs to help diagnose an issue).
|
||||
* If the user hasn't provided enough information, keep asking for enough information to verify.
|
||||
* If it's a verified new bug, add it to the Bugs milestone.
|
||||
* If we have been waiting for a reply from the user for over 3 weeks, close.
|
||||
|
||||
If you're interested in joining our triage rotation, contact
|
||||
[@jlipps](https://github.com/jlipps) or
|
||||
[@imurchie](https://github.com/imurchie).
|
||||
|
||||
### Help out on our forums
|
||||
|
||||
We can always use help on our forums at
|
||||
[discuss.appium.io](https://discuss.appium.io)! Hop on over and see if there
|
||||
are any questions that you can answer.
|
||||
|
||||
### Submit bug reports or feature requests
|
||||
|
||||
Just use the GitHub issue tracker to submit your bug reports and feature
|
||||
requests. If you are submitting a bug report, please follow the [issue template](https://github.com/appium/appium/issues/new).
|
||||
+41
-126
@@ -15,8 +15,12 @@ The project is officially led by a Technical Committee (TC), currently
|
||||
consisting of:
|
||||
|
||||
* [@jlipps](https://github.com/jlipps)
|
||||
* [@bootstraponline](https://github.com/bootstraponline)
|
||||
* [@penguinho](https://github.com/penguinho)
|
||||
* [@dandoveralba](https://github.com/dandoveralba)
|
||||
* [@mykola-mokhnach](https://github.com/mykola-mokhnach)
|
||||
* [@eglitise](https://github.com/eglitise)
|
||||
* [@imurchie](https://github.com/imurchie)
|
||||
* [@TikhomirovSergey](https://github.com/TikhomirovSergey)
|
||||
* [@KazuCocoa](https://github.com/KazuCocoa)
|
||||
|
||||
They all represent different companies and different types of contribution to
|
||||
@@ -27,7 +31,7 @@ changes to the project's governance processes.
|
||||
|
||||
* Membership in the TC is granted by unanimous vote of current TC members.
|
||||
* TC members can step down at any time.
|
||||
* No more than 1/3 (or 2, whichever is higher) of TC members may belong to the same company.
|
||||
* No more than 1/3 of TC members may belong to the same company.
|
||||
* Changes to project governance require unanimous vote of the TC.
|
||||
|
||||
### Project Committers
|
||||
@@ -46,104 +50,47 @@ and so on.
|
||||
* Any committer can decide to close a PR or issue if they determine the change doesn't suit the project.
|
||||
* Appium has a large ecosystem of repositories. Some are 'core' in the sense of being central subpackages with a lot of traffic like `appium/appium` or `appium/appium-ios-driver`. Others are 'peripheral' in the sense of receiving few changes, being maintained by 1 person or no one, etc..., like `appium/ruby_lib` or `appium/appium_thor` For 'core' repos, committers should not merge their own code straightaway. Like all contributors they should open a PR and get a +1 from another committer. For 'peripheral' repos for which they are the sole maintainer or for which they have a good understanding, it is obtuse to insist on another contributor's +1 and this rule should be relaxed in that case. In sum: use good judgment and don't ram code through without a review when you can help it.
|
||||
|
||||
The current committers are (along with their primary areas(s) of ownership or maintenance):
|
||||
The current committers are (in addition to the TC members above):
|
||||
|
||||
* [@dan-maor](https://github.com/Dan-Maor) - XCUITest driver and iOS internals
|
||||
* [@dor-bl](https://github.com/Dor-bl) - DotNet client
|
||||
* [@eglitise](https://github.com/eglitise) - Appium server, Inspector
|
||||
* [@jlipps](https://github.com/jlipps) - Appium server, Inspector
|
||||
* [@kazucocoa](https://github.com/KazuCocoa) - all Appium projects
|
||||
* [@laolubenson](https://github.com/laolubenson) - DotNet client
|
||||
* [@mwakizaka](https://github.com/mwakizaka) - XCUITest driver
|
||||
* [@mykola-mokhnach](https://github.com/mykola-mokhnach) - all Appium projects
|
||||
* [@rerorero](https://github.com/rerorero) - XCUITest/UIA2 driver
|
||||
* [@saikrishna321](https://github.com/saikrishna321) - Java client
|
||||
* [@srinivasantarget](https://github.com/SrinivasanTarget) - Java client
|
||||
* [@tomriddly](https://github.com/tomriddly) - appium-ios-device
|
||||
* [@valfirst](https://github.com/valfirst) - Java client
|
||||
* [@hugs](https://github.com/hugs)
|
||||
* [@filmaj](https://github.com/filmaj)
|
||||
* [@aluedeke](https://github.com/aluedeke)
|
||||
* [@sebv](https://github.com/sebv)
|
||||
* [@vgrigoruk](https://github.com/vgrigoruk)
|
||||
* [@DylanLacey](https://github.com/DylanLacey)
|
||||
* [@maudineormsby](https://github.com/maudineormsby)
|
||||
* [@titusfortner](https://github.com/titusfortner)
|
||||
* [@bayandin](https://github.com/bayandin)
|
||||
* [@jdeff](https://github.com/jdeff)
|
||||
* [@moizjv](https://github.com/moizjv)
|
||||
* [@gempesaw](https://github.com/gempesaw)
|
||||
* [@Jonahss](https://github.com/Jonahss)
|
||||
* [@JamieEdge](https://github.com/JamieEdge)
|
||||
* [@saikrishna321](https://github.com/saikrishna321)
|
||||
* [@sravanmedarapu](https://github.com/sravanmedarapu)
|
||||
* [@peepa](https://github.com/peepa)
|
||||
* [@scottdixon](https://github.com/scottdixon)
|
||||
* [@drpy](https://github.com/drpy)
|
||||
* [@Astro03](https://github.com/Astro03)
|
||||
* [@sbonebrake](https://github.com/sbonebrake)
|
||||
* [@SrinivasanTarget](https://github.com/SrinivasanTarget)
|
||||
* [@triager](https://github.com/triager)
|
||||
* [@ddkjin](https://github.com/ddkjin)
|
||||
* [@stuartbrussell-intuit](https://github.com/stuartbrussell-intuit)
|
||||
* [@vmaxim](https://github.com/vmaxim)
|
||||
|
||||
See [Emeritus Contributors](#emeritus-contributors) below for a list of people who formerly made
|
||||
significant contributions to the project but are no longer actively committing.
|
||||
### Contributors
|
||||
|
||||
### Other Contributors
|
||||
|
||||
Other, less formal, kinds of contribution are outlined in our [Contributing Guide](https://appium.io/docs/en/latest/contributing/).
|
||||
We also very much appreciate those who spend their valuable time assisting with the [Appium forums](https://discuss.appium.io).
|
||||
Current high-level forum contributors and mods include:
|
||||
|
||||
* [aleksei](https://discuss.appium.io/u/aleksei/summary)
|
||||
* [wreed](https://discuss.appium.io/u/wreed/summary)
|
||||
Other, less formal, kinds of contribution are outlined in our
|
||||
[CONTRIBUTING](/CONTRIBUTING.md) doc.
|
||||
|
||||
### Sponsorship
|
||||
|
||||
The Appium project welcomes the sponsorship of individuals and organizations. There are two types
|
||||
of sponsorship: those related to contributions of Appium maintenance and leadership, and those
|
||||
related to contributions of funds. Both are extremely important to the ongoing health of the
|
||||
project. Financial sponsorship is mediated through our [OpenCollective page](https://opencollective.com/appium).
|
||||
Sponsorship tiers and benefits are described below:
|
||||
|
||||
- **Development Partners**: The primary need of any open source project is for sustained maintenance and contributorship. Companies that officially sponsor such development with dedicated employee time are recognized as Development Partners, and receive the same benefits as the highest tier of financial sponsorship. To be considered a Development Partner, a company must devote at least 50% of a full-time employee's time to Appium maintenance. This means that the contributors designated by the company must have been appointed as "committers" in good standing of one or more core Appium repositories. (See above for a description of how to become a committer).
|
||||
- **Strategic Partners**: Representing the highest tier of ongoing financial support for the project, Strategic Partners are what make our compensation scheme for contributors possible, and we thank them for their significant investment into the project! More than financial contribution, Strategic Partners help elevate Appium's position in the industry through marketing and evangelism efforts, and partner with the Appium team to help make Appium better. Along with the Development Partners, Strategic Partners have their logos displayed prominently on our website, and have the ability to link to their Appium-related products in a few relevant places in our documentation.
|
||||
- **Gold, Silver, and Bronze Sponsors**: these sponsorship levels correspond to different amounts of recurring financial contribution that generously support our contributor compensation scheme. Sponsors at these levels also have the opportunity to display their logo on our website.
|
||||
- **Backers**: individuals who benefit from the Appium project can also donate on a one-time or recurring basis, at any amount, and will be recognized as Backers for their contribution!
|
||||
|
||||
To become a sponsor at one of these levels, follow the process indicated at the [OpenCollective
|
||||
page](https://opencollective.com/appium).
|
||||
|
||||
### Compensation Scheme
|
||||
|
||||
With funds received through sponsorship, the Appium project wants to incentivize contributions of
|
||||
code, documentation efforts, maintenance, and project leadership. We have developed a scheme
|
||||
(inspired by one developed at the [WebdriverIO](https://github.com/webdriverio/webdriverio)
|
||||
project) for disbursing funds on a monthly basis to those who contribute to the project, as well as
|
||||
some other "upstream" open source projects.
|
||||
|
||||
Each month, 15% of sponsorship funds received will be donated to upstream projects, based on the
|
||||
discretion of the current TC. At this point, no attempt will be made to formalize quantitative
|
||||
notions of relevance. If you manage a project upstream of Appium and would like to be considered as
|
||||
part of this donation group, give us a shout!
|
||||
|
||||
Of the remaining 85% of sponsorship funds, 70% (roughly 60% of the original total) will go to
|
||||
project Committers (i.e., those in a role of maintenance), and 30% (roughly 25% of the original
|
||||
total) will go to Contributors (i.e., those making one-off or periodic contributions). The way that
|
||||
Committers and Contributors are paid for their efforts differs.
|
||||
|
||||
For Committers, each Committer will keep a monthly time sheet of hours contributed to the project.
|
||||
At the end of each month, the hours tracked from all Committers will be totalled, and then the
|
||||
Committer-allocated funds will be disbursed (via OpenCollective) on a pro rata basis. Within this
|
||||
scheme, Committers agree not to submit hours worked as part of their employment with a Development
|
||||
Partner (since this is part of the "sponsorship" contribution of the Development Partner).
|
||||
|
||||
For Contributors, when they make contributions which are successfully merged into the project,
|
||||
a Committer can discretionarily assign a "value tier" to the contribution. The "value tiers" and
|
||||
corresponding payouts are as follows:
|
||||
|
||||
- XS: a trivial change (e.g. a typo change or applying of an automatically suggested security
|
||||
patch). \$0.
|
||||
- S: a small but useful change. \$25.
|
||||
- M: a medium-small or slightly more complex change. \$50.
|
||||
- L: a very valuable or sizable change. \$100.
|
||||
- XL: a massive change or set of changes. \$500.
|
||||
|
||||
At the end of each month, Committers will total up the number of changes receiving potential
|
||||
payout. If the total amount of funds allocated for Contributor payout exceeds the total amount to
|
||||
be paid, then each Contributor will receive an OpenCollective link to claim their funds. If not
|
||||
enough funds exist to cover all payouts, then the payout amounts will be scaled down in a pro rata
|
||||
fashion.
|
||||
|
||||
The scope for Committer or Contributor payouts is work completed within any "core" Appium
|
||||
repository (i.e., those officially maintained by the Appium team, residing within the Appium
|
||||
organization on GitHub, under `https://github.com/appium`).
|
||||
|
||||
Some disclaimers: Payments will happen exclusively via OpenCollective. Recipients of funds are
|
||||
responsible for maintaining their OpenCollective account in a fashion where funds can be disbursed,
|
||||
and are responsible for any and all tax, financial, or legal consequences of receiving money in
|
||||
this way. Receipt of funds from this scheme holds the Appium project and the OpenJS Foundation free
|
||||
of any claim or obligation. While this document exists to clearly and publicly lay out the terms
|
||||
under which payments are generally made, the TC retains the right to grant or withhold funding on
|
||||
a discretionary of special basis. Basically, this scheme is run at the project's discretion, and is
|
||||
not a public service. Making contributions to the project under this scheme does not obligate the
|
||||
project to pay you for such work, or otherwise compensate you in any way.
|
||||
The Appium project welcomes sponsorship of various organizations. Specific
|
||||
details are not yet available but in general we will accept monetary donations,
|
||||
contribution of code, contribution of dedicated committers, or donations of
|
||||
other goods or service (internet hosting, etc...). To begin the conversation,
|
||||
reach out to one of the TC members.
|
||||
|
||||
### Raising Issues Related to Governance
|
||||
|
||||
@@ -151,35 +98,3 @@ This governance model necessarily leaves many situations unspecified. If
|
||||
questions arise as to how a given situation should proceed according to the
|
||||
overall goals of the project, the best thing to do is to open a GitHub issue
|
||||
and ping the TC members.
|
||||
|
||||
### Emeritus Contributors
|
||||
|
||||
* [@aluedeke](https://github.com/aluedeke)
|
||||
* [@astro03](https://github.com/Astro03)
|
||||
* [@bayandin](https://github.com/bayandin)
|
||||
* [@boneskull](https://github.com/boneskull)
|
||||
* [@bootstraponline](https://github.com/bootstraponline)
|
||||
* [@dandoveralba](https://github.com/dandoveralba)
|
||||
* [@ddkjin](https://github.com/ddkjin)
|
||||
* [@drpy](https://github.com/drpy)
|
||||
* [@dylanLacey](https://github.com/DylanLacey)
|
||||
* [@filmaj](https://github.com/filmaj)
|
||||
* [@gempesaw](https://github.com/gempesaw)
|
||||
* [@hugs](https://github.com/hugs)
|
||||
* [@imurchie](https://github.com/imurchie)
|
||||
* [@jamieEdge](https://github.com/JamieEdge)
|
||||
* [@jdeff](https://github.com/jdeff)
|
||||
* [@jonahss](https://github.com/Jonahss)
|
||||
* [@maudineormsby](https://github.com/maudineormsby)
|
||||
* [@moizjv](https://github.com/moizjv)
|
||||
* [@peepa](https://github.com/peepa)
|
||||
* [@penguinho](https://github.com/penguinho)
|
||||
* [@sbonebrake](https://github.com/sbonebrake)
|
||||
* [@scottdixon](https://github.com/scottdixon)
|
||||
* [@sebv](https://github.com/sebv)
|
||||
* [@sravanmedarapu](https://github.com/sravanmedarapu)
|
||||
* [@stuartbrussell-intuit](https://github.com/stuartbrussell-intuit)
|
||||
* [@tikhomirovSergey](https://github.com/TikhomirovSergey)
|
||||
* [@titusfortner](https://github.com/titusfortner)
|
||||
* [@vgrigoruk](https://github.com/vgrigoruk)
|
||||
* [@vmaxim](https://github.com/vmaxim)
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright OpenJS Foundation and other contributors, https://openjsf.org/
|
||||
Copyright JS Foundation and other contributors, https://js.foundation
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,221 +1,121 @@
|
||||
<p align="center">
|
||||
<a href="https://appium.io/">
|
||||
<img alt="Appium" src="https://raw.githubusercontent.com/appium/appium/master/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png" width="500">
|
||||
</a>
|
||||
</p>
|
||||
<p align="center">
|
||||
Cross-platform test automation for native, hybrid, mobile web and desktop apps.
|
||||
</p>
|
||||
|
||||
<div align="center">
|
||||
## Appium
|
||||
|
||||
[](https://npmjs.org/package/appium)
|
||||
[](https://david-dm.org/appium/appium)
|
||||
[](https://david-dm.org/appium/appium#info=devDependencies)
|
||||
|
||||
[](https://npmjs.org/package/appium)
|
||||
|
||||
[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium?ref=badge_shield)
|
||||
[](https://github.com/vshymanskyy/StandWithUkraine/)
|
||||
[](https://www.unrwa.org/)
|
||||
|
||||
</div>
|
||||
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
|
||||
started](/docs/en/about-appium/getting-started.md) doc.
|
||||
|
||||
<p align="center"><b>
|
||||
<a href="https://appium.io">Documentation</a> |
|
||||
<a href="https://appium.io/docs/en/latest/intro/">Get Started</a> |
|
||||
<a href="https://appium.io/docs/en/latest/ecosystem/">Ecosystem</a> |
|
||||
<a href="https://github.com/appium/appium/blob/master/packages/appium/CHANGELOG.md">Changelog</a> |
|
||||
<a href="https://appium.io/docs/en/latest/contributing/">Contributing Guide</a> |
|
||||
<a href="https://discuss.appium.io">Discussion Forum</a>
|
||||
</b></p>
|
||||
### Supported Platforms
|
||||
|
||||
***
|
||||
Appium supports app automation across a variety of platforms, like iOS,
|
||||
Android, and Windows. Each platform is supported by one or more "drivers",
|
||||
which know how to automate that particular platform. Choose a driver below for
|
||||
specific information about how that driver works and how to set it up:
|
||||
|
||||
Appium is an open-source automation framework that provides
|
||||
[WebDriver](https://www.w3.org/TR/webdriver/)-based automation possibilities for a wide range of
|
||||
different mobile, desktop and IoT platforms. Appium is modular and extensible, and supports multiple
|
||||
programming languages, which means there is an entire ecosystem of related software:
|
||||
* [__Drivers__](#drivers) add support for automating specific platforms
|
||||
* [__Clients__](#clients) allow writing Appium tests in your programming language of choice
|
||||
* [__Plugins__](#plugins) allow to further extend Appium functionality
|
||||
* iOS
|
||||
* The [XCUITest Driver](/docs/en/drivers/ios-xcuitest.md)
|
||||
* (DEPRECATED) The [UIAutomation Driver](/docs/en/drivers/ios-uiautomation.md)
|
||||
* Android
|
||||
* The [Espresso Driver](/docs/en/drivers/android-espresso.md)
|
||||
* The [UiAutomator2 Driver](/docs/en/drivers/android-uiautomator2.md)
|
||||
* (DEPRECATED) The [UiAutomator Driver](/docs/en/drivers/android-uiautomator.md)
|
||||
* The [Windows Driver](/docs/en/drivers/windows.md) (for Windows Desktop apps)
|
||||
* The [Mac Driver](/docs/en/drivers/mac.md) (for Mac Desktop apps)
|
||||
|
||||
## Upgrading From Older Versions
|
||||
### Why Appium?
|
||||
|
||||
The Appium team only provides support for the most recent version of Appium. If you wish to upgrade from
|
||||
an older major Appium version, please refer to the migration guides:
|
||||
|
||||
* [Appium v2 to v3](https://appium.io/docs/en/latest/guides/migrating-2-to-3/)
|
||||
* [Appium v1 to v2](https://appium.io/docs/en/latest/guides/migrating-1-to-2/)
|
||||
|
||||
## Installation
|
||||
|
||||
Appium can be installed using `npm` (other package managers are not currently supported). Please
|
||||
check the [installation docs](http://appium.io/docs/en/latest/quickstart/install/) for the
|
||||
system requirements and further information.
|
||||
|
||||
If upgrading from Appium 1, make sure Appium 1 is fully uninstalled (`npm uninstall -g appium`).
|
||||
Unexpected errors might appear if this has not been done.
|
||||
|
||||
```bash
|
||||
npm i -g appium
|
||||
```
|
||||
|
||||
Note that this will only install the core Appium server, which cannot automate anything on its own.
|
||||
Please install [drivers](#drivers) for your target platforms in order to automate them.
|
||||
|
||||
## Drivers
|
||||
|
||||
Appium supports app automation across a variety of platforms, like iOS, Android, macOS, Windows,
|
||||
and more. Each platform is supported by one or more "drivers", which know how to automate that
|
||||
particular platform. You can find a full list of officially-supported and third-party drivers in
|
||||
[Appium Ecosystem's Drivers page](http://appium.io/docs/en/latest/ecosystem/drivers/).
|
||||
|
||||
Driver management is done using [Appium's Extension command-line interface](http://appium.io/docs/en/latest/cli/extensions/):
|
||||
|
||||
```bash
|
||||
# Install an official driver from npm (see documentation for a list of such drivers)
|
||||
appium driver install <driver-name>
|
||||
# Install any driver from npm
|
||||
appium driver install --source=npm <driver-name>
|
||||
# See documentation for installation from other sources
|
||||
|
||||
# List already installed drivers
|
||||
appium driver list --installed
|
||||
# Update a driver (it must be already installed)
|
||||
# This will NOT update the major version, in order to prevent breaking changes
|
||||
appium driver update <driver-name>
|
||||
# Update a driver to the most recent version (may include breaking changes)
|
||||
appium driver update <driver-name> --unsafe
|
||||
# Uninstall a driver (it won't last forever, will it?)
|
||||
appium driver uninstall <driver-name>
|
||||
```
|
||||
|
||||
## Clients
|
||||
|
||||
Client libraries enable writing Appium tests in different programming languages. There are
|
||||
officially-supported clients for Java, Python, Ruby, and .NET C#, as well as third-party clients
|
||||
for other languages. You can find a full list of clients in
|
||||
[Appium Ecosystem's Clients page](http://appium.io/docs/en/latest/ecosystem/clients/).
|
||||
|
||||
## Plugins
|
||||
|
||||
Plugins allow you to extend server functionality without changing the server code. The main
|
||||
difference between drivers and plugins is that the latter must be explicitly enabled on
|
||||
Appium server startup (all installed drivers are enabled by default):
|
||||
|
||||
```bash
|
||||
appium --use-plugins=<plugin-name>
|
||||
```
|
||||
|
||||
You can find a full list of officially-supported and third-party plugins in
|
||||
[Appium Ecosystem's Plugins page](http://appium.io/docs/en/latest/ecosystem/plugins/).
|
||||
|
||||
Similarly to drivers, plugin management is also done using
|
||||
[Appium's Extension command-line interface](http://appium.io/docs/en/latest/cli/extensions/):
|
||||
|
||||
```bash
|
||||
# Install an official plugin from npm (see documentation for a list of such plugins)
|
||||
appium plugin install <plugin-name>
|
||||
# Install any plugin from npm
|
||||
appium plugin install --source=npm <plugin-name>
|
||||
# See documentation for installation from other sources
|
||||
|
||||
# List already installed plugins
|
||||
appium plugin list --installed
|
||||
# Update a plugin (it must be already installed)
|
||||
# This will NOT update the major version, in order to prevent breaking changes
|
||||
appium plugin update <plugin-name>
|
||||
# Update a plugin to the most recent version (may include breaking changes)
|
||||
appium plugin update <plugin-name> --unsafe
|
||||
# Uninstall a plugin
|
||||
appium plugin uninstall <plugin-name>
|
||||
```
|
||||
|
||||
## Server Command Line Interface
|
||||
|
||||
In order to start sending commands to the Appium server, it must be running on the URL and port
|
||||
where your client library expects it to listen. [Appium's command-line interface](http://appium.io/docs/en/latest/cli/server/)
|
||||
is used to launch and configure the server:
|
||||
|
||||
```bash
|
||||
# Start the server on the default host (0.0.0.0) and port (4723)
|
||||
appium server
|
||||
# You can also omit the 'server' subcommand
|
||||
appium
|
||||
# Start the server on the given host, port and use a custom base path prefix (the default prefix is '/')
|
||||
appium --address 127.0.0.1 --port 9000 --base-path /wd/hub
|
||||
```
|
||||
|
||||
Appium supports execution of parallel server processes, as well as parallel driver sessions within a
|
||||
single server process. Refer the corresponding driver documentations regarding which mode is optimal
|
||||
for the particular driver or whether it supports parallel sessions.
|
||||
|
||||
## Why Appium?
|
||||
|
||||
1. You usually don't have to recompile your app or modify it in any way, due to the use of standard
|
||||
automation APIs on all platforms.
|
||||
2. You can write tests with your favorite dev tools using any WebDriver-compatible language such as
|
||||
Java, Python, Ruby and C#. There are also third party client implementations for other languages.
|
||||
1. You don't have to recompile your app or modify it in any way, due
|
||||
to the use of standard automation APIs on all platforms.
|
||||
2. You can write tests with your favorite dev tools using any
|
||||
[WebDriver](https://w3c.github.io/webdriver/webdriver-spec.html)-compatible
|
||||
language such as Java, Objective-C, JavaScript (Node), PHP, Python, Ruby,
|
||||
C#, Clojure, or Perl with the Selenium WebDriver API and [language-specific
|
||||
client libraries](/docs/en/about-appium/appium-clients.md).
|
||||
3. You can use any testing framework.
|
||||
4. Some drivers like `xcuitest` and `uiautomator2` have built-in mobile web and hybrid app support.
|
||||
Within the same script, you can switch seamlessly between native app automation and webview
|
||||
automation, all using the WebDriver model that's already the standard for web automation.
|
||||
5. You can run your automated tests locally and in a cloud. There are multiple cloud providers that
|
||||
support various Appium drivers (mostly targeting iOS and Android mobile automation).
|
||||
6. [Appium Inspector](https://github.com/appium/appium-inspector) can be used to visually inspect
|
||||
the page source of applications across different platforms, facilitating easier test development.
|
||||
4. Appium has built-in mobile web and hybrid app support. Within the same
|
||||
script, you can switch seamlessly between native app automation and webview
|
||||
automation, all using the WebDriver model that's already the standard for
|
||||
web automation.
|
||||
|
||||
Investing in the [WebDriver](https://w3c.github.io/webdriver/webdriver-spec.html) protocol means 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.
|
||||
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
|
||||
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 automation, for mobile and beyond!
|
||||
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
|
||||
automation, for mobile and beyond. Finally!
|
||||
|
||||
If you are looking for a more comprehensive description of what this is all about, please read our
|
||||
documentation on [How Does Appium Work?](https://appium.io/docs/en/latest/intro/appium/).
|
||||
If you're new to Appium or want a more comprehensive description of what this is all
|
||||
about, please read our [Introduction to Appium
|
||||
Concepts](/docs/en/about-appium/intro.md).
|
||||
|
||||
## Sponsors
|
||||
### Requirements
|
||||
|
||||
Appium has a [Sponsorship Program](GOVERNANCE.md#sponsorship)! If you or your company uses Appium
|
||||
and wants to give back financially to the project, we use these funds to [encourage development and
|
||||
contributions](GOVERNANCE.md#compensation-scheme), as well as support other open source projects we
|
||||
rely on. [Become a sponsor](https://opencollective.com/appium) via our OpenCollective page.
|
||||
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+.
|
||||
|
||||
### Development and Strategic Partners
|
||||
### Get Started
|
||||
|
||||
Appium is incredibly grateful to our Development and Strategic Partners for their sustained
|
||||
contribution of project development and leadership!
|
||||
Check out our [Getting Started](/docs/en/about-appium/getting-started.md) guide
|
||||
to get going with Appium.
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
|
||||
<picture>
|
||||
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png" media="(prefers-color-scheme: dark)"/>
|
||||
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png" media="(prefers-color-scheme: light)"/>
|
||||
<img src="packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png" width="300" alt="Browserstack"/>
|
||||
</picture>
|
||||
</a>
|
||||
</p>
|
||||
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)!
|
||||
|
||||
<p align="center">
|
||||
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
|
||||
<picture>
|
||||
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png" media="(prefers-color-scheme: dark)"/>
|
||||
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png" media="(prefers-color-scheme: light)"/>
|
||||
<img src="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png" width="300" alt="LambdaTest"/>
|
||||
</picture>
|
||||
</a>
|
||||
</p>
|
||||
### Documentation
|
||||
|
||||
### Other Sponsors
|
||||
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.
|
||||
|
||||
A full list of sponsors is available at our [Sponsors page](https://appium.io/docs/en/latest/sponsors/).
|
||||
[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.
|
||||
|
||||
## License
|
||||
Once the PR has been merged, the latest documentation will be in [appium.io](http://appium.io)
|
||||
|
||||
[Apache-2.0](./LICENSE)
|
||||
### Contributing
|
||||
|
||||
Please take a look at our [contribution documentation](CONTRIBUTING.md)
|
||||
for instructions on how to build, test, and run Appium from the source.
|
||||
|
||||
### Roadmap
|
||||
|
||||
Interested in where Appium is heading in the future? Check out the [Roadmap](ROADMAP.md)
|
||||
|
||||
### Project History, Credits & Inspiration
|
||||
|
||||
* [History](http://appium.io/history)
|
||||
* [Credits](/docs/en/contributing-to-appium/credits.md)
|
||||
|
||||
### User Forums
|
||||
|
||||
Announcements and debates often take place on the [Discussion
|
||||
Group](https://discuss.appium.io), be sure to sign up!
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
We put together a [troubleshooting
|
||||
guide](/docs/en/writing-running-appium/other/troubleshooting.md). Please have a look
|
||||
here first if you run into any problems. It contains instructions for checking
|
||||
a lot of common errors and how to get in touch with the community if you're
|
||||
stumped.
|
||||
|
||||
### License
|
||||
|
||||
[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fappium%2Fappium?ref=badge_large)
|
||||
|
||||
`@appium/logger` package is under [ISC](./packages/logger/LICENSE) License.
|
||||
|
||||
+54
-25
@@ -1,30 +1,59 @@
|
||||
# Roadmap
|
||||
Appium Roadmap
|
||||
---------------
|
||||
|
||||
This is not a traditional roadmap. We don't have a typical product team with a typical product
|
||||
manager. The fact that the items below exist on a roadmap is no indication that we will ever have
|
||||
the opportunity to work on them. Instead this is more like a wishlist of outcomes that the project
|
||||
thinks would be valuable. If and when we get additional contributions of development work, this is
|
||||
a set of items that would be great for someone to work on! Ideally, interested devs would find
|
||||
something on this list and own it from start to finish! Let anyone on the project know if you're
|
||||
interested and we can help get you going.
|
||||
This document is designed to be a living record of the current and projected
|
||||
priorities for the Appium project. It is, of course, always subject to change
|
||||
and exists solely to give the community an idea of where we're going. The
|
||||
roadmap is set by the Appium core team. If you have feature suggestions for
|
||||
Appium, please submit a [GitHub issue](https://github.com/appium/appium/issues)
|
||||
and, if of sufficient size and approved by the team, it will be added here. If
|
||||
you have concerns about the roadmap, you can e-mail the Appium devs at
|
||||
`appium-developers@googlegroups.com` or raise a GitHub issue. Note that
|
||||
bugfixes and miscellaneous features are not considered "roadmap projects", and
|
||||
will be addressed in the due course of normal Appium development. This page
|
||||
exists to outline large-scale future plans for Appium.
|
||||
|
||||
### Core projects
|
||||
- **WebDriver BiDi support in the Appium server**: the WebDriver BiDi spec is underway, which details a different method for communicating with drivers. We should implement handling for these methods in our server so that Appium drivers can take advantage of the BiDi spec without additional work on their part.
|
||||
- **Redevelop automatically generated command docs**: due to changing TypeDoc support and the departure of one of our team, we were forced to remove our TypeDoc-based automatic docs generation tool. It would be nice to bring this back in a more maintainable form!
|
||||
## Current Roadmap Projects
|
||||
|
||||
### Driver/platform-specific projects
|
||||
- **Better maintenance for our Android drivers**: we're looking for Android specialists to help maintain our Android drivers (UiAutomator2 and Espresso)
|
||||
- **Better maintenance for our iOS driver**: we're looking for iOS specialists to help maintain our XCUITest driver
|
||||
- **Better maintenance for [appium-ios-device](https://github.com/appium/appium-ios-device)**: this project is using outdated approaches and libraries. If it could be improved it would have a big impact on the performance of the XCUITest driver
|
||||
| Project | Description | ETD | Projected Appium Release |
|
||||
|---------|-------------|-----|--------------------------|
|
||||
|[Appium CI + Metrics Improvements](https://github.com/appium/appium/issues/7168)|We have CI servers running via Cloudbees that we don't understand and which break. Let's document and own them so they work reliably. Also, let's implement gathering various metrics about driver performance so we can track this over time and ensure we're not releasing a driver which has decreased in performance or reliability.|Q2 2017|N/A|
|
||||
|
||||
### Client library projects
|
||||
- **Selenium compatibility client updates**: we'd like to rearchitect our flagship Appium clients to extend rather than wrap Selenium clients, reducing the overall surface area of the Appium clients and making them work more closely with existing Selenium client functionality.
|
||||
## Upcoming Projects (in rough order of priority)
|
||||
|
||||
### Appium Inspector projects
|
||||
- **Full support for web inspection**: currently the Appium Inspector has poor to no support for inspecing web pages (either mobile browsers or web content embedded in webviews). It's a common requirement to inspect web elements as part of writing Appium tests, and at the present time users are required to leave the Inspector and open up a browser's devtools.
|
||||
- **Record/Playback**: we have a basic record-to-code feature already. It would be nice to be able to save recorded steps and play them back with a little player/editor.
|
||||
- **Support for more platforms**: currently there is a fair bit of specialized handling for iOS and Android in the Appium inspector. Other platforms either work poorly or not at all with the Inspector. It would be great to establish a way for drivers to report all the information about how they work to the Inspector, so it can support any platform without needing special-cased code for it.
|
||||
- **Locator analysis and comparison**: it would be nice for users to get more information about the relative suitability of using different locators to find elements, as poor locator performance is a leading cause of Appium test instability.
|
||||
- **Dark theme**: for true hackers!
|
||||
- **Export/import of saved gestures**: it's currently not possible to port your saved gestures to other instances of the Inspector (i.e., to share with team members).
|
||||
- **Bulk export/import saved sessions**: would be nice to take your sessions and capabilities with you or to share with colleagues.
|
||||
| Project | Description |
|
||||
|---------|-------------|
|
||||
|[Appium Client Library Updates](https://github.com/appium/appium/issues/7170)|It's been too long since we ensured that Appium's client libraries were up to date with the server|
|
||||
|[Test App Overhaul](https://github.com/appium/appium/issues/7172)|Our current test applications (the ones used to test Appium's iOS and Android support) are not ideal. We use too many of them and the ones we use have a random hodgepodge of app SDK features, sometimes not enough to sufficiently test automation support. It'd be great to find a way to ensure our test app(s) have all the features we need to test, and keep in sync with our requirements.|
|
||||
|[iOS Test Startup Time Improvement](https://github.com/appium/appium/issues/7173)|iOS startup times have gotten progressively longer with each iOS release. In part this is Apple's fault and there's not anything we can do about it. But we should investigate and see if we can be more efficient in how we start, especially given that we can now focus on XCUITest and leave Instruments behind|
|
||||
|[Appium Dearchitecture](https://github.com/appium/appium/issues/7174)|OK, we went a bit overboard in Appium 1.5 by exploding Appium into 40+ repos and NPM packages. Let's think a little more critically about it and consolidate into the minimal number of repos/packages that make sense for our code and community patterns.|
|
||||
|[Appium 2.0](https://github.com/appium/appium/issues/7175)|Appium, rather than bundling all the separate drivers by default, becomes a driver management interface (in addition to continuing to play the role of automation frontend server). Appium gets a set of CLI tools for users to pick and choose which drivers and versions of drivers they want to use via Appium|
|
||||
|
||||
## Projects Under Consideration (unplanned and unprioritized)
|
||||
|
||||
| Project | Description |
|
||||
|---------|-------------|
|
||||
|Windows Phone Support|There has been some work done on automating Windows Phone apps. We could take this all the way to integration with Appium in the form of a WindowsDriver.|
|
||||
|Apple Watch support|Appium should support Apple Watch apps via the Watch simulator|
|
||||
|Unity3d backend POC|This is a research project to determine whether we can add some kind of support for 3d game automation, probably based on the Unity3d game development platform.|
|
||||
|
||||
## Completed Roadmap Projects
|
||||
|
||||
| Project | Description | Completed | Appium Release | Notes |
|
||||
|---------|-------------|-----------|----------------|-------|
|
||||
|[Sample Code Overhaul](https://github.com/appium/appium/issues/7171)|Our sample code repo has grown tangled and broken. Let's make a new one with minimal examples which are the same across every language, and actually maintain the repo so as not to let it become overgrown.|
|
||||
|[Onboarding Overhaul](https://github.com/appium/appium/issues/7169)|Have a new site built with MkDocs that documents all of the Selenium and Appium commands with code samples|1/2018|n/a|appium.io|
|
||||
|[New Appium GUIs](https://github.com/appium/appium/issues/7167)|The current Appium GUIs (Appium.app and Appium.exe) have a number of issues. They aren't maintained by the core Appium team. They're written in Objective-C and C# respectively: two languages, and specifically, two languages other than Appium's core language. Because of this they lag behind the Appium server and are often broken. However, users love them primarily because of the Inspector feature (the thing that lets them graphically navigate their app), so we have to field a ton of complaints about these projects. There's an opportunity to start over. With [Electron](http://electron.atom.io/), we'd be able to take the new version of Appium we're working on and embed it directly inside a Node-based GUI app written using the languages and technologies the core team is experienced with. We'd have one codebase and could distribute the app on Mac, Windows, and Linux. The GUIs would become an official part of Appium's release cycle so they wouldn't be broken.|3/2017|N/A|[Appium Desktop website](https://github.com/appium/appium-desktop)|
|
||||
|[Android 7.1.1 Support](https://github.com/appium/appium/issues/7165)|Google has released Android 7.1.1 (API Level 25). Ensure it works with UiAutomator 1/2|2/2017|1.6.4||
|
||||
|[Android 7.0 Support](https://github.com/appium/appium/issues/7156)|Support Android 7 (Nougat)|11/2016|1.6.3||
|
||||
|[iOS 10.2 Support](https://github.com/appium/appium/issues/7166)|Support iOS 10.2|11/2016|1.6.1||
|
||||
|[iOS 10.1 Support](https://github.com/appium/appium/issues/7105)|Support iOS 10.1|11/2016|1.6.1||
|
||||
|UiAutomator2 integration|Google has released [UiAutomator 2](http://developer.android.com/reference/android/support/test/uiautomator/package-summary.html), and it promises to fix some issues and limitations with the previous UiAutomator support. We will build this inside of Selendroid since it requires an instrumentation context.|10/2016?|1.6.0|
|
||||
|XCUITest integration / iOS 10 support|Instruments + UIAutomation has been working well for many Appium users, but requires crazy workarounds to deal with bugs which remain unfixed on the Apple side. Also, UIAutomation has been removed in favor of XCUITest for iOS 10+. This new backend would exist alongside the UIAutomation backend.|10/2016|1.6.0||
|
||||
|iOS 9.3 support|Appium should support iOS 9.3 / Xcode 7.3|3/2016|1.5.1||
|
||||
|[Architecture Overhaul](https://github.com/appium/appium/issues/5169)|Appium's architecture has grown unwieldy enough that adding new features and preventing regressions has become difficult. A rearchitecture is in order to solve these issues as well as migrate the codebase to a form of JS much easier to work in and understand.|2/2015|1.5.0||
|
||||
|iOS 9.2 support|Appium should support iOS 9.2 / Xcode 7.2|11/2015|1.4.14||
|
||||
|iOS 9.1 support|Appium should support iOS 9.1 / Xcode 7.1|10/2015|1.4.12||
|
||||
|iOS 9.0 support|Appium should support iOS 9.0 / Xcode 7.0|10/2015|1.4.11||
|
||||
|iOS 8.4 support|Appium should support iOS 8.4 / Xcode 6.2|5/2015|1.4.0||
|
||||
|Appium CI|Appium has unique needs for Continuous Integration because of the highly specialized environments required (iOS simulators, Xcode, Android emulators, the Android SDK, etc...). We therefore need to create a custom CI solution (perhaps sitting underneath Cloudbees or some other OSS-friendly CI server) that can be used for all Appium projects which need integration tests.|5/2015|_N/A_|Usage instructions at [appium/appium-ci](https://github.com/appium/appium-ci)|
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
# Sponsors & Backers
|
||||
|
||||
Please check [Sponsors & Backers](https://appium.io/docs/en/latest/sponsors/)
|
||||
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/* eslint no-console:0 */
|
||||
|
||||
/*
|
||||
* Small tool, launching and monitoring ios-web-kit-proxy, and relaunching
|
||||
* on predefined errors.
|
||||
*
|
||||
* Usage:
|
||||
* ./bin/ios-webkit-debug-proxy-launcher.js [args]
|
||||
* args: ios-webkit-debug-proxy args (they will be passed over)
|
||||
*
|
||||
* Example:
|
||||
* ./bin/ios-webkit-debug-proxy-launcher.js -c <UDID>:27753 -d
|
||||
*
|
||||
* Note:
|
||||
* For iOS8.1 try this first:
|
||||
* brew install --HEAD ideviceinstaller
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const spawn = require('child_process').spawn;
|
||||
const _ = require('lodash');
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
const RESTART_ON_MESSAGES = [
|
||||
'Invalid message _rpc_applicationUpdated',
|
||||
'Invalid message _rpc_applicationSentListing'];
|
||||
|
||||
const PROXY_CMD = 'ios_webkit_debug_proxy';
|
||||
let proxy;
|
||||
|
||||
const handleKillProcess = function (exitCode) {
|
||||
console.log('\nKilling proxy process!');
|
||||
proxy.kill('SIGTERM');
|
||||
process.exit((exitCode || 0));
|
||||
};
|
||||
|
||||
const startProxy = function () {
|
||||
console.log(`RUNNING: ${PROXY_CMD} ${args.join(' ')}`);
|
||||
|
||||
proxy = spawn(PROXY_CMD, args);
|
||||
|
||||
proxy.stdout.on('data', function onStdout (data) {
|
||||
console.log(`stdout: ${data}`);
|
||||
});
|
||||
|
||||
proxy.stderr.on('data', function onStderr (data) {
|
||||
console.log(`stderr: ${data}`);
|
||||
const restartMessage = _(RESTART_ON_MESSAGES).find(function findMessage (message) {
|
||||
return ('' + data).indexOf(message) >= 0;
|
||||
});
|
||||
if (restartMessage) {
|
||||
console.log(`Detected error message: ${restartMessage}`);
|
||||
console.log('Killing proxy!');
|
||||
proxy.kill('SIGTERM');
|
||||
process.nextTick(startProxy);
|
||||
}
|
||||
});
|
||||
|
||||
proxy.on('close', function onClose (code) {
|
||||
console.log(`Child process exited with code ${code}`);
|
||||
});
|
||||
};
|
||||
|
||||
process.on('SIGINT', handleKillProcess);
|
||||
process.on('SIGTERM', handleKillProcess);
|
||||
|
||||
startProxy();
|
||||
Binary file not shown.
Executable → Regular
+4
-13
@@ -1,18 +1,11 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const path = require('path');
|
||||
const childProcess = require('child_process');
|
||||
const _ = require('lodash');
|
||||
|
||||
const res = JSON.parse(
|
||||
childProcess.execSync('npm pack --dry-run --json --ignore-scripts', {
|
||||
cwd: path.join(__dirname, '..'),
|
||||
encoding: 'utf8',
|
||||
})
|
||||
)[0];
|
||||
const res = JSON.parse(childProcess.execSync('npm pack --dry-run --json --ignore-scripts', {encoding: 'utf8'}))[0];
|
||||
|
||||
// List of files we are testing to make sure they are included in package
|
||||
const testFiles = [
|
||||
'npm-shrinkwrap.json', // Check that npm-shrinkwrap.json is being packed
|
||||
'LICENSE', // Check that license is included
|
||||
'build/lib/appium.js', // Sanity check that build files are being included by testing just one file
|
||||
];
|
||||
@@ -21,10 +14,8 @@ const testFiles = [
|
||||
const missingFiles = _.without(testFiles, ..._.map(res.files, 'path'));
|
||||
|
||||
if (!_.isEmpty(missingFiles)) {
|
||||
throw new Error(
|
||||
`Files [${missingFiles.join(', ')}] are not included in package.json "files". ` +
|
||||
`Please make sure these files are included before publishing.`
|
||||
);
|
||||
throw new Error(`Files [${missingFiles.join(', ')}] are not included in package.json "files". ` +
|
||||
`Please make sure these files are included before publishing.`);
|
||||
}
|
||||
|
||||
process.exit(0);
|
||||
@@ -0,0 +1,25 @@
|
||||
const _ = require('lodash');
|
||||
const { asyncify } = require('asyncbox');
|
||||
const { fs, logger } = require('appium-support');
|
||||
const path = require('path');
|
||||
|
||||
const log = new logger.getLogger('ShrinkwrapValidator');
|
||||
|
||||
async function main () {
|
||||
const shrinkwrapPath = path.resolve('npm-shrinkwrap.json');
|
||||
if (!(await fs.exists(shrinkwrapPath))) {
|
||||
log.info('No shrinkwrap found. Skipping shrinkwrap check');
|
||||
return;
|
||||
}
|
||||
const shrinkwrap = JSON.parse(await fs.readFile(shrinkwrapPath));
|
||||
const backupShrinkwrap = JSON.parse(await fs.readFile(path.resolve('npm-shrinkwrap-backup.json')));
|
||||
log.info('Checking that pruned shrinkwrap is a subset of primary shrinkwrap');
|
||||
if (!_.isMatch(backupShrinkwrap, shrinkwrap)) {
|
||||
log.errorAndThrow('Pruned shrinkwrap (shrinkwrap with dev dependencies removed) is not a subset of the original npm-shrinkwrap.json');
|
||||
}
|
||||
log.info('Shrinkwrap check passed');
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
asyncify(main);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: '12.x'
|
||||
- script: npm install
|
||||
displayName: NPM install
|
||||
- script: |
|
||||
git remote add triager https://triager:$GITHUB_TOKEN@github.com/appium/appium
|
||||
git checkout -b $MINOR_BRANCH_NAME
|
||||
git status
|
||||
node ./ci-jobs/scripts/set-package-json-version
|
||||
rm -rf package-lock.json
|
||||
npm shrinkwrap
|
||||
git add .
|
||||
git commit -n -m "Set version to $(MINOR_BRANCH_NAME).0-rc.0"
|
||||
git push -u triager $MINOR_BRANCH_NAME
|
||||
displayName: Create branch
|
||||
env:
|
||||
GITHUB_TOKEN: $(GITHUB_TOKEN)
|
||||
MINOR_BRANCH_NAME: $(MINOR_BRANCH_NAME)
|
||||
- script: |
|
||||
git tag $MINOR_BRANCH_NAME.0-rc.0
|
||||
git push --tags -u triager
|
||||
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc
|
||||
npm publish --tag $(node ./ci-jobs/scripts/parse-tag)
|
||||
env:
|
||||
NPM_TOKEN: $(NPM_TOKEN)
|
||||
displayName: Tag and Publish
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
# 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)
|
||||
@@ -0,0 +1,2 @@
|
||||
jobs:
|
||||
- template: templates/bundle-template.yml
|
||||
@@ -0,0 +1,3 @@
|
||||
const semver = require('semver');
|
||||
const { version } = require('../../package.json');
|
||||
console.log(semver(version).prerelease[0]); //eslint-disable-line no-console
|
||||
@@ -0,0 +1,22 @@
|
||||
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;
|
||||
@@ -0,0 +1,47 @@
|
||||
# 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 ci || npm install # "npm ci" if shrinkwrap is present
|
||||
displayName: Install NPM Dependencies
|
||||
- script: |
|
||||
pushd node_modules/appium-webdriveragent
|
||||
carthage bootstrap --no-use-binaries
|
||||
cp Cartfile.resolved Carthage
|
||||
mkdir -p ./Resources/WebDriverAgent.bundle
|
||||
popd
|
||||
displayName: Fully build XCUITestDriver
|
||||
- script: npm run build
|
||||
displayName: npm run build
|
||||
- script: npm prune --production
|
||||
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
|
||||
@@ -0,0 +1,31 @@
|
||||
# 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)
|
||||
@@ -0,0 +1,22 @@
|
||||
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
|
||||
|
||||
## Appium API Documentation
|
||||
|
||||
{{#if path}}
|
||||
### {{path}}
|
||||
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
|
||||
{{/if}}
|
||||
|
||||
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
|
||||
<div class="api-index">
|
||||
{{#*inline "commands"}}
|
||||
{{#each commands}}
|
||||
<li>{{#if commands}}<a href='{{path}}'>{{name}}</a><ul>{{>commands}}</ul>{{else}}<a href='{{path}}'>{{name}}</a>{{/if}}</li>
|
||||
{{/each}}
|
||||
{{/inline}}
|
||||
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
|
||||
<ul>
|
||||
{{>commands}}
|
||||
</ul>
|
||||
</div>
|
||||
[//]: # (DO NOT EDIT THIS FILE! This is an auto-generated file.)
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
name: Get Current Context
|
||||
short_description: Get the current context in which Appium is running
|
||||
description:
|
||||
>
|
||||
Retrieve the current context. This can be either `NATIVE_APP` for the native
|
||||
context, or a web view context, which will be:
|
||||
|
||||
* iOS - `WEBVIEW_<id>`
|
||||
* Android - `WEBVIEW_<package name>`
|
||||
|
||||
|
||||
For information on contexts, see Appium's [hybrid automation docs](/docs/en/writing-running-appium/web/hybrid.md).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
String context = driver.getContext();
|
||||
python:
|
||||
|
|
||||
context = driver.current_context
|
||||
# or
|
||||
context = driver.context
|
||||
javascript_wd:
|
||||
|
|
||||
let context = await driver.currentContext();
|
||||
javascript_wdio:
|
||||
|
|
||||
let context = driver.getContext();
|
||||
ruby:
|
||||
|
|
||||
context = current_context
|
||||
ruby_core:
|
||||
context = @driver.current_context
|
||||
php:
|
||||
|
|
||||
$context = $driver->context();
|
||||
csharp:
|
||||
|
|
||||
string Context = driver.Context;
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/AppiumDriver.html#getContext--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.context.Context.current_context"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/mjsonwp.html#getcontext"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/doc/api.md"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_context-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_context-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/context
|
||||
method: 'GET'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
response:
|
||||
- type: String
|
||||
description: The name of the current context
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
name: Get All Contexts
|
||||
short_description: Get all the contexts available to automate
|
||||
description:
|
||||
>
|
||||
Retrieve all the contexts available to be automated. This will include, at
|
||||
least, the native context. There can also be zero or more web view contexts.
|
||||
For information on the format of the context names, see the [get context
|
||||
documentation](/docs/en/commands/context/get-context.md).
|
||||
|
||||
[mobile command](/docs/en/commands/mobile-command.md)
|
||||
`mobile: getContexts` is available on iOS (XCUITest) and Android
|
||||
(UIAutomator2 and Espresso) to get more detailed contexts.
|
||||
|
||||
For information on contexts, see Appium's [hybrid automation docs](/docs/en/writing-running-appium/web/hybrid.md).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
Set<String> contextNames = driver.getContextHandles();
|
||||
python:
|
||||
|
|
||||
contexts = driver.contexts
|
||||
javascript_wd:
|
||||
|
|
||||
let contexts = await driver.contexts();
|
||||
javascript_wdio:
|
||||
|
|
||||
let contexts = driver.getContexts();
|
||||
ruby:
|
||||
|
|
||||
context = available_contexts
|
||||
ruby_core:
|
||||
|
|
||||
context = @driver.available_contexts
|
||||
php:
|
||||
|
|
||||
$contexts = $driver->contexts();
|
||||
csharp:
|
||||
|
|
||||
List<string> AllContexts = new List<string>();
|
||||
foreach (var context in (driver.Contexts))
|
||||
{
|
||||
AllContexts.Add(context);
|
||||
}
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/AppiumDriver.html#getContextHandles--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.context.Context.contexts"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/mjsonwp.html#getcontexts"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/doc/api.md"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#available_contexts-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#available_contexts-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/contexts
|
||||
method: 'GET'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
response:
|
||||
- type: Array<String>
|
||||
description: Array of the names of all available contexts
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
name: Set Current Context
|
||||
short_description: Set the context being automated
|
||||
description:
|
||||
>
|
||||
Set the current context to that passed in. If this is moving into a web view
|
||||
context it will involve attempting to connect to that web view:
|
||||
|
||||
* iOS - attempt to connect to the application through the remote debugger
|
||||
* Android - start a [Chromedriver](/docs/en/writing-running-appium/web/chromedriver.md)
|
||||
process and begin a session to connect to the web view
|
||||
|
||||
|
||||
For information on contexts, see Appium's [hybrid automation docs](/docs/en/writing-running-appium/web/hybrid.md).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
Set<String> contextNames = driver.getContextHandles();
|
||||
driver.context(contextNames.toArray()[1]);
|
||||
// ...
|
||||
driver.context("NATIVE_APP");
|
||||
python:
|
||||
|
|
||||
webview = driver.contexts[1]
|
||||
driver.switch_to.context(webview)
|
||||
# ...
|
||||
driver.switch_to.context('NATIVE_APP')
|
||||
javascript_wd:
|
||||
|
|
||||
let contexts = await driver.contexts();
|
||||
await driver.context(contexts[1]);
|
||||
// ...
|
||||
await driver.context('NATIVE_APP');
|
||||
javascript_wdio:
|
||||
|
|
||||
let contexts = driver.getContexts();
|
||||
driver.switchContext(contexts[1]);
|
||||
// ...
|
||||
driver.switchContext('NATIVE_APP');
|
||||
ruby:
|
||||
|
|
||||
webview = available_contexts[1]
|
||||
set_context(webview)
|
||||
# ...
|
||||
set_context('NATIVE_APP')
|
||||
ruby_core:
|
||||
|
|
||||
webview = @driver.available_contexts[1]
|
||||
@driver.set_context(webview)
|
||||
# ...
|
||||
@driver.set_context('NATIVE_APP')
|
||||
php:
|
||||
|
|
||||
$contexts = $driver->contexts();
|
||||
$driver->context($contexts[1]);
|
||||
// ...
|
||||
$driver->context('NATIVE_APP');
|
||||
csharp:
|
||||
|
|
||||
// Switch to specific webview
|
||||
List<string> AllContexts = new List<string>();
|
||||
foreach (var context in (driver.Contexts))
|
||||
{
|
||||
AllContexts.Add(context);
|
||||
}
|
||||
driver.Context = (AllContexts[1]);
|
||||
// Switch to NATIVE_APP
|
||||
driver.Context = ("NATIVE_APP");
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/AppiumDriver.html#context-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.context.Context.context"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/mjsonwp.html#switchcontext"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/doc/api.md"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#set_context-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#set_context-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/context
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: name
|
||||
type: String
|
||||
description: The name of the context to which to change
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: Get Current Activity
|
||||
short_description: Get the name of the current Android activity
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
String activity = driver.currentActivity();
|
||||
python:
|
||||
|
|
||||
activity = self.driver.current_activity;
|
||||
javascript_wd:
|
||||
|
|
||||
let activity = await driver.getCurrentActivity();
|
||||
javascript_wdio:
|
||||
|
|
||||
let activity = driver.getCurrentActivity();
|
||||
ruby:
|
||||
|
|
||||
current_activity
|
||||
ruby_core:
|
||||
|
|
||||
@driver.current_activity
|
||||
php:
|
||||
|
|
||||
$activity = $driver->currentActivity();
|
||||
csharp:
|
||||
|
|
||||
string activity = driver.CurrentActivity;
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/StartsActivity.html#currentActivity--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.activities.Activities.current_activity"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getcurrentactivity"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2519"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_activity-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_activity-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/current_activity
|
||||
method: GET
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
response:
|
||||
- type: string
|
||||
description: Name of the current [activity](https://developer.android.com/reference/android/app/Activity.html)
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L366
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: Get Current Package
|
||||
short_description: Get the name of the current Android package
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
String package = driver.getCurrentPackage();
|
||||
python:
|
||||
|
|
||||
package = self.driver.current_package;
|
||||
javascript_wd:
|
||||
|
|
||||
let package = await driver.getCurrentPackage();
|
||||
javascript_wdio:
|
||||
|
|
||||
let package = driver.getCurrentPackage();
|
||||
ruby:
|
||||
|
|
||||
current_package
|
||||
ruby_core:
|
||||
|
|
||||
@driver.current_package
|
||||
php:
|
||||
|
|
||||
// TODO PHP sample
|
||||
csharp:
|
||||
|
|
||||
string package = driver.CurrentPackage;
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/StartsActivity.html#getCurrentPackage--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.common.Common.current_package"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2526"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getcurrentpackage"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_package-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#current_package-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: false
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/current_package
|
||||
method: GET
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
response:
|
||||
- type: string
|
||||
description: Name of the current [package](https://developer.android.com/reference/java/lang/Package.html)
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L369
|
||||
@@ -0,0 +1,103 @@
|
||||
---
|
||||
name: Start Activity
|
||||
short_description: Start an Android activity by providing package name and activity name
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.startActivity(new Activity("com.example", "ActivityName"));
|
||||
python:
|
||||
|
|
||||
self.driver.start_activity("com.example", "ActivityName");
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.startActivity({
|
||||
appPackage: "com.example",
|
||||
appActivity: "ActivityName"
|
||||
});
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.startActivity("com.example", "ActivityName");
|
||||
ruby:
|
||||
|
|
||||
start_activity app_package: "com.example", app_activity: "ActivityName"
|
||||
ruby_core:
|
||||
|
|
||||
@driver.start_activity app_package: "com.example", app_activity: "ActivityName"
|
||||
php:
|
||||
|
|
||||
$driver->startActivity(array('appPackage' => 'com.example',
|
||||
'appActivity' => 'ActivityName'));
|
||||
csharp:
|
||||
|
|
||||
driver.StartActivity("com.example", "ActivityName");
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/AndroidMobileCommandHelper.html#startActivityCommand-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.activities.Activities.start_activity"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#startactivity"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2948"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#start_activity-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#start_activity-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/start_activity
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: appPackage
|
||||
type: string
|
||||
description: Name of the [package](https://developer.android.com/reference/java/lang/Package.html)
|
||||
- name: appActivity
|
||||
type: string
|
||||
description: Name of the [activity](https://developer.android.com/reference/android/app/Activity.html)
|
||||
- name: appWaitPackage
|
||||
type: string
|
||||
description: Automation will begin after this package starts
|
||||
- name: intentAction
|
||||
type: string
|
||||
description: "[Intent](https://developer.android.com/reference/android/content/Intent.html) action which will be used to start activity"
|
||||
- name: intentCategory
|
||||
type: string
|
||||
description: Intent category which will be used to start activity
|
||||
- name: intentFlags
|
||||
type: string
|
||||
description: Flags that will be used to start activity
|
||||
- name: optionalIntentArguments
|
||||
type: string
|
||||
description: Additional intent arguments that will be used to start activity
|
||||
- name: dontStopAppOnReset
|
||||
type: boolean
|
||||
description: Should the app stop on reset
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L411
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
name: Activate App
|
||||
short_description: Activate the given app onto the device
|
||||
description:
|
||||
>
|
||||
iOS tests with XCUITest can also use the `mobile: activateApp` method. See
|
||||
detailed [documentation](http://appium.io/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management/index.html#mobile-activateapp).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.activateApp('com.apple.Preferences');
|
||||
driver.activateApp('io.appium.android.apis');
|
||||
python:
|
||||
|
|
||||
driver.activate_app('com.apple.Preferences')
|
||||
driver.activate_app('io.appium.android.apis')
|
||||
javascript_wd:
|
||||
|
|
||||
// Supports only `mobile: queryAppState` for iOS, XCUITest
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.activateApp(null, 'com.apple.Preferences')
|
||||
driver.activateApp('io.appium.android.apis')
|
||||
ruby:
|
||||
|
|
||||
activate_app('com.apple.Preferences')
|
||||
activate_app('io.appium.android.apis')
|
||||
ruby_core:
|
||||
|
|
||||
@driver.activate_app('com.apple.Preferences')
|
||||
@driver.activate_app('io.appium.android.apis')
|
||||
php:
|
||||
|
|
||||
// Supports only `mobile: queryAppState` for iOS, XCUITest
|
||||
csharp:
|
||||
|
|
||||
driver.activateApp('com.apple.Preferences');
|
||||
driver.activateApp('io.appium.android.apis');
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#activateApp-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.activate_app"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#activateapp"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js" # TODO wd documentation link
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#activate_app-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#activate_app-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/activate_app
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: bundleId or appId
|
||||
type: string
|
||||
description: BundleId for iOS. Package name for Android.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L427
|
||||
@@ -0,0 +1,95 @@
|
||||
---
|
||||
name: Get app state
|
||||
short_description: Get the given app status on the device
|
||||
description:
|
||||
>
|
||||
iOS tests with XCUITest can also use the `mobile: queryAppState` method. See
|
||||
detailed [documentation](http://appium.io/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management/index.html#mobile-queryappstate).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.queryAppState('com.apple.Preferences');
|
||||
driver.queryAppState('io.appium.android.apis');
|
||||
python:
|
||||
|
|
||||
driver.query_app_state('com.apple.Preferences')
|
||||
driver.query_app_state('io.appium.android.apis')
|
||||
javascript_wd:
|
||||
|
|
||||
// Supports only `mobile: queryAppState` for iOS, XCUITest
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.queryAppState(null, 'com.apple.Preferences')
|
||||
driver.queryAppState('io.appium.android.apis')
|
||||
ruby:
|
||||
|
|
||||
app_state('com.apple.Preferences')
|
||||
query_app_state('io.appium.android.apis') # `query_` prefix is also available
|
||||
ruby_core:
|
||||
|
|
||||
@driver.app_state('com.apple.Preferences')
|
||||
@driver.query_app_state('io.appium.android.apis') # `query_` prefix is also available
|
||||
php:
|
||||
|
|
||||
// Supports only `mobile: queryAppState` for iOS, XCUITest
|
||||
csharp:
|
||||
|
|
||||
// Supports only `mobile: queryAppState` for iOS, XCUITest
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#queryAppState-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.query_app_state"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#queryappstate"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js" # TODO wd documentation link
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Base/Driver#app_state-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Base/Driver#app_state-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/app_state
|
||||
method: GET
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: bundleId or appId
|
||||
type: string
|
||||
description: BundleId for iOS. Package name for Android.
|
||||
response:
|
||||
- type: number
|
||||
description: Current the target app status. (Clients wrap the response properly)
|
||||
`0` is not installed.
|
||||
`1` is not running.
|
||||
`2` is running in background or suspended.
|
||||
`3` is running in background.
|
||||
`4` is running in foreground.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L462
|
||||
@@ -0,0 +1,99 @@
|
||||
---
|
||||
name: Background App
|
||||
short_description: Send the currently running app for this session to the background
|
||||
description:
|
||||
>
|
||||
Send the currently active app to the background, and either return after a
|
||||
certain amount of time, or leave the app deactivated.
|
||||
|
||||
There are 3 types of parameters which may be passed to this method:
|
||||
|
||||
|
||||
1. An object that looks like `{"seconds": secs}`, where `secs` is an
|
||||
integer designating how long, in seconds, to background the app for. -1
|
||||
means to deactivate the app entirely.
|
||||
|
||||
2. `null`, which means to deactivate the app entirely.
|
||||
|
||||
3. _Deprecated_ An integer: how long, in seconds, to background the app for. -1 means to
|
||||
deactivate the app entirely.
|
||||
|
||||
|
||||
iOS tests with XCUITest can also use the `mobile: terminateApp` method to
|
||||
terminate the current app (see detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-terminateapp)),
|
||||
and the `mobile: activateApp` to activate an existing application on the
|
||||
device under test and moves it to the foreground (see detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-activateapp)).
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.runAppInBackground(Duration.ofSeconds(10));
|
||||
python:
|
||||
|
|
||||
self.driver.background_app(10)
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.backgroundApp(10);
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.background(10);
|
||||
ruby:
|
||||
|
|
||||
background_app(10)
|
||||
ruby_core:
|
||||
|
|
||||
@driver.background_app(10)
|
||||
php:
|
||||
|
|
||||
$driver->backgroundApp(10);
|
||||
csharp:
|
||||
|
|
||||
driver.BackgroundApp(10)
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#runAppInBackground-java.time.Duration-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.background_app"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#background"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2841"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#background_app-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#background_app-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/app/background
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: seconds
|
||||
type: number
|
||||
description: How long to run app in background.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L439
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
name: Close an App
|
||||
short_description: Close an app on device
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.closeApp();
|
||||
python:
|
||||
|
|
||||
self.driver.close_app()
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.closeApp();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.closeApp();
|
||||
ruby:
|
||||
|
|
||||
close_app
|
||||
ruby_core:
|
||||
|
|
||||
@driver.close_app
|
||||
php:
|
||||
|
|
||||
$driver->closeApp();
|
||||
csharp:
|
||||
|
|
||||
driver.CloseApp();
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#closeApp--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.close_app"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#closeapp"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2798"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#close_app-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#close_app-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: false
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/app/close
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L433
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
name: End Test Coverage
|
||||
short_description: Get test coverage data
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.endTestCoverage("Intent", "/path");
|
||||
python:
|
||||
|
|
||||
self.driver.end_test_coverage("Intent", "/path")
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.endTestCoverageForApp("Intent", "/path");
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.endCoverage("Intent", "/path");
|
||||
ruby:
|
||||
|
|
||||
end_coverage("Intent", "/path")
|
||||
ruby_core:
|
||||
|
|
||||
@driver.end_coverage("Intent", "/path")
|
||||
php:
|
||||
|
|
||||
$driver->endTestCoverage('Intent', '/path');
|
||||
csharp:
|
||||
|
|
||||
driver.EndTestCoverage("Intent", "/path");
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/AndroidDriver.html#endTestCoverage-java.lang.String-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.common.Common.end_test_coverage"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2858"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#endcoverage"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#end_coverage-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#end_coverage-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: false
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/app/end_test_coverage
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: intent
|
||||
type: string
|
||||
description: Intent to broadcast
|
||||
- name: path
|
||||
type: string
|
||||
description: Path to .ec file
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L442
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
name: Get App Strings
|
||||
short_description: Get app strings
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
Map<String, String> appStrings = driver.getAppStringMap("en", "/path/to/file");
|
||||
python:
|
||||
|
|
||||
appStrings = self.driver.app_strings("en", "/path/to/file")
|
||||
javascript_wd:
|
||||
|
|
||||
let appStrings = await driver.getAppStrings();
|
||||
javascript_wdio:
|
||||
|
|
||||
let appStrings = driver.getStrings("en");
|
||||
ruby:
|
||||
|
|
||||
app_strings("en")
|
||||
ruby_core:
|
||||
|
|
||||
@driver.app_strings("en")
|
||||
php:
|
||||
|
|
||||
$strings = $driver->appStrings();
|
||||
csharp:
|
||||
|
|
||||
Dictionary<string, object> appStrings = driver.GetAppStringDictionary("end", "/path/to/file");
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/HasAppStrings.html#getAppStringMap--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.app_strings"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getstrings"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2916"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#app_strings-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#app_strings-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/app/strings
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: language
|
||||
type: string
|
||||
description: Language code (optional)
|
||||
- name: stringFile
|
||||
type: string
|
||||
description: Path to the string file (optional)
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L445
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
name: Install App
|
||||
short_description: Install the given app onto the device
|
||||
description:
|
||||
>
|
||||
iOS tests with XCUITest can also use the `mobile: installApp` method. See
|
||||
detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-installapp).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.installApp("/Users/johndoe/path/to/app.apk");
|
||||
python:
|
||||
|
|
||||
self.driver.install_app('/Users/johndoe/path/to/app.apk');
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.installAppOnDevice('/Users/johndoe/path/to/app.apk');
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.installApp('/Users/johndoe/path/to/app.apk')
|
||||
ruby:
|
||||
|
|
||||
install_app('/Users/johndoe/path/to/app.apk')
|
||||
ruby_core:
|
||||
|
|
||||
@driver.install_app('/Users/johndoe/path/to/app.apk')
|
||||
php:
|
||||
|
|
||||
$driver->installApp('/Users/johndoe/path/to/app.apk');
|
||||
csharp:
|
||||
|
|
||||
driver.InstallApp("/Users/johndoe/path/to/app.apk")
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#installApp-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.install_app"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#installapp"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2540"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#install_app-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#install_app-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/install_app
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: appPath
|
||||
type: string
|
||||
description: Path of the app being installed
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L372
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
name: Is App Installed
|
||||
short_description: Check whether the specified app is installed on the device
|
||||
description:
|
||||
>
|
||||
iOS tests with XCUITest can also use the `mobile: isAppInstalled` method. See
|
||||
detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-isappinstalled).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.isAppInstalled("com.example.AppName");
|
||||
python:
|
||||
|
|
||||
self.driver.is_app_installed('com.example.AppName');
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.isAppInstalledOnDevice('com.example.AppName');
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.isAppInstalled('com.example.AppName')
|
||||
ruby:
|
||||
|
|
||||
app_installed?('com.example.AppName')
|
||||
ruby_core:
|
||||
|
|
||||
@driver.app_installed?('com.example.AppName')
|
||||
php:
|
||||
|
|
||||
$driver->isAppInstalled('com.example.AppName')
|
||||
csharp:
|
||||
|
|
||||
driver.IsAppInstalled("com.example.AppName");
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#isAppInstalled-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.is_app_installed"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#isappinstalled"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2586"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#app_installed%3F-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#app_installed%3F-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/app_installed
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: bundleId
|
||||
type: string
|
||||
description: iOS bundleID or Android package name
|
||||
response:
|
||||
- type: boolean
|
||||
description: Return true if installed, false if not
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L378
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
name: Launch App
|
||||
short_description: Launch the app-under-test on the device
|
||||
description:
|
||||
>
|
||||
If the app-under-test (AUT) is closed, or backgrounded, it will launch it.
|
||||
If the AUT is already open, it will background it and re-launch it.
|
||||
|
||||
iOS tests with XCUITest can also use the `mobile: launchApp` method. See
|
||||
detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-launchapp).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.launchApp();
|
||||
python:
|
||||
|
|
||||
self.driver.launch_app()
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.launchApp();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.launchApp();
|
||||
ruby:
|
||||
|
|
||||
launch_app
|
||||
ruby_core:
|
||||
|
|
||||
@driver.launch_app
|
||||
php:
|
||||
|
|
||||
$driver->launchApp();
|
||||
csharp:
|
||||
|
|
||||
driver.LaunchApp();
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#launchApp--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.launch_app"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#launchapp"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2798"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#launch_app-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#launch_app-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: false
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/app/launch
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L430
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
name: Remove App
|
||||
short_description: Remove an app from the device
|
||||
description:
|
||||
>
|
||||
iOS tests with XCUITest can also use the `mobile: removeApp` method. See
|
||||
detailed [documentation](/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management.md#mobile-removeapp).
|
||||
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.removeApp("com.example.AppName");
|
||||
python:
|
||||
|
|
||||
self.driver.remove_app('com.example.AppName');
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.removeAppFromDevice('com.example.AppName');
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.removeApp('com.example.AppName')
|
||||
ruby:
|
||||
|
|
||||
remove_app('com.example.AppName')
|
||||
ruby_core:
|
||||
|
|
||||
@driver.remove_app('com.example.AppName')
|
||||
php:
|
||||
|
|
||||
$driver->removeApp('com.example.AppName');
|
||||
csharp:
|
||||
|
|
||||
driver.RemoveApp("com.example.AppName");
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#removeApp-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.remove_app"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#removeapp"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2563"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#remove_app-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#remove_app-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/remove_app
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: appId
|
||||
type: string
|
||||
description: The iOS [App ID](https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/AppID.html)
|
||||
- name: bundleId
|
||||
type: string
|
||||
description: iOS bundleID or Android package name
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L375
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
name: Reset App
|
||||
short_description: Reset the currently running app for this session
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.resetApp();
|
||||
python:
|
||||
|
|
||||
self.driver.reset()
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.resetApp();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.reset();
|
||||
ruby:
|
||||
|
|
||||
reset
|
||||
ruby_core:
|
||||
|
|
||||
@driver.reset
|
||||
php:
|
||||
|
|
||||
$driver->reset();
|
||||
csharp:
|
||||
|
|
||||
driver.ResetApp();
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#resetApp--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.reset"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#reset"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2827"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#reset-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#reset-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: false
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/app/reset
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L436
|
||||
@@ -0,0 +1,90 @@
|
||||
---
|
||||
name: Terminate App
|
||||
short_description: Terminate the given app on the device
|
||||
description:
|
||||
>
|
||||
iOS tests with XCUITest can also use the `mobile: terminateApp` method. See
|
||||
detailed [documentation](http://appium.io/docs/en/writing-running-appium/ios/ios-xctest-mobile-apps-management/index.html#mobile-terminateapp).
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.terminateApp('com.apple.Preferences');
|
||||
driver.terminateApp('io.appium.android.apis');
|
||||
python:
|
||||
|
|
||||
driver.terminate_app('com.apple.Preferences')
|
||||
driver.terminate_app('io.appium.android.apis')
|
||||
javascript_wd:
|
||||
|
|
||||
// Supports only `mobile: queryAppState` for iOS, XCUITest
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.terminateApp(null, 'com.apple.Preferences')
|
||||
driver.terminateApp('io.appium.android.apis')
|
||||
ruby:
|
||||
|
|
||||
terminate_app('com.apple.Preferences')
|
||||
terminate_app('io.appium.android.apis')
|
||||
ruby_core:
|
||||
|
|
||||
@driver.terminate_app('com.apple.Preferences')
|
||||
@driver.terminate_app('io.appium.android.apis')
|
||||
php:
|
||||
|
|
||||
// Supports only `mobile: queryAppState` for iOS, XCUITest
|
||||
csharp:
|
||||
|
|
||||
// Supports only `mobile: queryAppState` for iOS, XCUITest
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithApps.html#terminateApp-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.applications.Applications.terminate_app"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#terminateapp"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js" # TODO wd documentation link
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Base/Driver#terminate_app-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Base/Driver#terminate_app-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO Dotnet documentation link
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/terminate_app
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: bundleId or appId
|
||||
type: string
|
||||
description: BundleId for iOS. Package name for Android.
|
||||
- name: options.timeout
|
||||
type: number
|
||||
description: (Only Android) Timeout to retry terminate the app.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L445
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
name: Finger print
|
||||
short_description: Authenticate users by using their finger print scans on supported emulators.
|
||||
|
||||
description:
|
||||
|
|
||||
For Android emulator.
|
||||
Authenticate users by using their finger print scans.
|
||||
|
||||
Touch ID by iOS is [here](http://appium.io/docs/en/commands/device/simulator/touch-id/)
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.fingerPrint(1);
|
||||
python:
|
||||
|
|
||||
self.driver.finger_print(1)
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.fingerprint(1);
|
||||
javascript_wdio:
|
||||
|
|
||||
await driver.fingerPrint(1);
|
||||
ruby:
|
||||
|
|
||||
finger_print 1
|
||||
ruby_core:
|
||||
|
|
||||
@driver.finger_print 1
|
||||
php:
|
||||
|
|
||||
// PHP Code here
|
||||
csharp:
|
||||
|
|
||||
// CSharp Code here
|
||||
|
||||
client_docs:
|
||||
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#click--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.finger_print"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#fingerprint"
|
||||
javascript_wd: "https://github.com/appium/appium-android-driver/blob/d16c7161d92ab6f6c9cec3f22218219ac3659716/lib/commands/actions.js#L260"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device#finger_print-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device#finger_print-instance_method"
|
||||
php:
|
||||
csharp:
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/finger_print
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: fingerprintId
|
||||
type: number
|
||||
description: finger prints stored in Android Keystore system (from 1 to 10)
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L379
|
||||
@@ -0,0 +1,90 @@
|
||||
---
|
||||
name: Get Clipboard
|
||||
short_description: Get the content of the system clipboard
|
||||
description:
|
||||
>
|
||||
Get the content of the system clipboard
|
||||
|
||||
|
||||
(For iOS real devices)
|
||||
Apple security preferences require the WebDriverAgentRunner application to be in [foreground](https://github.com/appium/WebDriverAgent/issues/330) in order to be able to receive the system clipboard content. Otherwise an empty string is always returned. Consider using [Activate App](/docs/en/commands/device/app/activate-app.md) and [Background App](/docs/en/commands/device/app/background-app.md) to change the foreground application.
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.getClipboard(ClipboardContentType.PLAINTEXT); // get plaintext
|
||||
driver.getClipboardText();
|
||||
python:
|
||||
|
|
||||
self.driver.get_clipboard()
|
||||
self.driver.get_clipboard_text()
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.getClipboard();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.getClipboard();
|
||||
ruby:
|
||||
|
|
||||
get_clipboard
|
||||
ruby_core:
|
||||
|
|
||||
@driver.get_clipboard
|
||||
php:
|
||||
|
|
||||
// PHP Code here
|
||||
csharp:
|
||||
|
|
||||
// CSharp Code here
|
||||
|
||||
client_docs:
|
||||
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#click--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.clipboard.Clipboard.get_clipboard"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#getclipboard"
|
||||
javascript_wd: "https://github.com/admc/wd/releases"
|
||||
ruby:
|
||||
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_clipboard-instance_method"
|
||||
- ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#get_clipboard-instance_method"
|
||||
ruby_core:
|
||||
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#get_clipboard-instance_method"
|
||||
- ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#get_clipboard-instance_method"
|
||||
php: "https://github.com/appium/php-client/releases/latest"
|
||||
csharp: "https://github.com/appium/appium" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: false
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/get_clipboard
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: contentType
|
||||
type: string
|
||||
description: The type of the content to get. Plaintext, Image, URL. Android supports only plaintext.
|
||||
response:
|
||||
- type: string
|
||||
description: Clipboard content as base64-encoded string or an empty string if the clipboard is empty
|
||||
|
||||
specifications: no
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
name: Set Clipboard
|
||||
short_description: Set the content of the system clipboard
|
||||
description:
|
||||
>
|
||||
Set the content of the system clipboard
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
// base64Content is Base64-encoded content
|
||||
driver.setClipboard("label", ClipboardContentType.PLAINTEXT, base64Content);
|
||||
driver.setClipboardText("happy testing");
|
||||
python:
|
||||
|
|
||||
self.driver.set_clipboard('happy testing')
|
||||
self.driver.set_clipboard_text('happy testing')
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.setClipboard('happy testing', 'plaintext')
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.setClipboard('happy testing', 'plaintext')
|
||||
ruby:
|
||||
|
|
||||
set_clipboard content: 'happy testing'
|
||||
ruby_core:
|
||||
|
|
||||
@driver.set_clipboard content: 'happy testing'
|
||||
php:
|
||||
|
|
||||
// PHP Code here
|
||||
csharp:
|
||||
|
|
||||
// CSharp Code here
|
||||
|
||||
client_docs:
|
||||
java: "https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#click--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.clipboard.Clipboard.get_clipboard"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#setclipboard"
|
||||
javascript_wd: "https://github.com/admc/wd/releases"
|
||||
ruby:
|
||||
- ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#set_clipboard-instance_method"
|
||||
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#set_clipboard-instance_method"
|
||||
ruby_core:
|
||||
- ios: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Ios/Device#set_clipboard-instance_method"
|
||||
- android: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Android/Device#set_clipboard-instance_method"
|
||||
php: "https://github.com/appium/php-client/releases/latest"
|
||||
csharp: "https://github.com/appium/appium" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: false
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/set_clipboard
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: content
|
||||
type: String
|
||||
description: The actual base64 encoded clipboard content.
|
||||
- name: contentType
|
||||
type: string
|
||||
description: The type of the content to get. Plaintext, Image, URL. Android supports only plaintext.
|
||||
- name: label
|
||||
type: string
|
||||
description: Clipboard data label for Android.
|
||||
response:
|
||||
- type: string
|
||||
description: Response from Appium server
|
||||
|
||||
specifications: no
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
name: Emulate power state
|
||||
short_description: Emulate power state change on the connected emulator.
|
||||
|
||||
description:
|
||||
|
|
||||
For Android emulator.
|
||||
To set the state of the battery charger to connected or not.
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.setPowerAC(PowerACState.OFF);
|
||||
python:
|
||||
|
|
||||
self.driver.set_power_ac(Power.AC_OFF)
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.powerAC('on')
|
||||
ruby:
|
||||
|
|
||||
set_power_ac :on
|
||||
ruby_core:
|
||||
|
|
||||
@driver.set_power_ac :on
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/" # TODO: Link
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.power.Power.set_power_ac"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#powerac"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_power_ac-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_power_ac-instance_method"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: false
|
||||
javascript_wdio: false
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/power_ac
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: state
|
||||
type: string
|
||||
description: set the state. on or off
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L381
|
||||
@@ -0,0 +1,70 @@
|
||||
---
|
||||
name: Emulate power capacity
|
||||
short_description: Emulate power capacity change on the connected emulator.
|
||||
|
||||
description:
|
||||
|
|
||||
For Android emulator.
|
||||
To set the battery percentage.
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.setPowerCapacity(100);
|
||||
python:
|
||||
|
|
||||
self.driver.set_power_capacity(50)
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.powerCapacity(50)
|
||||
ruby:
|
||||
|
|
||||
set_power_capacity 50
|
||||
ruby_core:
|
||||
|
|
||||
@driver.set_power_capacity 50
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/" # TODO: Link
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.power.Power.set_power_capacity"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#powercapacity"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_power_capacity-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_power_capacity-instance_method"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: false
|
||||
javascript_wdio: false
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/power_capacity
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: percent
|
||||
type: integer
|
||||
description: ercentage value in range [0, 100]
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L378
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
name: Pull File
|
||||
short_description: Retrieve a file from the device's file system
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
byte[] fileBase64 = driver.pullFile("/path/to/device/foo.bar");
|
||||
python:
|
||||
|
|
||||
file_base64 = self.driver.pull_file('/path/to/device/foo.bar');
|
||||
javascript_wd:
|
||||
|
|
||||
let fileBase64 = await driver.pullFile('/path/to/device/foo.bar');
|
||||
javascript_wdio:
|
||||
|
|
||||
let data = driver.pullFile('/data/local/tmp/file.txt');
|
||||
ruby:
|
||||
|
|
||||
pull_file('/data/local/tmp/file.txt')
|
||||
ruby_core:
|
||||
|
|
||||
@driver.pull_file('/data/local/tmp/file.txt')
|
||||
php:
|
||||
|
|
||||
$data = $driver->pullFile('data/local/tmp/file.txt');
|
||||
csharp:
|
||||
|
|
||||
byte[] fileBase64 = driver.PullFile("/path/to/device/foo.bar");
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithFiles.html#pullFile-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.remote_fs.RemoteFS.pull_file"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#pullfile"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2665"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#pull_file-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#pull_file-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/pull_file
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: path
|
||||
type: string
|
||||
description: Path on the device to pull file from
|
||||
response:
|
||||
- type: string
|
||||
description: Contents of file in base64
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L390
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
name: Pull Folder
|
||||
short_description: Retrieve a folder from the device's file system
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
byte[] folder = driver.pullFolder("/path/to/device/foo.bar");
|
||||
python:
|
||||
|
|
||||
folder_base64 = self.driver.pull_folder('/path/to/device/foo.bar');
|
||||
javascript_wd:
|
||||
|
|
||||
let folderBase64 = await driver.pullFolder('/path/to/device/foo.bar');
|
||||
javascript_wdio:
|
||||
|
|
||||
let data = driver.pullFolder('/data/local/tmp/file.txt');
|
||||
ruby:
|
||||
|
|
||||
pull_folder('/data/local/tmp/file.txt')
|
||||
ruby_core:
|
||||
|
|
||||
@driver.pull_folder('/data/local/tmp/file.txt')
|
||||
php:
|
||||
|
|
||||
$folderBase64 = $driver->pullFolder($path);
|
||||
csharp:
|
||||
|
|
||||
byte[] folder = driver.PullFolder("/path/to/device");
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/InteractsWithFiles.html#pullFolder-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.remote_fs.RemoteFS.pull_folder"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#pullfolder"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2688"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#pull_folder-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#pull_folder-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/pull_folder
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: path
|
||||
type: string
|
||||
description: Path to an entire folder on the device
|
||||
response:
|
||||
- type: string
|
||||
description: A string of Base64 encoded data, representing a zip archive of the contents of the requested folder.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L393
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
name: Push File
|
||||
short_description: Place a file onto the device in a particular place
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.pushFile("/path/to/device/foo.bar", new File("/Users/johndoe/files/foo.bar"));
|
||||
python:
|
||||
|
|
||||
dest_path = '/data/local/tmp/test_push_file.txt'
|
||||
data = bytes('This is the contents of the file to push to the device.', 'utf-8')
|
||||
self.driver.push_file(dest_path, base64.b64encode(data).decode('utf-8'))
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.pushFileToDevice('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=');
|
||||
javascript_wdio:
|
||||
|
|
||||
let data = new Buffer("Hello World").toString('base64');
|
||||
driver.pushFile('/data/local/tmp/file.txt', data);
|
||||
ruby:
|
||||
|
|
||||
push_file('/path/to/device/foo.bar', File.read('path/to/file.png'))
|
||||
ruby_core:
|
||||
|
|
||||
@driver.push_file('/path/to/device/foo.bar', File.read('path/to/file.png'))
|
||||
php:
|
||||
|
|
||||
$driver->pushFile('/path/to/device/foo.bar', 'QXJlIHlvdXIgYmVlcnMgb2theT8=');
|
||||
csharp:
|
||||
|
|
||||
driver.PushFile("/path/to/device/foo.bar", new FileInfo("/Users/johndoe/files/foo.bar"))
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/PushesFiles.html#pushFile-java.lang.String-java.io.File-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.remote_fs.RemoteFS.push_file"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#pushfile"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2640"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#push_file-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#push_file-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO: Verify this
|
||||
windows:
|
||||
windows: false # TODO: Verify this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/push_file
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: path
|
||||
type: string
|
||||
description: Path to install the data to
|
||||
- name: data
|
||||
type: string
|
||||
description: Contents of file in base64
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L387
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
name: Is Device Locked
|
||||
short_description: Check whether the device is locked or not
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
boolean isLocked = driver.isDeviceLocked();
|
||||
python:
|
||||
|
|
||||
self.driver.is_locked()
|
||||
javascript_wd:
|
||||
|
|
||||
let isLocked = await driver.isLocked();
|
||||
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.isLocked();
|
||||
ruby:
|
||||
|
|
||||
device_locked?
|
||||
ruby_core:
|
||||
|
|
||||
@driver.device_locked?
|
||||
php:
|
||||
|
|
||||
// TODO PHP sample
|
||||
csharp:
|
||||
|
|
||||
bool isLocked = driver.IsLocked(); // Supported by IOSDriver & AndroidDriver
|
||||
|
||||
client_docs:
|
||||
java: "http://appium.github.io/java-client/io/appium/java_client/LocksDevice.html#isDeviceLocked--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.is_locked"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#islocked"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2407"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#device_locked%3F-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#device_locked%3F-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO Confirm this that mouse movements
|
||||
windows:
|
||||
windows: true # TODO Confirm this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/is_locked
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
response:
|
||||
- type: boolean
|
||||
description: True if the device is locked, false if not
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L313
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
name: Lock
|
||||
short_description: Lock the device
|
||||
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.lockDevice();
|
||||
python:
|
||||
|
|
||||
self.driver.lock();
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.lock();
|
||||
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.lock();
|
||||
ruby:
|
||||
|
|
||||
lock
|
||||
lock(5) # lock 5 seconds
|
||||
ruby_core:
|
||||
|
|
||||
@driver.lock
|
||||
@driver.lock(5) # lock 5 seconds
|
||||
php:
|
||||
|
|
||||
$driver->lock(5);
|
||||
csharp:
|
||||
|
|
||||
driver.Lock(); // Supported by IOSDriver & AndroidDriver
|
||||
|
||||
client_docs:
|
||||
java: "http://appium.github.io/java-client/io/appium/java_client/LocksDevice.html#lockDevice--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.lock"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#lock"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2363"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#lock-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#lock-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO Confirm this that mouse movements
|
||||
windows:
|
||||
windows: true # TODO Confirm this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/lock
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: seconds
|
||||
type: number
|
||||
description: How long to lock the screen (iOS only).
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L307
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
name: Rotate
|
||||
short_description: Rotate the device in three dimensions
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.rotate(new DeviceRotation(10, 10, 10));
|
||||
javascript_wd:
|
||||
|
|
||||
driver.rotateDevice({x: 114, y: 198, duration: 5, radius: 3, rotation: 220, touchCount: 2});
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.rotateDevice(100, 100);
|
||||
php:
|
||||
|
|
||||
// TODO PHP sample
|
||||
csharp:
|
||||
|
|
||||
driver.Rotate(new Dictionary<string, int> { { "x", 114 }, { "y", 198 }, { "duration", 5 }, { "radius", 3 }, { "rotation", 220 }, { "touchCount", 2 } });
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/AppiumDriver.html#rotate-org.openqa.selenium.DeviceRotation-"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#rotatedevice"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2470"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: true
|
||||
android:
|
||||
uiautomator2: false
|
||||
espresso: false
|
||||
uiautomator: false
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/rotate
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: x
|
||||
type: number
|
||||
description: x offset to use for the center of the rotate gesture
|
||||
- name: y
|
||||
type: number
|
||||
description: y offset to use for the center of the rotate gesture
|
||||
- name: radius
|
||||
type: number
|
||||
description: The distance in points from the center to the edge of the circular path
|
||||
- name: rotation
|
||||
type: number
|
||||
description: The length of rotation in radians
|
||||
- name: touchCount
|
||||
type: number
|
||||
description: The number of touches to use in the specified gesture. (Effectively, the number of fingers a user would use to make the specified gesture.) Valid values are 1 to 5.
|
||||
- name: duration
|
||||
type: number
|
||||
description: The length of hold time for the specified gesture, in seconds.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L361
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
name: Shake
|
||||
short_description: Perform a shake action on the device
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.shake();
|
||||
python:
|
||||
|
|
||||
self.driver.shake();
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.shake();
|
||||
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.shake();
|
||||
ruby:
|
||||
|
|
||||
shake
|
||||
ruby_core:
|
||||
|
|
||||
@driver.shake
|
||||
php:
|
||||
|
|
||||
$driver->shake();
|
||||
csharp:
|
||||
|
|
||||
driver.ShakeDevice();
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/ios/ShakesDevice.html#shake--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.shake"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#shake"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2342"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#shake-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#shake-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/iOS/IOSDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true (simulator only)
|
||||
uiautomation: true
|
||||
android:
|
||||
uiautomator2: false
|
||||
espresso: false
|
||||
uiautomator: false
|
||||
mac:
|
||||
mac: false # TODO Confirm this that mouse movements
|
||||
windows:
|
||||
windows: false # TODO Confirm this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/shake
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L301
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
name: Unlock
|
||||
short_description: Unlock the device
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.lockDevice();
|
||||
driver.unlockDevice();
|
||||
python:
|
||||
|
|
||||
self.driver.lock();
|
||||
self.driver.unlock();
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.lock();
|
||||
await driver.unlock();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.lock()
|
||||
.unlock();
|
||||
ruby:
|
||||
|
|
||||
unlock
|
||||
ruby_core:
|
||||
|
|
||||
@driver.unlock
|
||||
php:
|
||||
|
|
||||
// TODO PHP sample
|
||||
csharp:
|
||||
|
|
||||
driver.Unlock(); // Supported by IOSDriver & AndroidDriver
|
||||
|
||||
client_docs:
|
||||
java: "http://appium.github.io/java-client/io/appium/java_client/LocksDevice.html#unlockDevice--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.hw_actions.HardwareActions.unlock"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#unlock"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2386"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#unlock-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#unlock-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Android/AndroidDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO Confirm this that mouse movements
|
||||
windows:
|
||||
windows: true # TODO Confirm this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/unlock
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L310
|
||||
@@ -0,0 +1,90 @@
|
||||
---
|
||||
name: Hide Keyboard
|
||||
short_description: Hide soft keyboard
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.hideKeyboard();
|
||||
python:
|
||||
|
|
||||
self.driver.hide_keyboard()
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.hideDeviceKeyboard();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.hideKeyboard();
|
||||
ruby:
|
||||
|
|
||||
hide_keyboard
|
||||
ruby_core:
|
||||
|
|
||||
@driver.hide_keyboard
|
||||
php:
|
||||
|
|
||||
$driver->hideKeyboard();
|
||||
$driver->hideKeyboard(array(
|
||||
'keyName' => 'Done'
|
||||
));
|
||||
csharp:
|
||||
|
|
||||
driver.HideKeyboard();
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/HidesKeyboard.html#hideKeyboard--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.keyboard.Keyboard.hide_keyboard"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#hidekeyboard"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2723"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#hide_keyboard-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#hide_keyboard-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/AppiumDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: true
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/hide_keyboard
|
||||
method: 'POST'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: strategy
|
||||
type: string
|
||||
description: Hide keyboard strategy (optional, UIAutomation only). Available strategies - 'press', 'pressKey', 'swipeDown', 'tapOut', 'tapOutside', 'default'.
|
||||
- name: key
|
||||
type: string
|
||||
description: Key (optional)
|
||||
- name: keyCode
|
||||
type: string
|
||||
description: Key code (optional)
|
||||
- name: keyName
|
||||
type: string
|
||||
description: Key name (optional)
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L381
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
name: Is Keyboard Shown
|
||||
short_description: Whether or not the soft keyboard is shown
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
boolean isKeyboardShown = driver.isKeyboardShown();
|
||||
python:
|
||||
|
|
||||
driver.is_keyboard_shown()
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.isKeyboardShown();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.isKeyboardShown();
|
||||
ruby:
|
||||
|
|
||||
is_keyboard_shown
|
||||
ruby_core:
|
||||
|
|
||||
@driver.is_keyboard_shown
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/HasOnScreenKeyboard.html#isKeyboardShown--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.keyboard.Keyboard.is_keyboard_shown"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2638"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#iskeyboardshown"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#is_keyboard_shown-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#is_keyboard_shown-instance_method"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: true
|
||||
uiautomation: true
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: true
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: false
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/is_keyboard_shown
|
||||
method: 'GET'
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
response:
|
||||
- type: boolean
|
||||
description: True if the keyboard is shown.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: routes.js
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
name: Long Press Key Code
|
||||
short_description: Press and hold a particular key code on an Android device
|
||||
|
||||
description: See https://developer.android.com/reference/android/view/KeyEvent.html# for reference of available Android key codes
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.longPressKeyCode(AndroidKeyCode.HOME);
|
||||
python:
|
||||
|
|
||||
self.driver.long_press_keycode(10);
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.longPressKeyCode(10);
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.longPressKeycode(10);
|
||||
ruby:
|
||||
|
|
||||
long_press_keycode(10)
|
||||
ruby_core:
|
||||
|
|
||||
@driver.long_press_keycode(10)
|
||||
php:
|
||||
|
|
||||
// TODO PHP sample
|
||||
csharp:
|
||||
|
|
||||
driver.LongPressKeyCode(WindowsKeyCode.Back);
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/windows/PressesKeyCode.html#longPressKeyCode-int-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.keyboard.Keyboard.long_press_keycode"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#longpresskeycode"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2478"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#long_press_keycode-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#long_press_keycode-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Windows/WindowsDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO Confirm this that mouse movements
|
||||
windows:
|
||||
windows: true # TODO Confirm this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/long_press_keycode
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: keycode
|
||||
type: number
|
||||
description: Key code pressed on the device. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
|
||||
- name: metastate
|
||||
type: number
|
||||
description: Metastate for the keypress. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
|
||||
- name: flags
|
||||
type: number
|
||||
description: Flags for the keypress. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L331
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
name: Press Key Code
|
||||
short_description: Press a particular key on an Android Device
|
||||
|
||||
description: See https://developer.android.com/reference/android/view/KeyEvent.html for reference of available Android key code values
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.pressKeyCode(AndroidKeyCode.SPACE, AndroidKeyMetastate.META_SHIFT_ON);
|
||||
python:
|
||||
|
|
||||
self.driver.press_keycode(10);
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.pressKeyCode(10);
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.pressKeycode(10);
|
||||
ruby:
|
||||
|
|
||||
press_keycode(10)
|
||||
ruby_core:
|
||||
|
|
||||
@driver.press_keycode(10)
|
||||
php:
|
||||
|
|
||||
// TODO PHP sample
|
||||
csharp:
|
||||
|
|
||||
driver.PressKeyCode(WindowsKeyCode.Windows);
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/windows/PressesKeyCode.html#pressKeyCode-int-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.keyboard.Keyboard.press_keycode"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#presskeycode"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2457"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#press_keycode-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#press_keycode-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO PHP documentation link
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/blob/master/src/Appium.Net/Appium/Windows/WindowsDriver.cs"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false # TODO Confirm this that mouse movements
|
||||
windows:
|
||||
windows: true # TODO Confirm this
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/press_keycode
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: keycode
|
||||
type: number
|
||||
description: Key code pressed on the device. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
|
||||
- name: metastate
|
||||
type: number
|
||||
description: Metastate for the keypress. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
|
||||
- name: flags
|
||||
type: number
|
||||
description: Flags for the keypress. See [Key Event](http://developer.android.com/reference/android/view/KeyEvent.html).
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L328
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
name: GSM Call
|
||||
short_description: Make GSM call (Emulator only)
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.makeGsmCall("5551234567", GsmCallActions.CALL);
|
||||
python:
|
||||
|
|
||||
self.driver.make_gsm_call('5551234567', GsmCallActions.CALL)
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.gsmCall('555-123-4567', 'Phone');
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.gsmCall('555-123-4567', 'call');
|
||||
ruby:
|
||||
|
|
||||
gsm_call(phone_number: '5551234567', action: :call)
|
||||
ruby_core:
|
||||
|
|
||||
@driver.gsm_call(phone_number: '5551234567', action: :call)
|
||||
php:
|
||||
|
|
||||
// TODO
|
||||
csharp:
|
||||
|
|
||||
// TODO
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#makeGsmCall-java.lang.String-io.appium.java_client.android.GsmCallActions-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.gsm.Gsm.make_gsm_call"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3183"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#gsmcall"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_call-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_call-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
uiautomator2: true
|
||||
espresso: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/gsm_call
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: phoneNumber
|
||||
type: string
|
||||
description: The phone number to call to
|
||||
- name: action
|
||||
type: string
|
||||
description: The action - 'call', 'accept', 'cancel', 'hold'.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L340
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: GSM Signal
|
||||
short_description: Set GSM signal strength (Emulator only)
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.setGsmSignalStrength(GsmSignalStrength.GOOD);
|
||||
python:
|
||||
|
|
||||
self.driver.set_gsm_signal(GsmSignalStrength.GOOD)
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.gsmSignal(3);
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.gsmSignal(3);
|
||||
ruby:
|
||||
|
|
||||
gsm_signal :good
|
||||
ruby_core:
|
||||
|
|
||||
@driver.gsm_signal :good
|
||||
php:
|
||||
|
|
||||
// TODO
|
||||
csharp:
|
||||
|
|
||||
// TODO
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#setGsmSignalStrength-io.appium.java_client.android.GsmSignalStrength-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.gsm.Gsm.set_gsm_signal"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3221"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#gsmsignal"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_signal-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_signal-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
uiautomator2: true
|
||||
espresso: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/gsm_signal
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: signalStrength
|
||||
type: string
|
||||
description: Signal strength in the range [0, 4]
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L343
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: GSM Voice
|
||||
short_description: Set GSM voice state (Emulator only)
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.setGsmVoice(GsmVoiceState.HOME);
|
||||
python:
|
||||
|
|
||||
self.driver.set_gsm_voice(GsmVoiceState.HOME)
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.gsmVoice('Voice state');
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.gsmVoice('home');
|
||||
ruby:
|
||||
|
|
||||
gsm_voice :home
|
||||
ruby_core:
|
||||
|
|
||||
@driver.gsm_voice :home
|
||||
php:
|
||||
|
|
||||
// TODO
|
||||
csharp:
|
||||
|
|
||||
// TODO
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#setGsmVoice-io.appium.java_client.android.GsmVoiceState-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.gsm.Gsm.set_gsm_voice"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3241"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#gsmvoice"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_voice-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#gsm_voice-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
uiautomator2: true
|
||||
espresso: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/gsm_voice
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: state
|
||||
type: string
|
||||
description: State of GSM voice - 'unregistered', 'home', 'roaming', 'searching', 'denied', 'off', 'on'.
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L346
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
name: Network speed
|
||||
short_description: Set network speed (Emulator only)
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.setNetworkSpeed(NetworkSpeed.LTE);
|
||||
python:
|
||||
|
|
||||
self.driver.set_network_speed(NetSpeed.LTE)
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.networkSpeed('Network type');
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.toggleNetworkSpeed('lte');
|
||||
ruby:
|
||||
|
|
||||
set_network_speed :lte
|
||||
ruby_core:
|
||||
|
|
||||
@driver.set_network_speed :lte
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#setNetworkSpeed-io.appium.java_client.android.NetworkSpeed-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.network.Network.set_network_speed"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3411"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#togglenetworkspeed"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_network_speed-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#set_network_speed-instance_method"
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
uiautomator2: true
|
||||
espresso: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/network_speed
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: netspeed
|
||||
type: string
|
||||
description: Network type - 'full','gsm', 'edge', 'hscsd', 'gprs', 'umts', 'hsdpa', 'lte', 'evdo'
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L346
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
name: Send SMS
|
||||
short_description: Simulate an SMS message (Emulator only)
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.sendSMS("555-123-4567", "Hey lol");
|
||||
python:
|
||||
|
|
||||
self.driver.send_sms('555-123-4567', 'Hey lol')
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.sendSms('555-123-4567', 'Hey lol');
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.sendSms('555-123-4567', 'Hey lol');
|
||||
ruby:
|
||||
|
|
||||
send_sms(phone_number: '555-123-4567', message: 'Hey lol')
|
||||
ruby_core:
|
||||
|
|
||||
@driver.send_sms(phone_number: '555-123-4567', message: 'Hey lol')
|
||||
php:
|
||||
|
|
||||
// TODO
|
||||
csharp:
|
||||
|
|
||||
// TODO
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsSpecialEmulatorCommands.html#sendSMS-java.lang.String-java.lang.String-"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.android.html#webdriver.extensions.android.sms.Sms.send_sms"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L3183"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#sendsms"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#send_sms-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Android/Device/Emulator#send_sms-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: false
|
||||
csharp: false
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/send_sms
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
json_parameters:
|
||||
- name: phoneNumber
|
||||
type: string
|
||||
description: The phone number to send the SMS too
|
||||
- name: message
|
||||
type: string
|
||||
description: The SMS message
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L337
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
name: Toggle Airplane Mode
|
||||
short_description: Toggle airplane mode on device
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.toggleAirplaneMode();
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.toggleAirplaneMode();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.toggleAirplaneMode();
|
||||
ruby:
|
||||
|
|
||||
toggle_flight_mode
|
||||
ruby_core:
|
||||
|
|
||||
@driver.toggle_flight_mode
|
||||
php:
|
||||
|
|
||||
// TODO
|
||||
csharp:
|
||||
|
|
||||
// TODO
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsNetworkStateManagement.html#toggleAirplaneMode--"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#toggleairplanemode"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2712"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#toggle_flight_mode-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Device#toggle_flight_mode-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: false
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/toggle_airplane_mode
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L396
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
name: Toggle Data
|
||||
short_description: Switch the state of data service
|
||||
description:
|
||||
|
|
||||
Switch the state of data service.
|
||||
|
||||
(For Android) This API does not work for Android API level 21+
|
||||
because it requires system or carrier privileged permission, and Android <= 21 does not support granting permissions.
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.toggleData();
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.toggleData();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.toggleData();
|
||||
ruby:
|
||||
|
|
||||
toggle_data
|
||||
ruby_core:
|
||||
|
|
||||
@driver.toggle_data
|
||||
php:
|
||||
|
|
||||
// TODO
|
||||
csharp:
|
||||
|
|
||||
// TODO
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/SupportsNetworkStateManagement.html#toggleData--"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#toggledata"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2771"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_data-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_data-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: false
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/toggle_data
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L399
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
name: Toggle Location Services
|
||||
short_description: Switch the state of the location service
|
||||
|
||||
example_usage:
|
||||
java:
|
||||
|
|
||||
driver.toggleLocationServices();
|
||||
python:
|
||||
|
|
||||
self.driver.toggle_location_services();
|
||||
javascript_wd:
|
||||
|
|
||||
await driver.toggleLocationServices();
|
||||
javascript_wdio:
|
||||
|
|
||||
driver.toggleLocationServices();
|
||||
ruby:
|
||||
|
|
||||
toggle_location_services
|
||||
ruby_core:
|
||||
|
|
||||
@driver.toggle_location_services
|
||||
php:
|
||||
|
|
||||
// TODO
|
||||
csharp:
|
||||
|
|
||||
// TODO
|
||||
|
||||
client_docs:
|
||||
java: "https://appium.github.io/java-client/io/appium/java_client/android/AndroidDriver.html#toggleLocationServices--"
|
||||
python: "https://appium.github.io/python-client-sphinx/webdriver.extensions.html#webdriver.extensions.location.Location.toggle_location_services"
|
||||
javascript_wdio: "https://webdriver.io/docs/api/appium.html#togglelocationservices"
|
||||
javascript_wd: "https://github.com/admc/wd/blob/master/lib/commands.js#L2758"
|
||||
ruby: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_location_services-instance_method"
|
||||
ruby_core: "https://www.rubydoc.info/github/appium/ruby_lib_core/master/Appium/Core/Device#toggle_location_services-instance_method"
|
||||
php: "https://github.com/appium/php-client/" # TODO
|
||||
csharp: "https://github.com/appium/appium-dotnet-driver/" # TODO
|
||||
|
||||
# Driver support by platform
|
||||
driver_support:
|
||||
ios:
|
||||
xcuitest: false
|
||||
uiautomation: false
|
||||
android:
|
||||
espresso: true
|
||||
uiautomator2: true
|
||||
uiautomator: true
|
||||
mac:
|
||||
mac: false
|
||||
windows:
|
||||
windows: false
|
||||
client_support:
|
||||
java: true
|
||||
python: true
|
||||
ruby: true
|
||||
php: true
|
||||
csharp: true
|
||||
javascript_wd: true
|
||||
javascript_wdio: true
|
||||
|
||||
# Information about the HTTP endpoints
|
||||
endpoint:
|
||||
url: /session/:session_id/appium/device/toggle_location_services
|
||||
method: POST
|
||||
url_parameters:
|
||||
- name: session_id
|
||||
description: ID of the session to route the command to
|
||||
|
||||
# Links to specifications. Should link to at least one specification
|
||||
specifications:
|
||||
jsonwp: https://github.com/appium/appium-base-driver/blob/master/lib/protocol/routes.js#L405
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user