mirror of
https://github.com/appium/appium.git
synced 2026-11-03 07:34:36 +08:00
Compare commits
80
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35f4e2b7e4 | ||
|
|
568e6d3b19 | ||
|
|
b48a697d5b | ||
|
|
422142302f | ||
|
|
c65054c232 | ||
|
|
888d892a17 | ||
|
|
4f65cb3865 | ||
|
|
e98928a39d | ||
|
|
03c505d321 | ||
|
|
2a12b88b2f | ||
|
|
734127144d | ||
|
|
8c421220c5 | ||
|
|
0cad4b785c | ||
|
|
00e7e3f1ef | ||
|
|
75183ba38b | ||
|
|
ad1dce5545 | ||
|
|
8c86e355d2 | ||
|
|
4156b7bf6b | ||
|
|
7055a0b281 | ||
|
|
bc3f1373fd | ||
|
|
2bbac72667 | ||
|
|
f04e1171d0 | ||
|
|
696c94f1ab | ||
|
|
6f846f76c9 | ||
|
|
d8588e107c | ||
|
|
c5bbb950ed | ||
|
|
fb4f0408dc | ||
|
|
697b4427e4 | ||
|
|
6fb05b2fff | ||
|
|
7add23e418 | ||
|
|
b036dde5dd | ||
|
|
1f99c97264 | ||
|
|
df31cddbe7 | ||
|
|
9d5a737daa | ||
|
|
0ca54b7994 | ||
|
|
7942118429 | ||
|
|
0aac077e30 | ||
|
|
5ef4ae9206 | ||
|
|
a22c97dbf9 | ||
|
|
57b0ee5dbb | ||
|
|
31a3cee0bc | ||
|
|
b28a1134f0 | ||
|
|
8f7171c42a | ||
|
|
da230ca243 | ||
|
|
edde4882f0 | ||
|
|
d8323b3d3c | ||
|
|
ed07ae3046 | ||
|
|
5d1090555f | ||
|
|
4b5ab4da7b | ||
|
|
f036f0a612 | ||
|
|
79105b59e2 | ||
|
|
783989b56c | ||
|
|
49eddb4368 | ||
|
|
b4670e13f9 | ||
|
|
fe7b7b6d21 | ||
|
|
7d7b510a03 | ||
|
|
63d8f2ca2d | ||
|
|
8b33414901 | ||
|
|
949719811a | ||
|
|
47ec6af185 | ||
|
|
9ee40374f5 | ||
|
|
e9042b85d9 | ||
|
|
7bb4e07d68 | ||
|
|
098ee1932d | ||
|
|
7c59380e6b | ||
|
|
b763880779 | ||
|
|
a3fad3ed28 | ||
|
|
6055f162d8 | ||
|
|
5291ca672b | ||
|
|
23224cf002 | ||
|
|
0b5f7a4085 | ||
|
|
d2cf2ed4e3 | ||
|
|
3f3b1529ed | ||
|
|
8c8bfe824d | ||
|
|
2bb4f32329 | ||
|
|
ac2c735968 | ||
|
|
29bf77cf5a | ||
|
|
28c6204b75 | ||
|
|
e0dc5b6299 | ||
|
|
6fb1f2cc32 |
@@ -13,9 +13,9 @@ jobs:
|
||||
node-version: [14.x, 16.x, 18.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3
|
||||
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3
|
||||
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
@@ -33,7 +33,7 @@ jobs:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3
|
||||
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
- name: Install dependencies
|
||||
uses: bahmutov/npm-install@1a235c31658a322a3b024444759650ee6345c26d # tag=v1
|
||||
with:
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3
|
||||
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Install Appium
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
name: Run FOSSA Analysis
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3
|
||||
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
with:
|
||||
ref: master
|
||||
- name: Install dependencies
|
||||
|
||||
@@ -10,3 +10,4 @@ package.json
|
||||
**/generated/**
|
||||
# generated
|
||||
packages/types/lib/appium-config.ts
|
||||
**/*.hbs
|
||||
|
||||
Vendored
+1
@@ -50,6 +50,7 @@
|
||||
"internalConsoleOptions": "openOnSessionStart",
|
||||
"name": "Typedoc",
|
||||
"program": "${workspaceFolder}/node_modules/.bin/typedoc",
|
||||
"args": ["--logLevel", "Verbose"],
|
||||
"request": "launch",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
|
||||
Vendored
+15
-2
@@ -4,11 +4,24 @@
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "dev",
|
||||
"group": {"kind": "build", "isDefault": true},
|
||||
"problemMatcher": ["$tsc-watch"],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$tsc-watch"
|
||||
],
|
||||
"label": "npm: dev",
|
||||
"detail": "npm run dev",
|
||||
"isBackground": true
|
||||
},
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "typedoc",
|
||||
"problemMatcher": [],
|
||||
"label": "npm: typedoc",
|
||||
"detail": "typedoc --logLevel Verbose",
|
||||
"group": "build"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+31
-18
@@ -3,24 +3,30 @@
|
||||
module.exports = (wallaby) => {
|
||||
return {
|
||||
compilers: {
|
||||
'**/*.js': wallaby.compilers.babel(),
|
||||
'**/*.js': wallaby.compilers.typeScript({
|
||||
allowJs: true,
|
||||
allowSyntheticDefaultImports: true,
|
||||
resolveJsonModule: true,
|
||||
isolatedModules: true,
|
||||
}),
|
||||
'**/*.ts?(x)': wallaby.compilers.typeScript(),
|
||||
},
|
||||
debug: true,
|
||||
env: {
|
||||
type: 'node',
|
||||
},
|
||||
files: [
|
||||
'./packages/**/*.js',
|
||||
'./packages/**/*.json',
|
||||
'!./packages/**/build/**',
|
||||
'!./packages/**/test/**/*-specs.js',
|
||||
'!./packages/**/test/**/*.spec.js',
|
||||
'!./packages/*/node_modules/**',
|
||||
'!./packages/*/gulpfile.js',
|
||||
'!./packages/*/scripts/**',
|
||||
'./packages/*/test/**/fixtures/**/*',
|
||||
'./babel.config.json',
|
||||
// below this are fixtures
|
||||
'./packages/*/build/**/*',
|
||||
'./packages/*/lib/**/*.(j|t)s',
|
||||
'./packages/*/test/**/*helper*.(j|t)s',
|
||||
'./packages/*/test/**/*mock*.(j|t)s',
|
||||
'./packages/*/package.json',
|
||||
'./packages/*/tsconfig*.json',
|
||||
'./packages/*/test/**/fixture?(s)/**/*',
|
||||
{
|
||||
instrument: false,
|
||||
pattern: './packages/typedoc-plugin-appium/resources/**/*',
|
||||
},
|
||||
{
|
||||
binary: true,
|
||||
pattern: './packages/support/test/unit/assets/sample_binary.plist',
|
||||
@@ -33,17 +39,21 @@ module.exports = (wallaby) => {
|
||||
instrument: false,
|
||||
pattern: './packages/base-driver/static/**/*',
|
||||
},
|
||||
{
|
||||
instrument: false,
|
||||
pattern: './packages/typedoc-plugin-appium/lib/theme/resources/**',
|
||||
},
|
||||
'!./packages/*/test/**/*-specs.js',
|
||||
'!./packages/*/test/**/*.e2e.spec.(j|t)s',
|
||||
'!**/local_appium_home/**',
|
||||
],
|
||||
testFramework: 'mocha',
|
||||
tests: ['./packages/*/test/unit/**/*.spec.js', '!**/local_appium_home/**'],
|
||||
tests: ['./packages/*/test/unit/**/*.spec.(j|t)s', '!**/local_appium_home/**'],
|
||||
workers: {
|
||||
restart: true,
|
||||
// restart: true,
|
||||
},
|
||||
setup() {
|
||||
// This copied out of `./test/setup.js`, which uses `@babel/register`.
|
||||
// Wallaby doesn't need `@babel/register` (and it probably makes Wallaby slow),
|
||||
// but we need the other stuff, so here it is.
|
||||
setup(wallaby) {
|
||||
// copied out of `./test/setup.js`
|
||||
|
||||
const chai = require('chai');
|
||||
const chaiAsPromised = require('chai-as-promised');
|
||||
@@ -55,6 +65,9 @@ module.exports = (wallaby) => {
|
||||
|
||||
// `should()` is only necessary when working with some `null` or `undefined` values.
|
||||
global.should = chai.should();
|
||||
|
||||
const mocha = wallaby.testFramework;
|
||||
mocha.timeout(10000);
|
||||
},
|
||||
runMode: 'onsave',
|
||||
};
|
||||
|
||||
@@ -17,11 +17,11 @@ and [Drivers Provided By Third Parties](#drivers-provided-by-third-parties) sect
|
||||
|
||||
:bangbang: Major documentation revision in progress
|
||||
|
||||
:bangbang: Appium core team does not maintain Appium 1.x anymore since the 1st of January 2022. All recent versions of officially supported platform drivers are not compatible to Appium 1.x anymore, and require Appium 2 to run. [Please read the migration guide from 1.x to 2.0](https://github.com/appium/appium/blob/master/packages/appium/docs/en/guides/migrating-1-to-2.md) to manage the Appium server.
|
||||
:bangbang: Appium core team does not maintain Appium 1.x anymore since the 1st of January 2022. All recent versions of officially supported platform drivers are not compatible to Appium 1.x anymore, and require Appium 2 to run. [Please read the migration guide from 1.x to 2.0](https://appium.github.io/appium/docs/en/latest/guides/migrating-1-to-2/) to manage the Appium server.
|
||||
|
||||
Appium is in the final stages of a major revision (to version 2.0). As such, the documentation
|
||||
found around the web may not be correct. The current Appium 2.0 documentation is very much in
|
||||
progress. Currently, it can be found [here](https://appium.github.io/appium/docs/en/2.0/).
|
||||
progress. Currently, it can be found [here](https://appium.github.io/appium/docs/en/latest/).
|
||||
|
||||
### Requirements
|
||||
|
||||
@@ -170,9 +170,9 @@ automation, for mobile and beyond. Finally!
|
||||
If you're new to Appium or want a more comprehensive description of what this is all
|
||||
about, please read our [Introduction to Appium Concepts](/docs/en/about-appium/intro.md).
|
||||
|
||||
### Get Started
|
||||
### Quickstart
|
||||
|
||||
Check out our [Getting Started](http://appium.io/docs/en/about-appium/getting-started) guide
|
||||
Check out our [Quickstart](https://appium.github.io/appium/docs/en/latest/quickstart/) guide
|
||||
to get going with Appium.
|
||||
|
||||
There is also a sample code that contains [many examples of tests in a variety
|
||||
@@ -180,15 +180,9 @@ of different languages](https://github.com/appium/appium/tree/1.x/sample-code)!
|
||||
|
||||
### Documentation
|
||||
|
||||
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) as well.
|
||||
|
||||
[update-appium-io.yml](https://github.com/appium/appium/blob/master/ci-jobs/update-appium-io.yml) creates a PR
|
||||
by [CI job](https://dev.azure.com/AppiumCI/Appium%20CI/_build?definitionId=37).
|
||||
in the appium.io repository with the documentation update.
|
||||
|
||||
Once the PR has been merged, the latest documentation will be in [appium.io](http://appium.io)
|
||||
For prettily-rendered docs, please visit [Appium Documentation](https://appium.github.io/appium).
|
||||
You can always find the full list of Appium doc pages at [Appium's GitHub
|
||||
Repo](https://github.com/appium/appium/tree/master/packages/appium/docs) as well.
|
||||
|
||||
### Contributing
|
||||
|
||||
@@ -201,8 +195,7 @@ Interested in where Appium is heading in the future? Check out the [Roadmap](ROA
|
||||
|
||||
### Project History, Credits & Inspiration
|
||||
|
||||
* [History](http://appium.io/history)
|
||||
* [Credits](/docs/en/contributing-to-appium/credits.md)
|
||||
* [History](https://appium.github.io/appium/docs/en/latest/intro/history/)
|
||||
|
||||
### User Forums
|
||||
|
||||
|
||||
Generated
+1399
-1220
File diff suppressed because it is too large
Load Diff
+18
-17
@@ -45,6 +45,7 @@
|
||||
"lint:fix": "run-s \"lint -- --fix\"",
|
||||
"lint:commit": "commitlint",
|
||||
"lint:staged": "lint-staged",
|
||||
"pack-all": "npm pack --workspaces --include-workspace-root",
|
||||
"prepublishOnly": "run-s rebuild",
|
||||
"reinstall": "run-s clean ci",
|
||||
"rebuild": "run-s clean:artifacts build:all",
|
||||
@@ -52,7 +53,7 @@
|
||||
"sync-pkgs": "run-p sync-pkgs:*",
|
||||
"sync-pkgs:appium-readme": "sync-monorepo-packages --force --no-package-json --packages=packages/appium README.md",
|
||||
"sync-pkgs:common-fields": "sync-monorepo-packages --fields=author,license,bugs,homepage,engines",
|
||||
"sync-pkgs:keywords": "sync-monorepo-packages --field=keywords --packages=\"packages/*\" --packages=\"!packages/eslint-config-appium\" --packages=\"!packages/types\"",
|
||||
"sync-pkgs:keywords": "sync-monorepo-packages --field=keywords --packages=\"packages/*\" --packages=\"!packages/eslint-config-appium\" --packages=\"!packages/types\" --packages\"!packages/typedoc-plugin-appium\"",
|
||||
"sync-pkgs:license": "sync-monorepo-packages --force --no-package-json LICENSE",
|
||||
"stage-synced-pkgs": "git add -A packages/appium/README.md \"packages/*/package.json\"",
|
||||
"test": "npm-run-all -p lint build -s test:unit",
|
||||
@@ -73,44 +74,44 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@colors/colors": "1.5.0",
|
||||
"@commitlint/cli": "17.3.0",
|
||||
"@commitlint/config-conventional": "17.3.0",
|
||||
"@commitlint/cli": "17.4.2",
|
||||
"@commitlint/config-conventional": "17.4.2",
|
||||
"@tsconfig/node14": "1.0.3",
|
||||
"@types/chai": "4.3.4",
|
||||
"@types/chai-as-promised": "7.1.5",
|
||||
"@types/mocha": "10.0.1",
|
||||
"@types/node": "18.11.17",
|
||||
"@types/node": "18.11.18",
|
||||
"@types/semver": "7.3.13",
|
||||
"@types/sinon": "10.0.13",
|
||||
"@types/sinon-chai": "3.2.9",
|
||||
"@types/teen_process": "2.0.0",
|
||||
"@types/ws": "8.5.3",
|
||||
"@types/ws": "8.5.4",
|
||||
"asyncbox": "2.9.4",
|
||||
"chai": "4.3.7",
|
||||
"chai-as-promised": "7.1.1",
|
||||
"chai-webdriverio-async": "2.7.0",
|
||||
"cpy-cli": "4.2.0",
|
||||
"eslint": "8.30.0",
|
||||
"eslint-config-prettier": "8.5.0",
|
||||
"eslint": "8.31.0",
|
||||
"eslint-config-prettier": "8.6.0",
|
||||
"eslint-find-rules": "4.1.0",
|
||||
"eslint-plugin-import": "2.26.0",
|
||||
"eslint-plugin-import": "2.27.4",
|
||||
"eslint-plugin-mocha": "10.1.0",
|
||||
"eslint-plugin-promise": "6.1.1",
|
||||
"fancy-log": "2.0.0",
|
||||
"finalhandler": "1.2.0",
|
||||
"get-port": "5.1.1",
|
||||
"handlebars": "4.7.7",
|
||||
"husky": "8.0.2",
|
||||
"husky": "8.0.3",
|
||||
"json-schema-to-typescript": "11.0.2",
|
||||
"lerna": "6.1.0",
|
||||
"lerna": "6.4.0",
|
||||
"lint-staged": "13.1.0",
|
||||
"log-symbols": "4.1.0",
|
||||
"midnight-smoker": "2.0.0",
|
||||
"midnight-smoker": "2.0.1",
|
||||
"mjpeg-consumer": "2.0.0",
|
||||
"mjpeg-server": "0.3.1",
|
||||
"mocha": "10.2.0",
|
||||
"npm-run-all": "4.1.5",
|
||||
"prettier": "2.8.1",
|
||||
"prettier": "2.8.2",
|
||||
"rewiremock": "3.14.4",
|
||||
"rimraf": "3.0.2",
|
||||
"serve-static": "1.15.0",
|
||||
@@ -119,13 +120,13 @@
|
||||
"sync-monorepo-packages": "1.0.2",
|
||||
"through2": "4.0.2",
|
||||
"ts-node": "10.9.1",
|
||||
"typedoc": "0.23.23",
|
||||
"typedoc": "0.23.24",
|
||||
"typedoc-plugin-markdown": "3.14.0",
|
||||
"typedoc-plugin-resolve-crossmodule-references": "0.3.3",
|
||||
"typescript": "4.7.4",
|
||||
"validate.js": "0.13.1",
|
||||
"webdriverio": "7.28.0",
|
||||
"ws": "8.11.0",
|
||||
"webdriverio": "7.29.1",
|
||||
"ws": "8.12.0",
|
||||
"yaml-js": "0.3.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -138,10 +139,10 @@
|
||||
"overrides": {
|
||||
"jpeg-js": "0.4.4",
|
||||
"@sidvind/better-ajv-errors": {
|
||||
"ajv": "8.11.2"
|
||||
"ajv": "8.12.0"
|
||||
},
|
||||
"ajv-formats": {
|
||||
"ajv": "8.11.2"
|
||||
"ajv": "8.12.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,40 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [2.0.0-beta.50](https://github.com/appium/appium/compare/appium@2.0.0-beta.49...appium@2.0.0-beta.50) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package appium
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [2.0.0-beta.49](https://github.com/appium/appium/compare/appium@2.0.0-beta.48...appium@2.0.0-beta.49) (2023-01-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **appium:** inability to find automationName inside appium:options ([#17966](https://github.com/appium/appium/issues/17966)) ([23224cf](https://github.com/appium/appium/commit/23224cf002b7dd9e4e5d8426b4bbe1cb28f62605))
|
||||
* **appium:** update dependency ajv to v8.12.0 ([783989b](https://github.com/appium/appium/commit/783989b56c80ebc0eebf693c168754130627b55f))
|
||||
* **appium:** update dependency yaml to v2.2.0 ([28c6204](https://github.com/appium/appium/commit/28c6204b751ead304cce21d534c91381fa39d79d))
|
||||
* **appium:** update dependency yaml to v2.2.1 ([b763880](https://github.com/appium/appium/commit/b763880779abaea900ac2c129dfb009b0e8ed0a9))
|
||||
* **execute-driver-plugin:** update dependency webdriverio to v7.28.1 ([2bb4f32](https://github.com/appium/appium/commit/2bb4f32329938e15062e42b585dd760cca5ae17b))
|
||||
* **execute-driver-plugin:** update dependency webdriverio to v7.29.0 ([a3fad3e](https://github.com/appium/appium/commit/a3fad3ed28822b1dfaae72cbfb8d7906ec35e158))
|
||||
* **execute-driver-plugin:** update dependency webdriverio to v7.29.1 ([7c59380](https://github.com/appium/appium/commit/7c59380e6b97691ff16a8d98a912d67b7972593a))
|
||||
* **support:** update dependency axios to v1.2.2 ([5291ca6](https://github.com/appium/appium/commit/5291ca672b3b47c5270e9fd85de3e4ed76a650e0))
|
||||
* **types:** update dependency type-fest to v3.5.0 ([8c8bfe8](https://github.com/appium/appium/commit/8c8bfe824dbe062e24cfe9fc6e1afa2f68cc6e4c))
|
||||
* **types:** update dependency type-fest to v3.5.1 ([4b5ab4d](https://github.com/appium/appium/commit/4b5ab4da7be925d0592c18e8f46a9ce30fbddf8e))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **base-driver:** deprecate non-standard routes ([7055a0b](https://github.com/appium/appium/commit/7055a0b28193f677b21541ddada3c4a314f90f5b))
|
||||
* **typedoc-appium-plugin:** implement cross-referencing of methods ([8b33414](https://github.com/appium/appium/commit/8b334149018f7d49448da9e7982356c72bcd468e))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [2.0.0-beta.48](https://github.com/appium/appium/compare/appium@2.0.0-beta.47...appium@2.0.0-beta.48) (2022-12-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -17,11 +17,11 @@ and [Drivers Provided By Third Parties](#drivers-provided-by-third-parties) sect
|
||||
|
||||
:bangbang: Major documentation revision in progress
|
||||
|
||||
:bangbang: Appium core team does not maintain Appium 1.x anymore since the 1st of January 2022. All recent versions of officially supported platform drivers are not compatible to Appium 1.x anymore, and require Appium 2 to run. [Please read the migration guide from 1.x to 2.0](https://github.com/appium/appium/blob/master/packages/appium/docs/en/guides/migrating-1-to-2.md) to manage the Appium server.
|
||||
:bangbang: Appium core team does not maintain Appium 1.x anymore since the 1st of January 2022. All recent versions of officially supported platform drivers are not compatible to Appium 1.x anymore, and require Appium 2 to run. [Please read the migration guide from 1.x to 2.0](https://appium.github.io/appium/docs/en/latest/guides/migrating-1-to-2/) to manage the Appium server.
|
||||
|
||||
Appium is in the final stages of a major revision (to version 2.0). As such, the documentation
|
||||
found around the web may not be correct. The current Appium 2.0 documentation is very much in
|
||||
progress. Currently, it can be found [here](https://appium.github.io/appium/docs/en/2.0/).
|
||||
progress. Currently, it can be found [here](https://appium.github.io/appium/docs/en/latest/).
|
||||
|
||||
### Requirements
|
||||
|
||||
@@ -170,9 +170,9 @@ automation, for mobile and beyond. Finally!
|
||||
If you're new to Appium or want a more comprehensive description of what this is all
|
||||
about, please read our [Introduction to Appium Concepts](/docs/en/about-appium/intro.md).
|
||||
|
||||
### Get Started
|
||||
### Quickstart
|
||||
|
||||
Check out our [Getting Started](http://appium.io/docs/en/about-appium/getting-started) guide
|
||||
Check out our [Quickstart](https://appium.github.io/appium/docs/en/latest/quickstart/) guide
|
||||
to get going with Appium.
|
||||
|
||||
There is also a sample code that contains [many examples of tests in a variety
|
||||
@@ -180,15 +180,9 @@ of different languages](https://github.com/appium/appium/tree/1.x/sample-code)!
|
||||
|
||||
### Documentation
|
||||
|
||||
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) as well.
|
||||
|
||||
[update-appium-io.yml](https://github.com/appium/appium/blob/master/ci-jobs/update-appium-io.yml) creates a PR
|
||||
by [CI job](https://dev.azure.com/AppiumCI/Appium%20CI/_build?definitionId=37).
|
||||
in the appium.io repository with the documentation update.
|
||||
|
||||
Once the PR has been merged, the latest documentation will be in [appium.io](http://appium.io)
|
||||
For prettily-rendered docs, please visit [Appium Documentation](https://appium.github.io/appium).
|
||||
You can always find the full list of Appium doc pages at [Appium's GitHub
|
||||
Repo](https://github.com/appium/appium/tree/master/packages/appium/docs) as well.
|
||||
|
||||
### Contributing
|
||||
|
||||
@@ -201,8 +195,7 @@ Interested in where Appium is heading in the future? Check out the [Roadmap](ROA
|
||||
|
||||
### Project History, Credits & Inspiration
|
||||
|
||||
* [History](http://appium.io/history)
|
||||
* [Credits](/docs/en/contributing-to-appium/credits.md)
|
||||
* [History](https://appium.github.io/appium/docs/en/latest/intro/history/)
|
||||
|
||||
### User Forums
|
||||
|
||||
|
||||
@@ -22,11 +22,11 @@ extra:
|
||||
link: https://twitter.com/AppiumDevs
|
||||
alternate:
|
||||
- name: English
|
||||
link: /docs/en/
|
||||
link: /appium/docs/en/
|
||||
lang: en
|
||||
- name: 日本
|
||||
link: /docs/ja/
|
||||
link: /appium/docs/ja/
|
||||
lang: ja
|
||||
- name: 中文简体
|
||||
link: /docs/zh/
|
||||
link: /appium/docs/zh/
|
||||
lang: zh
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
title: Application Bundles Caching Logic
|
||||
---
|
||||
|
||||
Appium Base driver provides a feature which enables caching of application builds provided, for example,
|
||||
as `app` capability value or to endpoints similar to the `installApp` one. This article explains common caching
|
||||
principles, so you could create more performant and efficient test suite execution strategies.
|
||||
|
||||
## Why Caching Is Necessary
|
||||
|
||||
Mobile application bundles could reach hundreds of megabytes is size. This could become a serious
|
||||
performance issue if a test suite is executed, and it is necessary to fetch/extract the same application
|
||||
bundle for each test.
|
||||
|
||||
## What Is Cached
|
||||
|
||||
Caching could be applied to application bundles generated by
|
||||
[configureApp](../../../../../packages/base-driver/lib/basedriver/helpers.js) helper call. Inherited drivers
|
||||
can customize their caching logic by providing own `onPostProcess` property definition, but the general
|
||||
rule of thumb is that we need to cache locally all application bundles need to be downloaded and/or extracted
|
||||
first before they could be actually installed on the device under test. On iOS, for example, these are .ipa or
|
||||
.zip compressed application bundles or .aab on Android.
|
||||
|
||||
## How Remote Application Bundles Are Cached
|
||||
|
||||
In order to validate whether an app bundle downloaded from the given URL could be (re)used from the cache the following
|
||||
steps are applied:
|
||||
|
||||
1. The script is sending `HEAD` request to the given link in order to only fetch response headers. If this request fails/
|
||||
times out then no caching is applied.
|
||||
2. The following header values are being extracted: `Last-Modified`, `Cache-Control`. If no `Last-Modified` header is present
|
||||
or the header value cannot be parsed as a valid datetime then no caching is applied.
|
||||
3. The script checks if the given URL is already present in the cache. If the app is not cached yet then it gets downloaded
|
||||
and its current header values along with hashsum are added to the cache.
|
||||
4. If the URL was already in the cache then the script verifies that:
|
||||
- the current `Last-Modified` datetime is not different from the previous one
|
||||
- the difference between the current `Last-Modified` datetime and the cached one is not greater than max-age (if present)
|
||||
- the hashsum of the cached file/folder is not changed (e.g. it was not corrupted while sitting in the cache)
|
||||
5. If all validations above succeed then the cached build is returned, otherwise the currently cached entry gets
|
||||
deleted and a new one is downloaded instead.
|
||||
|
||||
## How Local Application Bundles Are Cached
|
||||
|
||||
It only makes sense to cache application bundles if they need some preprocessing before being installed on the device under test.
|
||||
For example, on iOS .ipa bundles must be unzipped, because the system installer only works with .app folders.
|
||||
|
||||
1. The script verifies if the given bundle path is already present in the cache. If the bundle was not in the cache yet
|
||||
then it gets preprocessed and added there.
|
||||
2. The script validates the hashsum of the bundle and compares it to the previously stored one. If hash sums don't match
|
||||
then the cached item gets deleted and the preprocessing of the bundle repeats.
|
||||
|
||||
## How The Cache File System Is Configured
|
||||
|
||||
The cache where the base driver keeps all application bundles is located in the system temp folder. It is configured
|
||||
on per-process basis, so each test session initialized in scope of the same Appium server process takes advantages
|
||||
of it. It is a [LRU Cache](https://www.npmjs.com/package/lru-cache) with the following limitations:
|
||||
|
||||
- Max items: 1024
|
||||
- Max time to live (TTL) for each entry: 24 hours
|
||||
- TTL is refreshed for each entry upon access
|
||||
|
||||
!!! warning
|
||||
|
||||
Note: The cache root folder is set up for automatic deletion on Appium process termination. This would only
|
||||
work if Appium server is killed with SIGINT or SIGTERM. If SIGKILL is used then no cache cleanup
|
||||
would be performed.
|
||||
@@ -14,7 +14,20 @@ Together these do introduce a few breaking changes to how Appium is installed, h
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
Have a look at the [Appium 2.0 release notes](https://github.com/appium/appium/releases) for the most comprehensive lists of changes. Here we call out the breaking changes and what you need to do do account for them.
|
||||
Here we call out the breaking changes and what you need to do to account for them.
|
||||
|
||||
### :bangbang: Default server base path
|
||||
|
||||
With Appium 1.x, the server would accept commands by default on `http://localhost:4723/wd/hub`. The
|
||||
`/wd/hub` base path was a legacy convention from the days of migrating from Selenium 1 to Selenium
|
||||
2, and is no longer relevant. As such the default base path for the server is now `/`. If you want
|
||||
to retain the old behaviour, you can set the base path via a command line argument as follows:
|
||||
|
||||
```
|
||||
appium --base-path=/wd/hub
|
||||
```
|
||||
|
||||
You can also set server arguments as [Config file](./config.md) properties.
|
||||
|
||||
### :bangbang: Installing drivers during setup
|
||||
|
||||
@@ -32,7 +45,7 @@ If you're running in a CI environment or want to install Appium along with some
|
||||
npm install --global appium --drivers=xcuitest,uiautomator2
|
||||
```
|
||||
|
||||
This will install Appium and the two drivers for you in one go.
|
||||
This will install Appium and the two drivers for you in one go. Please uninstall any existing Appium 1.x npm packages (with `npm uninstall -g appium`) if you get an installation or startup error.
|
||||
|
||||
### :bangbang: Drivers installation path
|
||||
|
||||
|
||||
@@ -2,4 +2,17 @@
|
||||
title: Write a Test (Java)
|
||||
---
|
||||
|
||||
TODO
|
||||
The Appium team maintains an official [client](https://github.com/appium/java-client) for the Java programming language.
|
||||
It is built on top of [Selenium](https://github.com/SeleniumHQ/selenium).
|
||||
You can also use this client in your Kotlin projects.
|
||||
|
||||
Follow the [Add Appium java client to your test framework](https://github.com/appium/java-client#add-appium-java-client-to-your-test-framework)
|
||||
tutorial in order to connect the library to your test framework sources.
|
||||
|
||||
The Appium Java client has dedicated classes to support most of the official Appium drivers. For other drivers
|
||||
you could simply use the [AppiumDriver](https://github.com/appium/java-client/blob/master/src/main/java/io/appium/java_client/AppiumDriver.java) class
|
||||
or build your custom derivatives from it. Check the [Drivers Support](https://github.com/appium/java-client#drivers-support)
|
||||
article to learn more about the current driver class implementations.
|
||||
|
||||
Follow the [Usage Examples](https://github.com/appium/java-client#usage-examples) article in order understand
|
||||
how to invoke Java client features from your test framework.
|
||||
|
||||
@@ -0,0 +1,276 @@
|
||||
---
|
||||
title: Appium 1.xからAppium 2.xへ移行する
|
||||
---
|
||||
|
||||
<!---
|
||||
This document is a guide for those who are using Appium 1.x and wish to migrate to Appium 2.x. It contains a list of breaking changes and how to migrate your environments or test suites to ensure compatibility with Appium 2.0.
|
||||
--->
|
||||
このドキュメントは既にAppium 1.xを利用している人がAppium 2.xに移行するための手引きです。
|
||||
破壊的変更(breaking changes)の一覧や、実行環境・テストコードをAppium 2.0互換にするための方法が含まれます。
|
||||
|
||||
<!---
|
||||
## Overview of Appium 2.0
|
||||
--->
|
||||
|
||||
## Appium 2.0の概要
|
||||
|
||||
<!---
|
||||
Appium 2.0 is the most major new release of Appium in over 5 years. The changes in Appium 2.0 are _not_ primarily related to changes in automation behaviors for specific platforms. Instead, Appium 2.0 reenvisions Appium as a _platform_ where "drivers" (code projects that introduce support for automation of a given platform) and "plugins" (code projects that allow for overriding, altering, extending, or adding behaviors to Appium) can be easily created and shared.
|
||||
--->
|
||||
|
||||
Appium 2.0は過去5年間におけるAppiumのリリース野中で最も大きなリリースです。Appium 2.0の主要な変更は特定のプラットフォームに対する自動化された動作に関するものでは**ありません**。Appium 2.0はAppiumをドライバー(drivers)(あるプラットフォームに対する自動化を支援するためのプロジェクト)とプラグイン(plugins)(Appiumの動作を上書き、代替、拡張、もしくは追加するためのプロジェクト)という容易に実装、共有できる**仕組みを提供するプラットフォーム**として再考しています。
|
||||
|
||||
<!---
|
||||
At the same time, the Appium project is taking the opportunity to remove many old and deprecated bits of functionality.
|
||||
--->
|
||||
|
||||
同時に、Appiumプロジェクトは多くの古くなったり非推奨となっている機能や依存を取り除こうとしています。
|
||||
|
||||
<!---
|
||||
Together these do introduce a few breaking changes to how Appium is installed, how drivers and various features are managed, and protocol support. These are detailed below.
|
||||
--->
|
||||
|
||||
これらに合わせて、Appiumのインストール方法、ドライバーやフィーチャーの管理、プロトコルサポートに関していくつかの破壊的変更をが導入されます。詳細は以下になります。
|
||||
|
||||
<!---
|
||||
## Breaking Changes
|
||||
--->
|
||||
|
||||
## 破壊的変更
|
||||
|
||||
<!---
|
||||
Have a look at the [Appium 2.0 release notes](https://github.com/appium/appium/releases) for the most comprehensive lists of changes. Here we call out the breaking changes and what you need to do to account for them.
|
||||
--->
|
||||
|
||||
リリース毎の変更一覧に関しては[Appium 2.0リリースノート](https://github.com/appium/appium/releases)を確認してください。ここでは破壊的変更と何をする必要があるのかを示します。
|
||||
|
||||
<!---
|
||||
### :bangbang: Installing drivers during setup
|
||||
--->
|
||||
|
||||
### :bangbang: ドライバーのインストール
|
||||
|
||||
<!---
|
||||
When you installed Appium 1.x, all available drivers would be installed at the same time as the main Appium server. This is no longer the case. Simply installing Appium 2.0 (e.g., by `npm install -g appium@next`), will install the Appium server only, but no drivers. To install drivers, you must instead use the new [Appium extension CLI](../cli/extensions.md). For example, to install the latest versions of the XCUITest and UiAutomator2 drivers, after installing Appium you would run the following commands:
|
||||
--->
|
||||
|
||||
Appium 1.xをインストールしたとき、全ての入手可能なドライバーは主となるAppiumサーバーと合わせてインストールされていました。Appium 2.0ではそうではありません。Appium 2.0のインストール(例えば `npm install -g appium@next`)は単にAppiumサーバーのみをインストールし、ドライバーはインストールしません。ドライバーをインストールするためには新しい[Appium拡張コマンドラインインタフェース(Appium extension CLI)](../cli/extensions.md)を使わなければいけません。例えば、最新のXCUITestとUiAutomator2ドライバーをインストールする場合、Appiumをインストールしたのちに次のコマンドを実行する必要があります。
|
||||
|
||||
```bash
|
||||
appium driver install uiautomator2 # installs the latest driver version
|
||||
appium driver install xcuitest@4.12.2 # installs a specific driver version
|
||||
```
|
||||
|
||||
<!---
|
||||
At this point, your drivers are installed and ready. There's a lot more you can do with this CLI so be sure to check out the docs on it. If you're running in a CI environment or want to install Appium along with some drivers all in one step, you can do so using some special flags during install, for example:
|
||||
--->
|
||||
|
||||
これにより、ドライバーはインストールされ、利用可能になります。このCLIはいろいろな機能を提供しているので、CLIのドキュメントを確認してみてください。もしCI上であったり、いくつかのドライバーをAppiumと一緒にインストールしたい場合、以下のようなフラグを利用することで実現可能です。
|
||||
|
||||
```bash
|
||||
npm install --global appium --drivers=xcuitest,uiautomator2
|
||||
```
|
||||
|
||||
<!---
|
||||
This will install Appium and the two drivers for you in one go.
|
||||
--->
|
||||
|
||||
これはAppiumと2つのドライバーを一つのコマンドでインストールします。
|
||||
|
||||
### :bangbang: Drivers installation path
|
||||
|
||||
When you installed Appium 1.x, all available drivers would be installed at the same time as the main Appium server.
|
||||
The path was `/path/to/appium/node_modules`.
|
||||
For example, `appium-webdriveragent` to build WebDriverAgent manually was `/path/to/appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent`.
|
||||
|
||||
Appium 2.0 installs such dependencies in `APPIUM_HOME` environment variable. The default path is `~/.appium`.
|
||||
So, the path to `appium-webdriveragent` could be `$APPIUM_HOME/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent` after installing the XCUITest driver package.
|
||||
|
||||
### :bangbang: Chromedriver installation flags
|
||||
|
||||
In Appium 1.x it was possible to customize the way Chromedriver was installed (as part of the UiAutomator2 driver for example), using the following command line flags:
|
||||
|
||||
* `--chromedriver-skip-install`
|
||||
* `--chromedriver-version`
|
||||
* `--chromedriver-cdnurl`
|
||||
|
||||
Because Appium 2.0 now installs drivers for you, and because these flags were implemented as NPM config flags, they will no longer work. Instead, use the following environment variables during driver installation:
|
||||
|
||||
* `APPIUM_SKIP_CHROMEDRIVER_INSTALL`
|
||||
* `CHROMEDRIVER_VERSION`
|
||||
* `CHROMEDRIVER_CDNURL`
|
||||
|
||||
For example:
|
||||
|
||||
```bash
|
||||
APPIUM_SKIP_CHROMEDRIVER_INSTALL=1 appium driver install uiautomator2
|
||||
```
|
||||
|
||||
### :bangbang: Driver-specific command line options
|
||||
|
||||
With Appium 1.x, command-line options specific to particular drivers were all hosted on the main Appium server. So, for example, `--chromedriver-executable` was a CLI parameter you could use with Appium to set the location of a specific Chromedriver version for use with, say, the UiAutomator2 driver.
|
||||
|
||||
With Appium 2.x, all driver- and platform-specific CLI params have been moved to the drivers themselves. To access them, you'll now need to prepend the argument with the extension type (either `driver` or `plugin`) and the name of the extension. For example, `--chromedriver-executable` becomes `--driver-uiautomator2-chromedriver-executable`.
|
||||
|
||||
### :bangbang: Driver-specific automation commands
|
||||
|
||||
The definition of certain commands that pertain only to specific drivers has been moved to those
|
||||
drivers' implementations. For example, `pressKeyCode` is specific to the UiAutomator2 driver and is
|
||||
now understood only by that driver. In practice, the only breaking change here is the kind of error
|
||||
you would encounter if the appropriate driver is not installed. Previously, you would get a `501
|
||||
Not Yet Implemented` error if using a driver that didn't implement the command. Now, you will get
|
||||
a `404 Not Found` error because if a driver that doesn't know about the command is not active, the
|
||||
main Appium server will not define the route corresponding to the command.
|
||||
|
||||
### :bangbang: Driver updates
|
||||
|
||||
In the past, to get updates to your iOS or Android drivers, you'd simply wait for those updates to be rolled into a new release of Appium, and then update your Appium version. With Appium 2.x, the Appium server and the Appium drivers are versioned and released separately. This means that drivers can be on their own release cadence and that you can get driver updates as they happen, rather than waiting for a new Appium server release. The way to check for driver updates is with the CLI:
|
||||
|
||||
```bash
|
||||
appium driver list --updates
|
||||
```
|
||||
|
||||
If any updates are available, you can then run the `update` command for any given driver:
|
||||
|
||||
```bash
|
||||
appium driver update xcuitest
|
||||
```
|
||||
|
||||
(For a complete description of the update command, check out the [Extension
|
||||
CLI](../cli/extensions.md) doc)
|
||||
|
||||
To update the Appium server itself, you do the same thing as in the past: `npm install -g appium`. Now, installing new versions of the Appium server will leave your drivers intact, so the whole process will be much more quick.
|
||||
|
||||
If you would like to update to a specific version, not the latest, please uninstall the driver and install the desired version using the `install` subcommand instead of `update`.
|
||||
|
||||
```bash
|
||||
appium driver uninstall xcuitest
|
||||
appium driver install xcuitest@4.11.1
|
||||
```
|
||||
|
||||
### :bangbang: Protocol changes
|
||||
|
||||
Appium's API is based on the [W3C WebDriver Protocol](https://www.w3.org/TR/webdriver/), and it has supported this protocol for years. Before the W3C WebDriver Protocol was designed as a web standard, several other protocols were used for both Selenium and Appium. These protocols were the "JSONWP" (JSON Wire Protocol) and "MJSONWP" (Mobile JSON Wire Protocol). The W3C Protocol differs from the (M)JSONWP protocols in a few small ways.
|
||||
|
||||
Up until Appium 2.0, Appium supported both protocols, so that older Selenium/Appium clients could still communicate with newer Appium servers. Moving forward, support for older protocols will be removed.
|
||||
|
||||
### :bangbang: _Capabilities_
|
||||
|
||||
One significant difference between old and new protocols is in the format of capabilities. Previously called "desired capabilities", and now called simply "capabilities", there is now a requirement for a so-called "vendor prefix" on any non-standard capabilities. The list of standard capabilities is given in the [WebDriver Protocol spec](https://www.w3.org/TR/webdriver/#capabilities), and includes a few commonly used capabilities such as `browserName` and `platformName`.
|
||||
|
||||
These standard capabilities continue to be used as-is. All other capabilities must include a "vendor prefix" in their name. A vendor prefix is a string followed by a colon, such as `appium:`. Most of Appium's capabilities go beyond the standard W3C capabilities and must therefore include vendor prefixes (we recommend that you use `appium:` unless directed otherwise by documentation). For example:
|
||||
|
||||
- `appium:app`
|
||||
- `appium:noReset`
|
||||
- `appium:deviceName`
|
||||
|
||||
This requirement may or may not be a breaking change for your test suites when targeting Appium 2.0. If you're using an updated Appium client (at least one maintained by the Appium team), the client will add the `appium:` prefix for you on all necessary capabilities automatically. New versions of [Appium Inspector](https://github.com/appium/appium-inspector) will also do this. Cloud-based Appium providers may also do this. So simply be aware that if you get any messages to the effect that your capabilities lack a vendor prefix, this is how you solve that problem.
|
||||
|
||||
On a related note, it will no longer be possible to start Appium sessions using WebDriver clients that don't support the W3C protocol (see below for a comment to this effect for the WD library).
|
||||
|
||||
To make everyone's lives a bit easier, we've also introduced the option of wrapping up all Appium-related capabilities into one object capability, `appium:options`. You can bundle together anything that you would normally put an `appium:` prefix on into this one capability. Here's an example (in raw JSON) of how you might start an iOS session on the Safari browser using `appium:options`:
|
||||
|
||||
```json
|
||||
{
|
||||
"platformName": "iOS",
|
||||
"browserName": "Safari",
|
||||
"appium:options": {
|
||||
"platformVersion": "14.4",
|
||||
"deviceName": "iPhone 11",
|
||||
"automationName": "XCUITest"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
(Of course, each client will have a different way of creating structured capabilities like `appium:options` or other ones that you might have seen such as `goog:chromeOptions`). NB: capabilities that show up in `appium:options` will overwrite capabilities of the same name that show up at the top level of the object. (The new `appium:options` syntax support by cloud providers may vary.)
|
||||
|
||||
For more information on capabilities, have a look at the [Capabilities Guide](caps.md).
|
||||
|
||||
### :bangbang: _Removed Commands_
|
||||
|
||||
In addition to commands which have been moved to driver implementations, commands which were a part of the old JSON Wire Protocol and not a part of the W3C Protocol are no longer available:
|
||||
|
||||
- TODO (these commands are being identified and removed and will be updated here when complete)
|
||||
|
||||
If you use a modern Appium or Selenium client, you should no longer have access to these anyway, so any breaking changes should appear on the client side first and foremost.
|
||||
|
||||
### :bangbang: Image analysis features moved to plugin
|
||||
|
||||
One of the design goals for Appium 2.0 is to migrate non-core features into special extensions called [plugins](../ecosystem/index.md). This allows people to opt into features which require extra time to download or extra system setup. The various image-related features of Appium (image comparison, finding elements by image, etc...) have been moved into an officially supported plugin called [images](https://github.com/appium/appium/tree/master/packages/images-plugin).
|
||||
|
||||
If you use these image-related methods, to continue accessing them you will need to do two things.
|
||||
|
||||
1. Install the plugin: `appium plugin install images`
|
||||
2. Ensure you start the Appium server with access to run the plugin by including it in the list of plugins designated on the command line, e.g., `appium --use-plugins=images`
|
||||
|
||||
Image-related commands will also be removed on the client side of things, which means you will need to follow the instructions on the plugin README for installing client-side plugins to access these features.
|
||||
|
||||
### :bangbang: Execute Driver Script command moved to plugin
|
||||
|
||||
If you use the advanced Execute Driver Script feature (which allows you to send in a WebdriverIO script to have it executed completely on the server instead of command-by-command from the client), this functionality has been moved to a plugin. Here's what to do to keep using it:
|
||||
|
||||
1. Install the plugin: `appium plugin install execute-driver`
|
||||
2. Ensure you start the Appium server with access to run the plugin by including it in the list of plugins designated on the command line, e.g., `appium --use-plugins=execute-driver`
|
||||
|
||||
### :bangbang: External Files No Longer Supported for `--nodeconfig`, `--default-capabilities`, `--allow-insecure` and `--deny-insecure`
|
||||
|
||||
These options can be provided as strings on the command line (a JSON string for `--nodeconfig` and a comma-separated list of strings for `--allow-insecure` and `--deny-insecure`). Arguments provided on the command line will likely need to be quoted or escaped.
|
||||
|
||||
The recommended method to provide these options is now via a [configuration file](#tada-configuration-files).
|
||||
|
||||
In summary, if you are using a JSON Appium config file, you can simply cut-and-paste the contents of your "nodeconfig" JSON file into the value of the `server.nodeconfig` property. Any CSV-like files you had previously provided for `--allow-insecure` and `--deny-insecure` become the values of the `server.allow-insecure` and `server.deny-insecure` properties in the Appium config files (respectively); both are arrays of strings.
|
||||
|
||||
### :bangbang: Old drivers removed
|
||||
|
||||
The old iOS and Android (UiAutomator 1) drivers and related tools (e.g., `authorize-ios`) have been removed. They haven't been relevant for many years anyway.
|
||||
|
||||
### :warning: Internal packages renamed
|
||||
|
||||
Some Appium-internal NPM packages have been renamed (for example, `appium-base-driver` is now `@appium/base-driver`). This is not a breaking change for Appium users, only for people who have built software that directly incorporates Appium's code.
|
||||
|
||||
### :warning: "WD" JavaScript client library no longer supported
|
||||
|
||||
For many years, some of Appium's authors maintained the [WD](https://github.com/admc/wd) client library. This library has been deprecated and has not been updated for use with the W3C WebDriver protocol. As such, if you're using this library you'll need to move to a more modern one. We recommend [WebdriverIO](https://webdriver.io).
|
||||
|
||||
### :warning: Appium Inspector split out from Appium Desktop
|
||||
|
||||
The inspecting portion of Appium Desktop has been moved to its own app, Appium Inspector: [github.com/appium/appium-inspector](https://github.com/appium/appium-inspector). It's fully compatible with Appium 2.0 servers. Simply download it and run it on its own. You no longer need the GUI Appium Desktop server to inspect apps. The Appium Desktop server will continue to be supported at its original site: [github.com/appium/appium-desktop](https://github.com/appium/appium-desktop). It will simply no longer bundle the Inspector with it. Note that Appium Desktop 1.21 and lower versions depend on the deprecated [WD](https://github.com/admc/wd) client, and are not compatible with Appium 2.0. There is currently no Appium 2.0 support for Appium Desktop planned, now that the Inspector is a standalone app.
|
||||
|
||||
You can also now use the Appium Inspector without downloading anything, by visiting the [web version of Appium Inspector](https://inspector.appiumpro.com). Note that to test against local servers, you'll need to start the server with `--allow-cors` so that the browser-based version of Appium Inspector can access your Appium server to start sessions.
|
||||
|
||||
## Major New Features
|
||||
|
||||
Apart from the breaking changes mentioned above, in this section is a list of some of the major new features you may wish to take advantage of with Appium 2.0.
|
||||
|
||||
### Plugins
|
||||
|
||||
#### :tada: _Server Plugins_
|
||||
|
||||
Appium extension authors can now develop their own server plugins, which can intercept and modify
|
||||
any Appium command, or even adjust the way the underlying Appium HTTP server itself works. To learn
|
||||
more about plugins, read the new [Appium Introduction](../intro/index.md). Interested in building
|
||||
a plugin? Check out the [Building Plugins](../ecosystem/build-plugins.md) guide.
|
||||
|
||||
#### :tada: _Client Plugins_
|
||||
|
||||
TODO
|
||||
|
||||
### :tada: Install drivers and plugins from anywhere
|
||||
|
||||
You're no longer limited to the drivers that come with Appium, or that the Appium team even knows
|
||||
about! Appium extension authors can now develop custom drivers, which can be downloaded or
|
||||
installed via Appium's [Extension CLI](../cli/extensions.md) from NPM, Git, GitHub, or even the
|
||||
local filesystem. Interested in building a driver? Check out the [Building
|
||||
Drivers](../ecosystem/build-drivers.md) guide.
|
||||
|
||||
### :tada: Configuration Files
|
||||
|
||||
Appium now supports _configuration files_ in addition to command-line arguments. In a nutshell, nearly all arguments which Appium 1.x required to be provided on the CLI are now able to be expressed via a configuration file. Configuration files may be in JSON, JS, or YAML format. See the [Config Guide](config.md) for a full explanation.
|
||||
|
||||
## Special Notes for Cloud Providers
|
||||
|
||||
The rest of this document has applied to Appium generally, but some of the architectural changes in Appium 2.0 will constitute breaking changes for Appium-related service providers, whether a cloud-based Appium host or an internal service. At the end of the day, the maintainer of the Appium server is responsible for installing and making available the various Appium drivers and plugins that end users may wish to use.
|
||||
|
||||
We encourage cloud providers to thoroughly read and understand our [recommendation for cloud
|
||||
provider capabilities](caps.md#special-notes-for-cloud-providers) in order to support user needs in
|
||||
an industry-compatible way!
|
||||
@@ -44,6 +44,7 @@ nav:
|
||||
- guides/event-timing.md
|
||||
- guides/log-filters.md
|
||||
- guides/grid.md
|
||||
- guides/caching.md
|
||||
- Developer Reference:
|
||||
- BaseDriver: reference/base_driver.md
|
||||
- Ecosystem:
|
||||
|
||||
@@ -32,8 +32,8 @@ nav:
|
||||
# - cli/index.md
|
||||
# - cli/args.md
|
||||
# - cli/extensions.md
|
||||
# - Guides: # 手引き?
|
||||
# - guides/migrating-1-to-2.md
|
||||
- 手引き:
|
||||
- guides/migrating-1-to-2.md
|
||||
# - guides/managing-exts.md
|
||||
# - guides/config.md
|
||||
# - guides/security.md
|
||||
|
||||
@@ -5,7 +5,6 @@ const {fs} = require('@appium/support');
|
||||
const {log, LANGS, DOCS_DIR} = require('./utils');
|
||||
const path = require('path');
|
||||
const monorepoRoot = path.resolve(__dirname, '..', '..', '..', '..');
|
||||
const {out: typedocOut} = JSON.parse(fs.readFileSync(path.join(monorepoRoot, 'typedoc.json')));
|
||||
const {exec} = require('teen_process');
|
||||
|
||||
const typedocMap = [[['commands', 'appium_base_driver.md'], ['base_driver.md']]];
|
||||
@@ -14,12 +13,14 @@ async function main() {
|
||||
log.info('Generating typedoc reference material');
|
||||
await exec('npm', ['run', 'typedoc'], {cwd: monorepoRoot});
|
||||
|
||||
const {out: typedocOut} = JSON.parse(await fs.readFile(path.join(monorepoRoot, 'typedoc.json')));
|
||||
|
||||
for (const lang of LANGS) {
|
||||
const langRefPath = path.resolve(DOCS_DIR, lang, 'reference');
|
||||
await fs.rimraf(langRefPath);
|
||||
await fs.mkdirp(langRefPath);
|
||||
for (const [from, to] of typedocMap) {
|
||||
const sourcePath = path.resolve(typedocOut, ...from);
|
||||
const sourcePath = path.resolve(monorepoRoot, typedocOut, ...from);
|
||||
const destPath = path.resolve(langRefPath, ...to);
|
||||
log.info(`Copying ${sourcePath} to ${destPath}`);
|
||||
await fs.copyFile(sourcePath, destPath);
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
CREATE_SESSION_COMMAND,
|
||||
DELETE_SESSION_COMMAND,
|
||||
GET_STATUS_COMMAND,
|
||||
promoteAppiumOptions,
|
||||
} from '@appium/base-driver';
|
||||
import AsyncLock from 'async-lock';
|
||||
import {parseCapsForInnerDriver, pullSettings} from './utils';
|
||||
@@ -240,7 +241,7 @@ class AppiumDriver extends DriverCore {
|
||||
// Parse the caps into a format that the InnerDriver will accept
|
||||
const parsedCaps = parseCapsForInnerDriver(
|
||||
jsonwpCaps,
|
||||
w3cCapabilities,
|
||||
promoteAppiumOptions(w3cCapabilities),
|
||||
this.desiredCapConstraints,
|
||||
defaultCapabilities
|
||||
);
|
||||
|
||||
@@ -8,6 +8,7 @@ const REQ_DRIVER_FIELDS = ['driverName', 'automationName', 'platformNames', 'mai
|
||||
/**
|
||||
* @extends {ExtensionCommand<DriverType>}
|
||||
*/
|
||||
|
||||
export default class DriverCommand extends ExtensionCommand {
|
||||
/**
|
||||
* @param {import('./extension-command').ExtensionCommandOptions<DriverType>} opts
|
||||
@@ -21,6 +22,7 @@ export default class DriverCommand extends ExtensionCommand {
|
||||
* Install a driver
|
||||
*
|
||||
* @param {DriverInstallOpts} opts
|
||||
* @return {Promise<ExtRecord<DriverType>>}
|
||||
*/
|
||||
async install({driver, installType, packageName}) {
|
||||
return await super._install({
|
||||
@@ -30,18 +32,40 @@ export default class DriverCommand extends ExtensionCommand {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Uninstall a driver
|
||||
*
|
||||
* @param {DriverUninstallOpts} opts
|
||||
* @return {Promise<ExtRecord<DriverType>>}
|
||||
*/
|
||||
async uninstall({driver}) {
|
||||
return await super._uninstall({installSpec: driver});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a driver
|
||||
*
|
||||
* @param {DriverUpdateOpts} opts
|
||||
* @return {Promise<import('./extension-command').ExtensionUpdateResult>}
|
||||
*/
|
||||
async update({driver, unsafe}) {
|
||||
return await super._update({installSpec: driver, unsafe});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {DriverRunOptions} opts
|
||||
* @return {Promise<import('./extension-command').RunOutput>}
|
||||
*/
|
||||
async run({driver, scriptName, extraArgs}) {
|
||||
return await super._run({installSpec: driver, scriptName, extraArgs});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import('./extension-command').ExtensionArgs} opts
|
||||
* @returns {string}
|
||||
*/
|
||||
getPostInstallText({extName, extData}) {
|
||||
return (
|
||||
`Driver ${extName}@${extData.version} successfully installed\n`.green +
|
||||
@@ -74,6 +98,16 @@ export default class DriverCommand extends ExtensionCommand {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @typedef {import('@appium/types').ExtensionType} ExtensionType
|
||||
* @typedef {import('@appium/types').DriverType} DriverType
|
||||
*/
|
||||
|
||||
/**
|
||||
* @template {ExtensionType} ExtType
|
||||
* @typedef {import('appium/types').ExtRecord<ExtType>} ExtRecord
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef DriverCommandOptions
|
||||
* @property {import('../extension/extension-config').ExtensionConfig<DriverType>} config
|
||||
@@ -81,11 +115,7 @@ export default class DriverCommand extends ExtensionCommand {
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {import('@appium/types').DriverType} DriverType
|
||||
*/
|
||||
|
||||
/**
|
||||
* Options for {@linkcode ExtensionCommand._install}
|
||||
* Options for {@linkcode DriverCommand.install}
|
||||
* @typedef DriverInstallOpts
|
||||
* @property {string} driver - the name or spec of a driver to install
|
||||
* @property {InstallType} installType - how to install this driver. One of the INSTALL_TYPES
|
||||
@@ -95,3 +125,24 @@ export default class DriverCommand extends ExtensionCommand {
|
||||
/**
|
||||
* @typedef {import('appium/types').InstallType} InstallType
|
||||
*/
|
||||
|
||||
/**
|
||||
* Options for {@linkcode DriverCommand.uninstall}
|
||||
* @typedef DriverUninstallOpts
|
||||
* @property {string} driver - the name or spec of a driver to uninstall
|
||||
*/
|
||||
|
||||
/**
|
||||
* Options for {@linkcode DriverCommand.update}
|
||||
* @typedef DriverUpdateOpts
|
||||
* @property {string} driver - the name of the driver to update
|
||||
* @property {boolean} unsafe - if true, will perform unsafe updates past major revision boundaries
|
||||
*/
|
||||
|
||||
/**
|
||||
* Options for {@linkcode DriverCommand.run}.
|
||||
* @typedef DriverRunOptions
|
||||
* @property {string} driver - name of the driver to run a script from
|
||||
* @property {string} scriptName - name of the script to run
|
||||
* @property {string[]} [extraArgs] - arguments to pass to the script
|
||||
*/
|
||||
|
||||
@@ -75,7 +75,7 @@ class ExtensionCommand {
|
||||
* nor is something like `@returns {never}` which does not imply a thrown exception.
|
||||
* @param {string} message
|
||||
* @protected
|
||||
* @returns {Error}
|
||||
* @throws {Error}
|
||||
*/
|
||||
_createFatalError(message) {
|
||||
return new Error(this.log.decorate(message, 'error'));
|
||||
|
||||
@@ -17,6 +17,12 @@ export default class PluginCommand extends ExtensionCommand {
|
||||
this.knownExtensions = KNOWN_PLUGINS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install a plugin
|
||||
*
|
||||
* @param {PluginInstallOpts} opts
|
||||
* @returns {Promise<ExtRecord<PluginType>>}
|
||||
*/
|
||||
async install({plugin, installType, packageName}) {
|
||||
return await super._install({
|
||||
installSpec: plugin,
|
||||
@@ -25,26 +31,48 @@ export default class PluginCommand extends ExtensionCommand {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Uninstall a plugin
|
||||
*
|
||||
* @param {PluginUninstallOpts} opts
|
||||
* @returns {Promise<ExtRecord<PluginType>>}
|
||||
*/
|
||||
async uninstall({plugin}) {
|
||||
return await super._uninstall({installSpec: plugin});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a plugin
|
||||
*
|
||||
* @param {PluginUpdateOpts} opts
|
||||
* @returns {Promise<import('./extension-command').ExtensionUpdateResult>}
|
||||
*/
|
||||
async update({plugin, unsafe}) {
|
||||
return await super._update({installSpec: plugin, unsafe});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {PluginRunOptions} opts
|
||||
* @returns {Promise<import('./extension-command').RunOutput>}
|
||||
*/
|
||||
async run({plugin, scriptName, extraArgs}) {
|
||||
return await super._run({installSpec: plugin, scriptName, extraArgs});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import('./extension-command').ExtensionArgs} opts
|
||||
* @returns {string}
|
||||
*/
|
||||
getPostInstallText({extName, extData}) {
|
||||
return `Plugin ${extName}@${extData.version} successfully installed`.green;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates fields in `appium` field of `driverMetadata`
|
||||
* Validates fields in `appium` field of `pluginMetadata`
|
||||
*
|
||||
* For any `package.json` fields which a driver requires, validate the type of
|
||||
* For any `package.json` fields which a plugin requires, validate the type of
|
||||
* those fields on the `package.json` data, throwing an error if anything is
|
||||
* amiss.
|
||||
* @param {import('appium/types').ExtMetadata<PluginType>} pluginMetadata
|
||||
@@ -67,5 +95,44 @@ export default class PluginCommand extends ExtensionCommand {
|
||||
}
|
||||
|
||||
/**
|
||||
* @typedef {import('@appium/types').ExtensionType} ExtensionType
|
||||
* @typedef {import('@appium/types').PluginType} PluginType
|
||||
*/
|
||||
|
||||
/**
|
||||
* @template {ExtensionType} ExtType
|
||||
* @typedef {import('appium/types').ExtRecord<ExtType>} ExtRecord
|
||||
*/
|
||||
|
||||
/**
|
||||
* Options for {@linkcode PluginCommand.install}
|
||||
* @typedef PluginInstallOpts
|
||||
* @property {string} plugin - the name or spec of a plugin to install
|
||||
* @property {InstallType} installType - how to install this plugin. One of the INSTALL_TYPES
|
||||
* @property {string} [packageName] - for git/github installs, the plugin node package name
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {import('appium/types').InstallType} InstallType
|
||||
*/
|
||||
|
||||
/**
|
||||
* Options for {@linkcode PluginCommand.uninstall}
|
||||
* @typedef PluginUninstallOpts
|
||||
* @property {string} plugin - the name or spec of a plugin to uninstall
|
||||
*/
|
||||
|
||||
/**
|
||||
* Options for {@linkcode PluginCommand.update}
|
||||
* @typedef PluginUpdateOpts
|
||||
* @property {string} plugin - the name of the plugin to update
|
||||
* @property {boolean} unsafe - if true, will perform unsafe updates past major revision boundaries
|
||||
*/
|
||||
|
||||
/**
|
||||
* Options for {@linkcode PluginCommand.run}.
|
||||
* @typedef PluginRunOptions
|
||||
* @property {string} plugin - name of the plugin to run a script from
|
||||
* @property {string} scriptName - name of the script to run
|
||||
* @property {string[]} [extraArgs] - arguments to pass to the script
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "appium",
|
||||
"version": "2.0.0-beta.48",
|
||||
"version": "2.0.0-beta.50",
|
||||
"description": "Automation for Apps.",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -38,7 +38,8 @@
|
||||
"support.*",
|
||||
"plugin.*",
|
||||
"scripts/autoinstall-extensions.js",
|
||||
"types"
|
||||
"types",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"build:docs": "node docs/scripts/build-docs.js",
|
||||
@@ -57,12 +58,12 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/base-driver": "^9.1.0",
|
||||
"@appium/base-plugin": "^2.0.1",
|
||||
"@appium/docutils": "^0.1.1",
|
||||
"@appium/schema": "^0.1.0",
|
||||
"@appium/support": "^3.0.1",
|
||||
"@appium/types": "^0.7.0",
|
||||
"@appium/base-driver": "^9.2.1",
|
||||
"@appium/base-plugin": "^2.1.1",
|
||||
"@appium/docutils": "^0.1.3",
|
||||
"@appium/schema": "^0.2.1",
|
||||
"@appium/support": "^3.1.1",
|
||||
"@appium/types": "^0.8.1",
|
||||
"@sidvind/better-ajv-errors": "2.1.0",
|
||||
"@types/argparse": "2.0.10",
|
||||
"@types/bluebird": "3.5.38",
|
||||
@@ -70,12 +71,12 @@
|
||||
"@types/semver": "7.3.13",
|
||||
"@types/teen_process": "2.0.0",
|
||||
"@types/wrap-ansi": "3.0.0",
|
||||
"ajv": "8.11.2",
|
||||
"ajv": "8.12.0",
|
||||
"ajv-formats": "2.1.1",
|
||||
"argparse": "2.0.1",
|
||||
"async-lock": "1.4.0",
|
||||
"asyncbox": "2.9.4",
|
||||
"axios": "1.2.1",
|
||||
"axios": "1.2.2",
|
||||
"bluebird": "3.7.2",
|
||||
"cross-env": "7.0.3",
|
||||
"find-up": "5.0.0",
|
||||
@@ -90,10 +91,10 @@
|
||||
"semver": "7.3.8",
|
||||
"source-map-support": "0.5.21",
|
||||
"teen_process": "2.0.2",
|
||||
"type-fest": "3.4.0",
|
||||
"type-fest": "3.5.1",
|
||||
"winston": "3.8.2",
|
||||
"wrap-ansi": "7.0.0",
|
||||
"yaml": "2.1.3"
|
||||
"yaml": "2.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
||||
@@ -103,8 +104,8 @@
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"typedoc": {
|
||||
"entryPoint": "./build/lib/main.js"
|
||||
"entryPoint": "./lib/main.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"webdriverio": "7.28.0"
|
||||
"webdriverio": "7.29.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import {BaseDriver} from '@appium/base-driver';
|
||||
import {fs, tempDir} from '@appium/support';
|
||||
import axios from 'axios';
|
||||
import {command} from 'webdriver';
|
||||
import B from 'bluebird';
|
||||
import _ from 'lodash';
|
||||
import {createSandbox} from 'sinon';
|
||||
@@ -131,7 +132,7 @@ describe('FakeDriver via HTTP', function () {
|
||||
});
|
||||
|
||||
describe('cli args handling for empty args', function () {
|
||||
it('should not recieve user cli args if none passed in', async function () {
|
||||
it('should not receive user cli args if none passed in', async function () {
|
||||
let driver = await wdio({...wdOpts, capabilities: caps});
|
||||
const {sessionId} = driver;
|
||||
try {
|
||||
@@ -258,6 +259,43 @@ describe('FakeDriver via HTTP', function () {
|
||||
}
|
||||
});
|
||||
|
||||
it('should allow appium-prefixed caps sent via appium:options', async function () {
|
||||
// Try with valid capabilities and check that it returns a session ID
|
||||
const appiumOptsCaps = {
|
||||
capabilities: {
|
||||
alwaysMatch: {
|
||||
'appium:options': {
|
||||
automationName: 'Fake',
|
||||
deviceName: 'Fake',
|
||||
app: TEST_FAKE_APP,
|
||||
},
|
||||
platformName: 'Fake',
|
||||
},
|
||||
firstMatch: [{}],
|
||||
},
|
||||
};
|
||||
|
||||
// Create the session
|
||||
const {status, value, sessionId} = (
|
||||
await axios.post(testServerBaseSessionUrl, appiumOptsCaps)
|
||||
).data;
|
||||
try {
|
||||
should.not.exist(status); // Test that it's a W3C session by checking that 'status' is not in the response
|
||||
should.not.exist(sessionId);
|
||||
value.sessionId.should.be.a.string;
|
||||
value.should.exist;
|
||||
value.capabilities.should.deep.equal({
|
||||
automationName: 'Fake',
|
||||
platformName: 'Fake',
|
||||
deviceName: 'Fake',
|
||||
app: TEST_FAKE_APP,
|
||||
});
|
||||
} finally {
|
||||
// End session
|
||||
await axios.delete(`${testServerBaseSessionUrl}/${value.sessionId}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('should reject invalid W3C capabilities and respond with a 400 Bad Parameters error', async function () {
|
||||
const badW3Ccaps = {
|
||||
capabilities: {
|
||||
@@ -407,6 +445,46 @@ describe('FakeDriver via HTTP', function () {
|
||||
await driver.deleteSession();
|
||||
}
|
||||
});
|
||||
|
||||
it('should log a single deprecation warning if a deprecated method is used and not overridden by a newMethodMap', async function () {
|
||||
let driver = await wdio({...wdOpts, capabilities: caps});
|
||||
try {
|
||||
driver.addCommand(
|
||||
'deprecated',
|
||||
command('POST', '/session/:sessionId/deprecated', {
|
||||
command: 'deprecated',
|
||||
description: 'Call a deprecated command',
|
||||
parameters: [],
|
||||
ref: '',
|
||||
})
|
||||
);
|
||||
driver.addCommand(
|
||||
'doubleClick',
|
||||
command('POST', '/session/:sessionId/doubleclick', {
|
||||
command: 'doubleClick',
|
||||
description: 'Global double click',
|
||||
parameters: [],
|
||||
ref: '',
|
||||
})
|
||||
);
|
||||
await driver
|
||||
.executeScript('fake: getDeprecatedCommandsCalled', [])
|
||||
.should.eventually.eql([]);
|
||||
await driver.deprecated();
|
||||
await driver.deprecated();
|
||||
await driver.shake();
|
||||
|
||||
// this call should not trigger a deprecation even though deprecated by appium because it's
|
||||
// overridden as not deprecated by fake driver
|
||||
await driver.doubleClick();
|
||||
|
||||
await driver
|
||||
.executeScript('fake: getDeprecatedCommandsCalled', [])
|
||||
.should.eventually.eql(['callDeprecatedCommand', 'mobileShake']);
|
||||
} finally {
|
||||
await driver.deleteSession();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": ".",
|
||||
"outDir": "build",
|
||||
|
||||
@@ -3,6 +3,36 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [9.2.1](https://github.com/appium/appium/compare/@appium/base-driver@9.2.0...@appium/base-driver@9.2.1) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/base-driver
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [9.2.0](https://github.com/appium/appium/compare/@appium/base-driver@9.1.0...@appium/base-driver@9.2.0) (2023-01-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **appium:** inability to find automationName inside appium:options ([#17966](https://github.com/appium/appium/issues/17966)) ([23224cf](https://github.com/appium/appium/commit/23224cf002b7dd9e4e5d8426b4bbe1cb28f62605))
|
||||
* **base-driver:** add missing dependency @appium/types ([edde488](https://github.com/appium/appium/commit/edde4882f0633c032a077861599c337132092daf)), closes [#18006](https://github.com/appium/appium/issues/18006)
|
||||
* **base-driver:** move setClipboard deprecation to correct place ([ad1dce5](https://github.com/appium/appium/commit/ad1dce5545acb61ce79e489783a95f2caebd753c))
|
||||
* **support:** update dependency axios to v1.2.2 ([5291ca6](https://github.com/appium/appium/commit/5291ca672b3b47c5270e9fd85de3e4ed76a650e0))
|
||||
* **types:** update dependency type-fest to v3.5.0 ([8c8bfe8](https://github.com/appium/appium/commit/8c8bfe824dbe062e24cfe9fc6e1afa2f68cc6e4c))
|
||||
* **types:** update dependency type-fest to v3.5.1 ([4b5ab4d](https://github.com/appium/appium/commit/4b5ab4da7be925d0592c18e8f46a9ce30fbddf8e))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **base-driver:** deprecate non-standard routes ([7055a0b](https://github.com/appium/appium/commit/7055a0b28193f677b21541ddada3c4a314f90f5b))
|
||||
* **typedoc-appium-plugin:** implement cross-referencing of methods ([8b33414](https://github.com/appium/appium/commit/8b334149018f7d49448da9e7982356c72bcd468e))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [9.1.0](https://github.com/appium/appium/compare/@appium/base-driver@9.0.0...@appium/base-driver@9.1.0) (2022-12-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -225,7 +225,7 @@ function parseCaps(caps, constraints = /** @type {C} */ ({}), shouldValidateCaps
|
||||
// In the future, reject 'firstMatch' argument if its array did not have one or more entries (#3.2)
|
||||
if (allFirstMatchCaps.length === 0) {
|
||||
log.warn(
|
||||
`The firstMatch array in the given capabilities has no entries. Adding an empty entry fo rnow, ` +
|
||||
`The firstMatch array in the given capabilities has no entries. Adding an empty entry for now, ` +
|
||||
`but it will require one or more entries as W3C spec.`
|
||||
);
|
||||
allFirstMatchCaps.push({});
|
||||
|
||||
@@ -30,6 +30,7 @@ export function SessionMixin(Base) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns capabilities for the session and event history (if applicable)
|
||||
* @returns {Promise<SingularSessionData>}
|
||||
*/
|
||||
async getSession() {
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
/* eslint-disable require-await */
|
||||
/* eslint-disable no-unused-vars */
|
||||
|
||||
import {
|
||||
validateCaps,
|
||||
PREFIXED_APPIUM_OPTS_CAP,
|
||||
processCapabilities,
|
||||
promoteAppiumOptions,
|
||||
} from './capabilities';
|
||||
import {validateCaps, PREFIXED_APPIUM_OPTS_CAP, processCapabilities} from './capabilities';
|
||||
import {DriverCore} from './core';
|
||||
import {util} from '@appium/support';
|
||||
import B from 'bluebird';
|
||||
@@ -298,7 +293,7 @@ export class BaseDriverCore extends DriverCore {
|
||||
let caps;
|
||||
try {
|
||||
caps = processCapabilities(
|
||||
promoteAppiumOptions(originalCaps),
|
||||
originalCaps,
|
||||
this._desiredCapConstraints,
|
||||
this.shouldValidateCaps
|
||||
);
|
||||
|
||||
@@ -34,6 +34,7 @@ export {
|
||||
processCapabilities,
|
||||
isStandardCap,
|
||||
validateCaps,
|
||||
promoteAppiumOptions,
|
||||
} from './basedriver/capabilities';
|
||||
|
||||
// Web socket helpers
|
||||
|
||||
@@ -18,6 +18,9 @@ const CREATE_SESSION_COMMAND = 'createSession';
|
||||
const DELETE_SESSION_COMMAND = 'deleteSession';
|
||||
const GET_STATUS_COMMAND = 'getStatus';
|
||||
|
||||
/** type {Set<string>} */
|
||||
const deprecatedCommandsLogged = new Set();
|
||||
|
||||
function determineProtocol(createSessionArgs) {
|
||||
return _.some(createSessionArgs, isW3cCaps) ? PROTOCOLS.W3C : PROTOCOLS.MJSONWP;
|
||||
}
|
||||
@@ -262,6 +265,16 @@ function buildHandler(app, method, path, spec, driver, isSessCmd) {
|
||||
let currentProtocol = extractProtocol(driver, req.params.sessionId);
|
||||
|
||||
try {
|
||||
// if the route accessed is deprecated, log a warning
|
||||
if (spec.deprecated && !deprecatedCommandsLogged.has(spec.command)) {
|
||||
deprecatedCommandsLogged.add(spec.command);
|
||||
getLogger(driver, req.params.sessionId).warn(
|
||||
`Command '${spec.command}' has been deprecated and will be removed in a future ` +
|
||||
`version of Appium or your driver/plugin. Please use a different method or contact the ` +
|
||||
`driver/plugin author to add explicit support for the command before it is removed`
|
||||
);
|
||||
}
|
||||
|
||||
// if this is a session command but we don't have a session,
|
||||
// error out early (especially before proxying)
|
||||
if (isSessCmd && !driver.sessionExists(req.params.sessionId)) {
|
||||
@@ -512,4 +525,5 @@ export {
|
||||
CREATE_SESSION_COMMAND,
|
||||
DELETE_SESSION_COMMAND,
|
||||
GET_STATUS_COMMAND,
|
||||
deprecatedCommandsLogged,
|
||||
};
|
||||
|
||||
@@ -68,10 +68,10 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/timeouts/async_script': {
|
||||
POST: {command: 'asyncScriptTimeout', payloadParams: {required: ['ms']}},
|
||||
POST: {command: 'asyncScriptTimeout', payloadParams: {required: ['ms']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/timeouts/implicit_wait': {
|
||||
POST: {command: 'implicitWait', payloadParams: {required: ['ms']}},
|
||||
POST: {command: 'implicitWait', payloadParams: {required: ['ms']}, deprecated: true},
|
||||
},
|
||||
// JSONWP
|
||||
'/session/:sessionId/window_handle': {
|
||||
@@ -117,25 +117,25 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
GET: {command: 'getScreenshot'},
|
||||
},
|
||||
'/session/:sessionId/ime/available_engines': {
|
||||
GET: {command: 'availableIMEEngines'},
|
||||
GET: {command: 'availableIMEEngines', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/ime/active_engine': {
|
||||
GET: {command: 'getActiveIMEEngine'},
|
||||
GET: {command: 'getActiveIMEEngine', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/ime/activated': {
|
||||
GET: {command: 'isIMEActivated'},
|
||||
GET: {command: 'isIMEActivated', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/ime/deactivate': {
|
||||
POST: {command: 'deactivateIMEEngine'},
|
||||
POST: {command: 'deactivateIMEEngine', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/ime/activate': {
|
||||
POST: {command: 'activateIMEEngine', payloadParams: {required: ['engine']}},
|
||||
POST: {command: 'activateIMEEngine', payloadParams: {required: ['engine']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/frame': {
|
||||
POST: {command: 'setFrame', payloadParams: {required: ['id']}},
|
||||
},
|
||||
'/session/:sessionId/frame/parent': {
|
||||
POST: {},
|
||||
POST: {command: 'switchToParentFrame'},
|
||||
},
|
||||
'/session/:sessionId/window': {
|
||||
GET: {command: 'getWindowHandle'},
|
||||
@@ -162,12 +162,11 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
DELETE: {command: 'closeWindow'},
|
||||
},
|
||||
'/session/:sessionId/window/:windowhandle/size': {
|
||||
GET: {command: 'getWindowSize'},
|
||||
POST: {},
|
||||
GET: {command: 'getWindowSize', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/window/:windowhandle/position': {
|
||||
POST: {},
|
||||
GET: {},
|
||||
POST: {deprecated: true},
|
||||
GET: {deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/window/:windowhandle/maximize': {
|
||||
POST: {command: 'maximizeWindow'},
|
||||
@@ -222,7 +221,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
POST: {command: 'click'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/submit': {
|
||||
POST: {command: 'submit'},
|
||||
POST: {command: 'submit', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/text': {
|
||||
GET: {command: 'getText'},
|
||||
@@ -246,7 +245,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/keys': {
|
||||
POST: {command: 'keys', payloadParams: {required: ['value']}},
|
||||
POST: {command: 'keys', payloadParams: {required: ['value']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/name': {
|
||||
GET: {command: 'getName'},
|
||||
@@ -264,19 +263,19 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
GET: {command: 'getAttribute'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/equals/:otherId': {
|
||||
GET: {command: 'equalsElement'},
|
||||
GET: {command: 'equalsElement', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/displayed': {
|
||||
GET: {command: 'elementDisplayed'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/location': {
|
||||
GET: {command: 'getLocation'},
|
||||
GET: {command: 'getLocation', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/location_in_view': {
|
||||
GET: {command: 'getLocationInView'},
|
||||
GET: {command: 'getLocationInView', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/size': {
|
||||
GET: {command: 'getSize'},
|
||||
GET: {command: 'getSize', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/shadow': {
|
||||
GET: {command: 'elementShadowRoot'},
|
||||
@@ -319,34 +318,35 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
POST: {
|
||||
command: 'moveTo',
|
||||
payloadParams: {optional: ['element', 'xoffset', 'yoffset']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/click': {
|
||||
POST: {command: 'clickCurrent', payloadParams: {optional: ['button']}},
|
||||
POST: {command: 'clickCurrent', payloadParams: {optional: ['button']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/buttondown': {
|
||||
POST: {command: 'buttonDown', payloadParams: {optional: ['button']}},
|
||||
POST: {command: 'buttonDown', payloadParams: {optional: ['button']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/buttonup': {
|
||||
POST: {command: 'buttonUp', payloadParams: {optional: ['button']}},
|
||||
POST: {command: 'buttonUp', payloadParams: {optional: ['button']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/doubleclick': {
|
||||
POST: {command: 'doubleClick'},
|
||||
POST: {command: 'doubleClick', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/touch/click': {
|
||||
POST: {command: 'click', payloadParams: {required: ['element']}},
|
||||
POST: {command: 'click', payloadParams: {required: ['element']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/touch/down': {
|
||||
POST: {command: 'touchDown', payloadParams: {required: ['x', 'y']}},
|
||||
POST: {command: 'touchDown', payloadParams: {required: ['x', 'y']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/touch/up': {
|
||||
POST: {command: 'touchUp', payloadParams: {required: ['x', 'y']}},
|
||||
POST: {command: 'touchUp', payloadParams: {required: ['x', 'y']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/touch/move': {
|
||||
POST: {command: 'touchMove', payloadParams: {required: ['x', 'y']}},
|
||||
POST: {command: 'touchMove', payloadParams: {required: ['x', 'y']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/touch/scroll': {
|
||||
POST: {},
|
||||
POST: {deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/touch/doubleclick': {
|
||||
POST: {},
|
||||
@@ -356,7 +356,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
DELETE: {command: 'releaseActions'},
|
||||
},
|
||||
'/session/:sessionId/touch/longclick': {
|
||||
POST: {command: 'touchLongClick', payloadParams: {required: ['elements']}},
|
||||
POST: {command: 'touchLongClick', payloadParams: {required: ['elements']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/touch/flick': {
|
||||
POST: {
|
||||
@@ -364,6 +364,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
payloadParams: {
|
||||
optional: ['element', 'xspeed', 'yspeed', 'xoffset', 'yoffset', 'speed'],
|
||||
},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/location': {
|
||||
@@ -371,28 +372,28 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
POST: {command: 'setGeoLocation', payloadParams: {required: ['location']}},
|
||||
},
|
||||
'/session/:sessionId/local_storage': {
|
||||
GET: {},
|
||||
POST: {},
|
||||
DELETE: {},
|
||||
GET: {deprecated: true},
|
||||
POST: {deprecated: true},
|
||||
DELETE: {deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/local_storage/key/:key': {
|
||||
GET: {},
|
||||
DELETE: {},
|
||||
GET: {deprecated: true},
|
||||
DELETE: {deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/local_storage/size': {
|
||||
GET: {},
|
||||
GET: {deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/session_storage': {
|
||||
GET: {},
|
||||
POST: {},
|
||||
DELETE: {},
|
||||
GET: {deprecated: true},
|
||||
POST: {deprecated: true},
|
||||
DELETE: {deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/session_storage/key/:key': {
|
||||
GET: {},
|
||||
DELETE: {},
|
||||
GET: {deprecated: true},
|
||||
DELETE: {deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/session_storage/size': {
|
||||
GET: {},
|
||||
GET: {deprecated: true},
|
||||
},
|
||||
// Selenium 4 clients
|
||||
'/session/:sessionId/se/log': {
|
||||
@@ -425,7 +426,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
GET: {command: 'getContexts'},
|
||||
},
|
||||
'/session/:sessionId/element/:elementId/pageIndex': {
|
||||
GET: {command: 'getPageIndex'},
|
||||
GET: {command: 'getPageIndex', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/network_connection': {
|
||||
GET: {command: 'getNetworkConnection'},
|
||||
@@ -438,12 +439,14 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
POST: {
|
||||
command: 'performTouch',
|
||||
payloadParams: {wrap: 'actions', required: ['actions']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/touch/multi/perform': {
|
||||
POST: {
|
||||
command: 'performMultiAction',
|
||||
payloadParams: {required: ['actions'], optional: ['elementId']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/receive_async_response': {
|
||||
@@ -453,35 +456,37 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/shake': {
|
||||
POST: {command: 'mobileShake'},
|
||||
POST: {command: 'mobileShake', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/system_time': {
|
||||
GET: {command: 'getDeviceTime', payloadParams: {optional: ['format']}},
|
||||
POST: {command: 'getDeviceTime', payloadParams: {optional: ['format']}},
|
||||
},
|
||||
'/session/:sessionId/appium/device/lock': {
|
||||
POST: {command: 'lock', payloadParams: {optional: ['seconds']}},
|
||||
POST: {command: 'lock', payloadParams: {optional: ['seconds']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/unlock': {
|
||||
POST: {command: 'unlock'},
|
||||
POST: {command: 'unlock', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/is_locked': {
|
||||
POST: {command: 'isLocked'},
|
||||
POST: {command: 'isLocked', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/start_recording_screen': {
|
||||
POST: {
|
||||
command: 'startRecordingScreen',
|
||||
payloadParams: {optional: ['options']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/stop_recording_screen': {
|
||||
POST: {
|
||||
command: 'stopRecordingScreen',
|
||||
payloadParams: {optional: ['options']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/performanceData/types': {
|
||||
POST: {command: 'getPerformanceDataTypes'},
|
||||
POST: {command: 'getPerformanceDataTypes', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/getPerformanceData': {
|
||||
POST: {
|
||||
@@ -490,70 +495,68 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
required: ['packageName', 'dataType'],
|
||||
optional: ['dataReadTimeout'],
|
||||
},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/press_keycode': {
|
||||
POST: {
|
||||
command: 'pressKeyCode',
|
||||
payloadParams: {required: ['keycode'], optional: ['metastate', 'flags']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/long_press_keycode': {
|
||||
POST: {
|
||||
command: 'longPressKeyCode',
|
||||
payloadParams: {required: ['keycode'], optional: ['metastate', 'flags']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/finger_print': {
|
||||
POST: {
|
||||
command: 'fingerprint',
|
||||
payloadParams: {required: ['fingerprintId']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/send_sms': {
|
||||
POST: {
|
||||
command: 'sendSMS',
|
||||
payloadParams: {required: ['phoneNumber', 'message']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/gsm_call': {
|
||||
POST: {
|
||||
command: 'gsmCall',
|
||||
payloadParams: {required: ['phoneNumber', 'action']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/gsm_signal': {
|
||||
POST: {
|
||||
command: 'gsmSignal',
|
||||
payloadParams: {
|
||||
validate: (jsonObj) =>
|
||||
!util.hasValue(jsonObj.signalStrength) &&
|
||||
!util.hasValue(jsonObj.signalStrengh) &&
|
||||
'we require one of "signalStrength" or "signalStrengh" params',
|
||||
optional: ['signalStrength', 'signalStrengh'],
|
||||
// backward-compatible. sonObj.signalStrength can be 0
|
||||
makeArgs: (jsonObj) => [
|
||||
util.hasValue(jsonObj.signalStrength) ? jsonObj.signalStrength : jsonObj.signalStrengh,
|
||||
],
|
||||
},
|
||||
payloadParams: {required: ['signalStrength']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/gsm_voice': {
|
||||
POST: {command: 'gsmVoice', payloadParams: {required: ['state']}},
|
||||
POST: {command: 'gsmVoice', payloadParams: {required: ['state']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/power_capacity': {
|
||||
POST: {command: 'powerCapacity', payloadParams: {required: ['percent']}},
|
||||
POST: {command: 'powerCapacity', payloadParams: {required: ['percent']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/power_ac': {
|
||||
POST: {command: 'powerAC', payloadParams: {required: ['state']}},
|
||||
POST: {command: 'powerAC', payloadParams: {required: ['state']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/network_speed': {
|
||||
POST: {command: 'networkSpeed', payloadParams: {required: ['netspeed']}},
|
||||
POST: {command: 'networkSpeed', payloadParams: {required: ['netspeed']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/keyevent': {
|
||||
POST: {
|
||||
command: 'keyevent',
|
||||
payloadParams: {required: ['keycode'], optional: ['metastate']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/rotate': {
|
||||
@@ -563,13 +566,14 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
required: ['x', 'y', 'radius', 'rotation', 'touchCount', 'duration'],
|
||||
optional: ['element'],
|
||||
},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/current_activity': {
|
||||
GET: {command: 'getCurrentActivity'},
|
||||
GET: {command: 'getCurrentActivity', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/current_package': {
|
||||
GET: {command: 'getCurrentPackage'},
|
||||
GET: {command: 'getCurrentPackage', deprecated: true},
|
||||
},
|
||||
//region Applications Management
|
||||
'/session/:sessionId/appium/device/install_app': {
|
||||
@@ -628,6 +632,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
payloadParams: {
|
||||
required: [['appId'], ['bundleId']],
|
||||
},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
//endregion
|
||||
@@ -650,19 +655,19 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
POST: {command: 'pullFolder', payloadParams: {required: ['path']}},
|
||||
},
|
||||
'/session/:sessionId/appium/device/toggle_airplane_mode': {
|
||||
POST: {command: 'toggleFlightMode'},
|
||||
POST: {command: 'toggleFlightMode', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/toggle_data': {
|
||||
POST: {command: 'toggleData'},
|
||||
POST: {command: 'toggleData', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/toggle_wifi': {
|
||||
POST: {command: 'toggleWiFi'},
|
||||
POST: {command: 'toggleWiFi', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/toggle_location_services': {
|
||||
POST: {command: 'toggleLocationServices'},
|
||||
POST: {command: 'toggleLocationServices', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/open_notifications': {
|
||||
POST: {command: 'openNotifications'},
|
||||
POST: {command: 'openNotifications', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/start_activity': {
|
||||
POST: {
|
||||
@@ -679,77 +684,63 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
'dontStopAppOnReset',
|
||||
],
|
||||
},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/system_bars': {
|
||||
GET: {command: 'getSystemBars'},
|
||||
GET: {command: 'getSystemBars', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/device/display_density': {
|
||||
GET: {command: 'getDisplayDensity'},
|
||||
GET: {command: 'getDisplayDensity', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/simulator/touch_id': {
|
||||
POST: {command: 'touchId', payloadParams: {required: ['match']}},
|
||||
POST: {command: 'touchId', payloadParams: {required: ['match']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/simulator/toggle_touch_id_enrollment': {
|
||||
POST: {
|
||||
command: 'toggleEnrollTouchId',
|
||||
payloadParams: {optional: ['enabled']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/app/launch': {
|
||||
POST: {command: 'launchApp'},
|
||||
POST: {command: 'launchApp', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/app/close': {
|
||||
POST: {command: 'closeApp'},
|
||||
POST: {command: 'closeApp', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/app/reset': {
|
||||
POST: {command: 'reset'},
|
||||
POST: {command: 'reset', deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/app/background': {
|
||||
POST: {command: 'background', payloadParams: {required: ['seconds']}},
|
||||
POST: {command: 'background', payloadParams: {required: ['seconds']}, deprecated: true},
|
||||
},
|
||||
'/session/:sessionId/appium/app/end_test_coverage': {
|
||||
POST: {
|
||||
command: 'endCoverage',
|
||||
payloadParams: {required: ['intent', 'path']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/app/strings': {
|
||||
POST: {
|
||||
command: 'getStrings',
|
||||
payloadParams: {optional: ['language', 'stringFile']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/element/:elementId/value': {
|
||||
POST: {
|
||||
command: 'setValueImmediate',
|
||||
payloadParams: {
|
||||
validate: (jsonObj) =>
|
||||
!util.hasValue(jsonObj.value) &&
|
||||
!util.hasValue(jsonObj.text) &&
|
||||
'we require one of "text" or "value" params',
|
||||
optional: ['value', 'text'],
|
||||
// We want to either a value (old JSONWP) or a text (new W3C) parameter,
|
||||
// but only send one of them to the command (not both).
|
||||
// Prefer 'value' since it's more backward-compatible.
|
||||
makeArgs: (jsonObj) => [jsonObj.value || jsonObj.text],
|
||||
},
|
||||
payloadParams: {required: ['text']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/element/:elementId/replace_value': {
|
||||
POST: {
|
||||
command: 'replaceValue',
|
||||
payloadParams: {
|
||||
validate: (jsonObj) =>
|
||||
!util.hasValue(jsonObj.value) &&
|
||||
!util.hasValue(jsonObj.text) &&
|
||||
'we require one of "text" or "value" params',
|
||||
optional: ['value', 'text'],
|
||||
// We want to either a value (old JSONWP) or a text (new W3C) parameter,
|
||||
// but only send one of them to the command (not both).
|
||||
// Prefer 'value' since it's more backward-compatible.
|
||||
makeArgs: (jsonObj) => [jsonObj.value ?? jsonObj.text ?? ''],
|
||||
},
|
||||
payloadParams: {required: ['text']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/settings': {
|
||||
@@ -760,6 +751,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
POST: {
|
||||
command: 'receiveAsyncResponse',
|
||||
payloadParams: {required: ['response']},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/events': {
|
||||
@@ -857,6 +849,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
required: ['content'],
|
||||
optional: ['contentType', 'label'],
|
||||
},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
'/session/:sessionId/appium/device/get_clipboard': {
|
||||
@@ -865,6 +858,7 @@ const METHOD_MAP = /** @type {const} */ ({
|
||||
payloadParams: {
|
||||
optional: ['contentType'],
|
||||
},
|
||||
deprecated: true,
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/base-driver",
|
||||
"version": "9.1.0",
|
||||
"version": "9.2.1",
|
||||
"description": "Base driver class for Appium drivers",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -32,7 +32,8 @@
|
||||
"index.d.ts",
|
||||
"lib",
|
||||
"static",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -41,7 +42,8 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/support": "^3.0.1",
|
||||
"@appium/support": "^3.1.1",
|
||||
"@appium/types": "^0.8.1",
|
||||
"@colors/colors": "1.5.0",
|
||||
"@types/async-lock": "1.3.0",
|
||||
"@types/bluebird": "3.5.38",
|
||||
@@ -50,7 +52,7 @@
|
||||
"@types/serve-favicon": "2.5.3",
|
||||
"async-lock": "1.4.0",
|
||||
"asyncbox": "2.9.4",
|
||||
"axios": "1.2.1",
|
||||
"axios": "1.2.2",
|
||||
"bluebird": "3.7.2",
|
||||
"body-parser": "1.20.1",
|
||||
"es6-error": "4.1.1",
|
||||
@@ -62,7 +64,7 @@
|
||||
"morgan": "1.10.0",
|
||||
"serve-favicon": "2.5.0",
|
||||
"source-map-support": "0.5.21",
|
||||
"type-fest": "3.4.0",
|
||||
"type-fest": "3.5.1",
|
||||
"validate.js": "0.13.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -72,8 +74,8 @@
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"typedoc": {
|
||||
"entryPoint": "./build/lib/index.js"
|
||||
"entryPoint": "./lib/index.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
import {BaseDriver, server, routeConfiguringFunction, PREFIXED_APPIUM_OPTS_CAP} from '../../../lib';
|
||||
import {
|
||||
driverE2ETestSuite,
|
||||
getTestPort,
|
||||
TEST_HOST,
|
||||
createSessionHelpers,
|
||||
} from '@appium/driver-test-support';
|
||||
|
||||
const {expect} = chai;
|
||||
import {BaseDriver} from '../../../lib';
|
||||
import {driverE2ETestSuite} from '@appium/driver-test-support';
|
||||
|
||||
const DEFAULT_CAPS = {
|
||||
platformName: 'iOS',
|
||||
@@ -15,58 +8,6 @@ const DEFAULT_CAPS = {
|
||||
|
||||
driverE2ETestSuite(BaseDriver, DEFAULT_CAPS);
|
||||
|
||||
describe('BaseDriver', function () {
|
||||
// only run this test on basedriver, not other drivers which also use these tests, since we
|
||||
// don't want them to try and start sessions with these random capabilities that are
|
||||
// necessary to test the appium options logic
|
||||
describe('special appium:options capability', function () {
|
||||
/** @type {SessionHelpers['startSession']} */
|
||||
let startSession;
|
||||
/** @type {SessionHelpers['endSession']} */
|
||||
let endSession;
|
||||
/** @type {import('@appium/types').AppiumServer} */
|
||||
let baseServer;
|
||||
/** @type {BaseDriver} */
|
||||
let d;
|
||||
|
||||
before(async function () {
|
||||
const port = await getTestPort();
|
||||
d = new BaseDriver({port, address: TEST_HOST});
|
||||
baseServer = await server({
|
||||
routeConfiguringFunction: routeConfiguringFunction(d),
|
||||
port,
|
||||
hostname: TEST_HOST,
|
||||
});
|
||||
|
||||
({startSession, endSession} = createSessionHelpers(port));
|
||||
});
|
||||
|
||||
after(async function () {
|
||||
await baseServer.close();
|
||||
});
|
||||
|
||||
it('should be able to start a session with caps held in appium:options', async function () {
|
||||
const ret = await startSession({
|
||||
capabilities: {
|
||||
alwaysMatch: {
|
||||
platformName: 'iOS',
|
||||
[PREFIXED_APPIUM_OPTS_CAP]: {
|
||||
platformVersion: '11.4',
|
||||
'appium:deviceName': 'iPhone 11',
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
try {
|
||||
expect(d.opts.platformVersion).to.equal('11.4');
|
||||
expect(d.opts.deviceName).to.equal('iPhone 11');
|
||||
} finally {
|
||||
await endSession(ret.sessionId);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* @typedef {import('@appium/driver-test-support').SessionHelpers} SessionHelpers
|
||||
*/
|
||||
|
||||
@@ -35,7 +35,7 @@ describe('Protocol', function () {
|
||||
}
|
||||
let hash = shasum.digest('hex').substring(0, 8);
|
||||
// Modify the hash whenever the protocol has intentionally been modified.
|
||||
hash.should.equal('43ef41a2');
|
||||
hash.should.equal('484810b0');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "build",
|
||||
"paths": {
|
||||
@@ -10,8 +10,5 @@
|
||||
"checkJs": true
|
||||
},
|
||||
"include": ["lib"],
|
||||
"references": [
|
||||
{"path": "../support"},
|
||||
{"path": "../types"}
|
||||
]
|
||||
"references": [{"path": "../support"}, {"path": "../types"}]
|
||||
}
|
||||
|
||||
@@ -3,6 +3,25 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.1.1](https://github.com/appium/appium/compare/@appium/base-plugin@2.1.0...@appium/base-plugin@2.1.1) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/base-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [2.1.0](https://github.com/appium/appium/compare/@appium/base-plugin@2.0.1...@appium/base-plugin@2.1.0) (2023-01-13)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **typedoc-appium-plugin:** implement cross-referencing of methods ([8b33414](https://github.com/appium/appium/commit/8b334149018f7d49448da9e7982356c72bcd468e))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.1](https://github.com/appium/appium/compare/@appium/base-plugin@2.0.0...@appium/base-plugin@2.0.1) (2022-12-21)
|
||||
|
||||
**Note:** Version bump only for package @appium/base-plugin
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
{
|
||||
"name": "@appium/base-plugin",
|
||||
"version": "2.0.1",
|
||||
"version": "2.1.1",
|
||||
"description": "The base plugin used to create Appium 2.0 plugins",
|
||||
"keywords": [
|
||||
"automation",
|
||||
"javascript",
|
||||
"selenium",
|
||||
"webdriver",
|
||||
"ios",
|
||||
"android",
|
||||
"firefoxos",
|
||||
"testing"
|
||||
],
|
||||
"homepage": "https://appium.io",
|
||||
"bugs": {
|
||||
"url": "https://github.com/appium/appium/issues"
|
||||
@@ -20,7 +30,8 @@
|
||||
"files": [
|
||||
"lib",
|
||||
"build",
|
||||
"index.js"
|
||||
"index.js",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -28,27 +39,20 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/support": "^3.0.1"
|
||||
"@appium/support": "^3.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
||||
"npm": ">=8"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"tags": [
|
||||
"appium"
|
||||
],
|
||||
"typedoc": {
|
||||
"entryPoint": "./build/lib/plugin.js"
|
||||
},
|
||||
"keywords": [
|
||||
"automation",
|
||||
"javascript",
|
||||
"selenium",
|
||||
"webdriver",
|
||||
"ios",
|
||||
"android",
|
||||
"firefoxos",
|
||||
"testing"
|
||||
]
|
||||
"entryPoint": "./lib/plugin.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "build",
|
||||
"checkJs": true,
|
||||
|
||||
@@ -3,6 +3,26 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.0.3](https://github.com/appium/appium/compare/@appium/doctor@2.0.2...@appium/doctor@2.0.3) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/doctor
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.2](https://github.com/appium/appium/compare/@appium/doctor@2.0.1...@appium/doctor@2.0.2) (2023-01-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **doctor:** update dependency appium-adb to v9.10.20 ([29bf77c](https://github.com/appium/appium/commit/29bf77cf5a623c7417d9c996814498f76cead2a3))
|
||||
* **doctor:** update dependency appium-adb to v9.10.21 ([ac2c735](https://github.com/appium/appium/commit/ac2c73596810919dcd1c6d294e8c9496eb91e0b9))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.1](https://github.com/appium/appium/compare/@appium/doctor@2.0.0...@appium/doctor@2.0.1) (2022-12-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -2,8 +2,6 @@ appium-doctor
|
||||
===================
|
||||
Attempts to diagnose and fix common Node, iOS and Android configuration issues before starting Appium.
|
||||
|
||||
[](https://travis-ci.org/appium/appium-doctor)
|
||||
|
||||
### Install
|
||||
|
||||
```
|
||||
|
||||
@@ -7,6 +7,9 @@ import '@colors/colors';
|
||||
import {getAndroidBinaryPath, getSdkRootFromEnv} from 'appium-adb';
|
||||
import log from './logger';
|
||||
|
||||
/**
|
||||
* @type {import('./factory').DoctorCheckList}
|
||||
*/
|
||||
let checks = [];
|
||||
|
||||
const javaHome = system.isWindows() ? '%JAVA_HOME%' : '$JAVA_HOME';
|
||||
|
||||
@@ -7,6 +7,9 @@ import {DoctorCheck, FixSkippedError} from './doctor';
|
||||
import log from './logger';
|
||||
import {fixIt} from './prompt';
|
||||
|
||||
/**
|
||||
* @type {import('./factory').DoctorCheckList}
|
||||
*/
|
||||
let checks = [];
|
||||
|
||||
class DirCheck extends DoctorCheck {
|
||||
|
||||
@@ -4,6 +4,9 @@ import {fs, system} from '@appium/support';
|
||||
import path from 'path';
|
||||
import '@colors/colors';
|
||||
|
||||
/**
|
||||
* @type {import('./factory').DoctorCheckList}
|
||||
*/
|
||||
let checks = [];
|
||||
|
||||
// Check PATH binaries
|
||||
|
||||
@@ -7,15 +7,29 @@ const {version} = fs.readPackageJsonFrom(__dirname);
|
||||
|
||||
class FixSkippedError extends Error {}
|
||||
|
||||
/**
|
||||
* Create interface for other Doctors
|
||||
*/
|
||||
class DoctorCheck {
|
||||
/**
|
||||
* @param {DoctorOpts} opts
|
||||
*/
|
||||
constructor(opts = {}) {
|
||||
this.autofix = !!opts.autofix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Every doctor diagnose the symptoms
|
||||
* @throws {Error}
|
||||
*/
|
||||
diagnose() {
|
||||
throw new Error('Not Implemented!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Every doctor suggest the solutions to fix the sickness
|
||||
* @throws {Error}
|
||||
*/
|
||||
fix() {
|
||||
// return string for manual fixes.
|
||||
throw new Error('Not Implemented!');
|
||||
@@ -24,17 +38,28 @@ class DoctorCheck {
|
||||
|
||||
class Doctor {
|
||||
constructor() {
|
||||
/**
|
||||
* All the sub check goes here after register
|
||||
* @type {DoctorCheck[]}
|
||||
*/
|
||||
this.checks = [];
|
||||
this.checkOptionals = [];
|
||||
this.toFix = [];
|
||||
this.toFixOptionals = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Register all the sub check and combine them together
|
||||
* @param {DoctorCheck[] | DoctorCheck} checks
|
||||
*/
|
||||
register(checks) {
|
||||
checks = Array.isArray(checks) ? checks : [checks];
|
||||
this.checks = this.checks.concat(checks);
|
||||
}
|
||||
|
||||
/**
|
||||
* The doctor shows the report
|
||||
*/
|
||||
async diagnose() {
|
||||
log.info(`### Diagnostic for ${'necessary'.green} dependencies starting ###`);
|
||||
this.toFix = [];
|
||||
@@ -211,3 +236,8 @@ class Doctor {
|
||||
}
|
||||
|
||||
export {Doctor, DoctorCheck, FixSkippedError};
|
||||
|
||||
/**
|
||||
* @typedef DoctorOpts
|
||||
* @property {boolean?} autofix
|
||||
*/
|
||||
|
||||
@@ -6,6 +6,9 @@ import androidChecks from './android';
|
||||
import devChecks from './dev';
|
||||
import demoChecks from './demo';
|
||||
|
||||
/**
|
||||
* @type {DoctorGroup}
|
||||
*/
|
||||
let checks = {generalChecks, iosChecks, androidChecks, devChecks, demoChecks};
|
||||
|
||||
let newDoctor = (opts) => {
|
||||
@@ -19,3 +22,16 @@ let newDoctor = (opts) => {
|
||||
};
|
||||
|
||||
export default newDoctor;
|
||||
|
||||
/**
|
||||
* @typedef {import('./doctor').DoctorCheck[]} DoctorCheckList
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef DoctorGroup - Contain a group of Doctors
|
||||
* @property {DoctorCheckList} generalChecks - Check AppiumHome, NodeBinary, NodeVersion, ffmpeg, mjpeg-consumer
|
||||
* @property {DoctorCheckList} iosChecks - Check if iOS toolchains are installed
|
||||
* @property {DoctorCheckList} androidChecks - Check if Android toolchains are installed
|
||||
* @property {DoctorCheckList} devChecks - Check Path Binary and Android SDKs
|
||||
* @property {DoctorCheckList} demoChecks - Check /tmp/appium-doctor/demo/*
|
||||
*/
|
||||
|
||||
@@ -6,9 +6,16 @@ import {util, env} from '@appium/support';
|
||||
import {EOL} from 'os';
|
||||
import '@colors/colors';
|
||||
|
||||
/**
|
||||
* @type {import('./factory').DoctorCheckList}
|
||||
*/
|
||||
let checks = [];
|
||||
|
||||
class AppiumHomeCheck extends DoctorCheck {
|
||||
/**
|
||||
*
|
||||
* @returns {UtilsResult}
|
||||
*/
|
||||
async diagnose() {
|
||||
return ok(`APPIUM_HOME is ${await env.resolveAppiumHome()}`);
|
||||
}
|
||||
@@ -59,6 +66,10 @@ class NodeVersionCheck extends DoctorCheck {
|
||||
checks.push(new NodeVersionCheck());
|
||||
|
||||
class OptionalFfmpegCommandCheck extends DoctorCheck {
|
||||
/**
|
||||
*
|
||||
* @returns {Promise<UtilsResult>}
|
||||
*/
|
||||
async diagnose() {
|
||||
const ffmpegPath = await resolveExecutablePath('ffmpeg');
|
||||
return ffmpegPath
|
||||
@@ -69,8 +80,11 @@ class OptionalFfmpegCommandCheck extends DoctorCheck {
|
||||
)
|
||||
: nokOptional('ffmpeg cannot be found');
|
||||
}
|
||||
// eslint-disable-next-line require-await
|
||||
async fix() {
|
||||
/**
|
||||
*
|
||||
* @returns {string}
|
||||
*/
|
||||
fix() {
|
||||
return `${
|
||||
'ffmpeg'.bold
|
||||
} is needed to record screen features. Please read https://www.ffmpeg.org/ to install it`;
|
||||
@@ -107,3 +121,7 @@ export {
|
||||
OptionalMjpegConsumerCommandCheck,
|
||||
};
|
||||
export default checks;
|
||||
|
||||
/**
|
||||
* @typedef {import('./utils').UtilsResult} UtilsResult
|
||||
*/
|
||||
|
||||
@@ -7,6 +7,9 @@ import {fixIt} from './prompt';
|
||||
import EnvVarAndPathCheck from './env';
|
||||
import '@colors/colors';
|
||||
|
||||
/**
|
||||
* @type {import('./factory').DoctorCheckList}
|
||||
*/
|
||||
let checks = [];
|
||||
let fixes = {};
|
||||
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import {inquirer} from './utils';
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
let persistentResponse;
|
||||
|
||||
const fixItQuestion = {
|
||||
@@ -7,6 +10,11 @@ const fixItQuestion = {
|
||||
name: 'confirmation',
|
||||
message: 'Fix it:',
|
||||
choices: ['yes', 'no', 'always', 'never'],
|
||||
/**
|
||||
*
|
||||
* @param {string} val
|
||||
* @returns {string}
|
||||
*/
|
||||
filter(val) {
|
||||
return val.toLowerCase();
|
||||
},
|
||||
|
||||
@@ -5,15 +5,34 @@ import {fs, system} from '@appium/support';
|
||||
import {exec} from 'teen_process';
|
||||
import {isFunction} from 'lodash';
|
||||
|
||||
/**
|
||||
* @param {string} message
|
||||
* @returns {UtilsResult}
|
||||
*/
|
||||
function ok(message) {
|
||||
return {ok: true, optional: false, message};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} message
|
||||
* @returns {UtilsResult}
|
||||
*/
|
||||
function nok(message) {
|
||||
return {ok: false, optional: false, message};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} message
|
||||
* @returns {UtilsResult}
|
||||
*/
|
||||
function okOptional(message) {
|
||||
return {ok: true, optional: true, message};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} message
|
||||
* @returns {UtilsResult}
|
||||
*/
|
||||
function nokOptional(message) {
|
||||
return {ok: false, optional: true, message};
|
||||
}
|
||||
@@ -122,3 +141,10 @@ export {
|
||||
getNpmPackageInfo,
|
||||
resetLog,
|
||||
};
|
||||
|
||||
/**
|
||||
* @typedef UtilsResult
|
||||
* @property {boolean} ok
|
||||
* @property {boolean} optional
|
||||
* @property {string} message
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/doctor",
|
||||
"version": "2.0.1",
|
||||
"version": "2.0.3",
|
||||
"description": "Test environment for fitness to run Appium",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -34,7 +34,8 @@
|
||||
"appium-doctor.js",
|
||||
"lib",
|
||||
"bin",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -42,11 +43,11 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/support": "^3.0.1",
|
||||
"@appium/support": "^3.1.1",
|
||||
"@colors/colors": "1.5.0",
|
||||
"@types/bluebird": "3.5.38",
|
||||
"@types/teen_process": "2.0.0",
|
||||
"appium-adb": "9.10.19",
|
||||
"appium-adb": "9.10.21",
|
||||
"bluebird": "3.7.2",
|
||||
"inquirer": "8.2.5",
|
||||
"lodash": "4.17.21",
|
||||
@@ -61,5 +62,5 @@
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72"
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2"
|
||||
}
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "build",
|
||||
"paths": {
|
||||
"@appium/support": ["../support"],
|
||||
},
|
||||
"@appium/support": ["../support"]
|
||||
}
|
||||
},
|
||||
"include": ["lib", "bin"],
|
||||
"references": [
|
||||
{"path": "../support"}
|
||||
]
|
||||
"references": [{"path": "../support"}]
|
||||
}
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.1.3](https://github.com/appium/appium/compare/@appium/docutils@0.1.2...@appium/docutils@0.1.3) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/docutils
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.1.2](https://github.com/appium/appium/compare/@appium/docutils@0.1.1...@appium/docutils@0.1.2) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/docutils
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.1.1](https://github.com/appium/appium/compare/@appium/docutils@0.1.0...@appium/docutils@0.1.1) (2022-12-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -6,11 +6,11 @@ const DEFAULT_BRANCH = 'gh-pages';
|
||||
const MIKE_VER_STRING = 'mike 1.';
|
||||
|
||||
export class Mike {
|
||||
/** @type string */ remote;
|
||||
/** @type string */ branch;
|
||||
/** @type string? */ prefix;
|
||||
/** @type string */ configFile;
|
||||
/** @type boolean */ _mikeVerified = false;
|
||||
/** @type {string} */ remote;
|
||||
/** @type {string} */ branch;
|
||||
/** @type {string?} */ prefix;
|
||||
/** @type {string} */ configFile;
|
||||
/** @type {boolean} */ _mikeVerified = false;
|
||||
|
||||
constructor(/** @type MikeOpts */ opts) {
|
||||
this.remote = opts.remote || DEFAULT_REMOTE;
|
||||
@@ -22,7 +22,7 @@ export class Mike {
|
||||
/**
|
||||
* Throw an error if the 'mike' binary cannot be found
|
||||
*
|
||||
* @throws Error
|
||||
* @throws {Error}
|
||||
*/
|
||||
async verifyMike() {
|
||||
if (this._mikeVerified) {
|
||||
@@ -46,7 +46,7 @@ export class Mike {
|
||||
* @param {string} cmdName - the name of the mike command to run
|
||||
* @param {string[]} cmdArgs - an array of command-specific arguments
|
||||
*
|
||||
* @returns string[]
|
||||
* @returns {string[]}
|
||||
*/
|
||||
getMikeArgs(cmdName, cmdArgs) {
|
||||
return [
|
||||
@@ -70,7 +70,7 @@ export class Mike {
|
||||
* @param {string[]} [mikeArgs=[]] - the arguments to pass to the mike command
|
||||
* @param {boolean?} [verify=true] - whether to verify mike exists first
|
||||
*
|
||||
* @returns Promise<import('teen_process').ExecResult<string>>
|
||||
* @returns {Promise<import('teen_process').ExecResult<string>>}
|
||||
*/
|
||||
async exec(mikeCmd, mikeArgs = [], verify = true) {
|
||||
if (verify) {
|
||||
@@ -84,7 +84,7 @@ export class Mike {
|
||||
/**
|
||||
* Return the list of mike deploys
|
||||
*
|
||||
* @returns string[]
|
||||
* @returns {string[]}
|
||||
*/
|
||||
async list() {
|
||||
const {stdout} = await this.exec('list');
|
||||
|
||||
@@ -22,9 +22,9 @@ export async function verifyMkdocs() {
|
||||
/**
|
||||
* Run 'mkdocs build' on a project
|
||||
*
|
||||
* @param {string} configPath path to mkdocs config yml
|
||||
* @param {string} outputDir directory mkdocs should build into
|
||||
* @param {?string} theme theme name
|
||||
* @param {string} configPath - path to mkdocs config yml
|
||||
* @param {string} outputDir - directory mkdocs should build into
|
||||
* @param {string?} theme - theme name
|
||||
*/
|
||||
export async function mkdocsBuild(configPath, outputDir, theme = 'mkdocs') {
|
||||
await verifyMkdocs();
|
||||
@@ -34,7 +34,7 @@ export async function mkdocsBuild(configPath, outputDir, theme = 'mkdocs') {
|
||||
/**
|
||||
* Run 'mkdocs serve' on a project
|
||||
*
|
||||
* @param {string} configPath path to mkdocs config yml
|
||||
* @param {string} configPath - path to mkdocs config yml
|
||||
*/
|
||||
export async function mkdocsServe(configPath) {
|
||||
await verifyMkdocs();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/docutils",
|
||||
"version": "0.1.1",
|
||||
"version": "0.1.3",
|
||||
"description": "Documentation generation utilities for Appium and related projects",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -32,7 +32,8 @@
|
||||
"index.d.ts",
|
||||
"base-mkdocs.yml",
|
||||
"lib",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -41,7 +42,7 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/support": "^3.0.1",
|
||||
"@appium/support": "^3.1.1",
|
||||
"source-map-support": "0.5.21",
|
||||
"teen_process": "2.0.2"
|
||||
},
|
||||
@@ -52,5 +53,5 @@
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72"
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
mkdocs==1.4.2
|
||||
mkdocs-material==8.5.11
|
||||
mkdocs-material==9.0.4
|
||||
mkdocs-material-extensions==1.1.1
|
||||
mike==1.1.2
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": ".",
|
||||
"outDir": "build",
|
||||
|
||||
@@ -3,6 +3,27 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.3.3](https://github.com/appium/appium/compare/@appium/driver-test-support@0.3.2...@appium/driver-test-support@0.3.3) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/driver-test-support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.3.2](https://github.com/appium/appium/compare/@appium/driver-test-support@0.3.1...@appium/driver-test-support@0.3.2) (2023-01-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **support:** update dependency axios to v1.2.2 ([5291ca6](https://github.com/appium/appium/commit/5291ca672b3b47c5270e9fd85de3e4ed76a650e0))
|
||||
* **types:** update dependency type-fest to v3.5.0 ([8c8bfe8](https://github.com/appium/appium/commit/8c8bfe824dbe062e24cfe9fc6e1afa2f68cc6e4c))
|
||||
* **types:** update dependency type-fest to v3.5.1 ([4b5ab4d](https://github.com/appium/appium/commit/4b5ab4da7be925d0592c18e8f46a9ce30fbddf8e))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.3.1](https://github.com/appium/appium/compare/@appium/driver-test-support@0.3.0...@appium/driver-test-support@0.3.1) (2022-12-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/driver-test-support",
|
||||
"version": "0.3.1",
|
||||
"version": "0.3.3",
|
||||
"description": "Test utilities for Appium drivers",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -30,7 +30,8 @@
|
||||
"files": [
|
||||
"index.js",
|
||||
"lib",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -39,16 +40,16 @@
|
||||
},
|
||||
"types": "./build/lib/index.d.ts",
|
||||
"dependencies": {
|
||||
"@appium/types": "^0.7.0",
|
||||
"@appium/types": "^0.8.1",
|
||||
"@types/lodash": "4.14.191",
|
||||
"axios": "1.2.1",
|
||||
"axios": "1.2.2",
|
||||
"bluebird": "3.7.2",
|
||||
"chai": "4.3.7",
|
||||
"get-port": "5.1.1",
|
||||
"lodash": "4.17.21",
|
||||
"sinon": "15.0.1",
|
||||
"source-map-support": "0.5.21",
|
||||
"type-fest": "3.4.0"
|
||||
"type-fest": "3.5.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"appium": "^2.0.0-beta.43",
|
||||
@@ -60,5 +61,6 @@
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
},
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2"
|
||||
}
|
||||
|
||||
@@ -1,20 +1,15 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": ".",
|
||||
"outDir": "build",
|
||||
"checkJs": true,
|
||||
"paths": {
|
||||
"@appium/types": ["../types"],
|
||||
"appium/driver": ["../base-driver"],
|
||||
"appium/driver": ["../base-driver"]
|
||||
},
|
||||
"types": [
|
||||
"mocha", "chai", "chai-as-promised"
|
||||
]
|
||||
"types": ["mocha", "chai", "chai-as-promised"]
|
||||
},
|
||||
"include": ["./lib"],
|
||||
"references": [
|
||||
{"path": "../types"},
|
||||
{"path": "../base-driver"}
|
||||
]
|
||||
"references": [{"path": "../types"}, {"path": "../base-driver"}]
|
||||
}
|
||||
|
||||
@@ -3,6 +3,29 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.0.3](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.2...@appium/execute-driver-plugin@3.0.3) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/execute-driver-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.0.2](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.1...@appium/execute-driver-plugin@3.0.2) (2023-01-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **execute-driver-plugin:** fix bad types in execute-child module ([697b442](https://github.com/appium/appium/commit/697b4427e4e60821943e8c05292e8f6eb43aa22f))
|
||||
* **execute-driver-plugin:** update dependency webdriverio to v7.28.1 ([2bb4f32](https://github.com/appium/appium/commit/2bb4f32329938e15062e42b585dd760cca5ae17b))
|
||||
* **execute-driver-plugin:** update dependency webdriverio to v7.29.0 ([a3fad3e](https://github.com/appium/appium/commit/a3fad3ed28822b1dfaae72cbfb8d7906ec35e158))
|
||||
* **execute-driver-plugin:** update dependency webdriverio to v7.29.1 ([7c59380](https://github.com/appium/appium/commit/7c59380e6b97691ff16a8d98a912d67b7972593a))
|
||||
* **execute-driver-plugin:** use correct return type annotation ([7add23e](https://github.com/appium/appium/commit/7add23e4183e6982048cd653b2a47eb052ccc38a))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.0.1](https://github.com/appium/appium/compare/@appium/execute-driver-plugin@3.0.0...@appium/execute-driver-plugin@3.0.1) (2022-12-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -5,6 +5,9 @@ import {logger, util} from 'appium/support';
|
||||
import {attach} from 'webdriverio';
|
||||
|
||||
const log = logger.getLogger('ExecuteDriver Child');
|
||||
/**
|
||||
* @type {(res: ScriptResult) => Promise<void>}
|
||||
*/
|
||||
let send;
|
||||
|
||||
// duplicate defining these keys here so we don't need to re-load a huge appium
|
||||
@@ -12,12 +15,22 @@ let send;
|
||||
export const W3C_ELEMENT_KEY = util.W3C_WEB_ELEMENT_IDENTIFIER;
|
||||
export const MJSONWP_ELEMENT_KEY = 'ELEMENT';
|
||||
|
||||
async function runScript(driverOpts, script, timeoutMs) {
|
||||
/**
|
||||
* Run the script in a VM.
|
||||
* @param {DriverScriptMessageEvent} eventParams
|
||||
* @returns {Promise<RunScriptResult>}
|
||||
* @throws {TypeError}
|
||||
*/
|
||||
async function runScript(eventParams) {
|
||||
const {driverOpts, script, timeoutMs} = eventParams;
|
||||
if (!_.isNumber(timeoutMs)) {
|
||||
throw new TypeError('Timeout parameter must be a number');
|
||||
}
|
||||
|
||||
// set up fake logger
|
||||
/**
|
||||
* set up fake logger
|
||||
* @type {string[]}
|
||||
*/
|
||||
const logLevels = ['error', 'warn', 'log'];
|
||||
const logs = {};
|
||||
const consoleFns = {};
|
||||
@@ -122,11 +135,22 @@ function coerceScriptResult(obj) {
|
||||
return obj;
|
||||
}
|
||||
|
||||
async function main(driverOpts, script, timeoutMs) {
|
||||
/**
|
||||
* Entry point to runScript
|
||||
* @param {DriverScriptMessageEvent} eventParams
|
||||
*/
|
||||
async function main(eventParams) {
|
||||
/**
|
||||
* keep the response of runScript
|
||||
* @type {ScriptResult}
|
||||
*/
|
||||
let res;
|
||||
log.info('Parameters received from parent process');
|
||||
try {
|
||||
res = {success: await runScript(driverOpts, script, timeoutMs)};
|
||||
res = {success: await runScript(eventParams)};
|
||||
log.info('runScript success');
|
||||
} catch (error) {
|
||||
log.info('runScript error');
|
||||
res = {error: {message: error.message, stack: error.stack}};
|
||||
}
|
||||
await send(res);
|
||||
@@ -136,8 +160,34 @@ async function main(driverOpts, script, timeoutMs) {
|
||||
if (require.main === module && _.isFunction(process.send)) {
|
||||
send = B.promisify(process.send, {context: process});
|
||||
log.info('Running driver execution in child process');
|
||||
process.on('message', ({driverOpts, script, timeoutMs}) => {
|
||||
log.info('Parameters received from parent process');
|
||||
main(driverOpts, script, timeoutMs);
|
||||
});
|
||||
process.on('message', main);
|
||||
}
|
||||
|
||||
/**
|
||||
* @typedef {import('webdriverio').AttachOptions} AttachOptions
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef DriverScriptMessageEvent
|
||||
* @property {AttachOptions} driverOpts - the driver options
|
||||
* @property {string} script - the javascript to execute
|
||||
* @property {number} timeoutMs - script timeout in milliseconds
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef ScriptResult
|
||||
* @property {any} [success]
|
||||
* @property {ScriptResultError} [error]
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef ScriptResultError
|
||||
* @property {any} message
|
||||
* @property {any} stack
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef RunScriptResult
|
||||
* @property {any} result
|
||||
* @property {object} logs
|
||||
*/
|
||||
|
||||
@@ -23,15 +23,17 @@ export default class ExecuteDriverPlugin extends BasePlugin {
|
||||
* a new nodejs VM, and which has available a webdriverio driver object, having
|
||||
* already been attached to the currently running session.
|
||||
*
|
||||
* @param {function} next - standard behaviour for executeDriverScript
|
||||
* @param {BaseDriver} driver - Appium driver handling this command
|
||||
* @param {import('@appium/types').NextPluginCallback} next - standard behaviour for executeDriverScript
|
||||
* @param {import('@appium/types').ExternalDriver} driver - Appium driver handling this command
|
||||
* @param {string} script - the string representing the driver script to run
|
||||
* @param {string} [scriptType='webdriverio'] - the name of the driver script
|
||||
* library (currently only webdriverio is supported)
|
||||
* @param {number} [timeoutMs=3600000] - timeout for the script process
|
||||
*
|
||||
* @returns {Object} - a JSONifiable object representing the return value of
|
||||
* @returns {Promise<any>} - a JSONifiable object representing the return value of
|
||||
* the script
|
||||
* @type {import('@appium/types').PluginCommand<[string, string?, number?]>}
|
||||
* @throws {Error}
|
||||
*/
|
||||
async executeDriverScript(
|
||||
next,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/execute-driver-plugin",
|
||||
"version": "3.0.1",
|
||||
"version": "3.0.3",
|
||||
"description": "Plugin for batching and executing driver commands with Appiums",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -23,10 +23,12 @@
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"author": "https://github.com/appium",
|
||||
"types": "./build/lib/plugin.d.ts",
|
||||
"files": [
|
||||
"build",
|
||||
"lib",
|
||||
"index.js"
|
||||
"index.js",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -40,11 +42,15 @@
|
||||
"lodash": "4.17.21",
|
||||
"source-map-support": "0.5.21",
|
||||
"vm2": "3.9.13",
|
||||
"webdriverio": "7.28.0"
|
||||
"webdriverio": "7.29.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"appium": "^2.0.0-beta.35"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
||||
"npm": ">=8"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
@@ -52,9 +58,8 @@
|
||||
"pluginName": "execute-driver",
|
||||
"mainClass": "ExecuteDriverPlugin"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
||||
"npm": ">=8"
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"typedoc": {
|
||||
"entryPoint": "./lib/plugin.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"outDir": "build"
|
||||
"outDir": "build",
|
||||
"checkJs": true
|
||||
},
|
||||
"extends": "../../config/tsconfig.plugin.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.plugin.json",
|
||||
"include": ["lib"]
|
||||
}
|
||||
|
||||
@@ -3,6 +3,26 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [5.1.1](https://github.com/appium/appium/compare/@appium/fake-driver@5.1.0...@appium/fake-driver@5.1.1) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-driver
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [5.1.0](https://github.com/appium/appium/compare/@appium/fake-driver@5.0.0...@appium/fake-driver@5.1.0) (2023-01-13)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **base-driver:** deprecate non-standard routes ([7055a0b](https://github.com/appium/appium/commit/7055a0b28193f677b21541ddada3c4a314f90f5b))
|
||||
* **typedoc-appium-plugin:** implement cross-referencing of methods ([8b33414](https://github.com/appium/appium/commit/8b334149018f7d49448da9e7982356c72bcd468e))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [5.0.0](https://github.com/appium/appium/compare/@appium/fake-driver@4.2.2...@appium/fake-driver@5.0.0) (2022-12-14)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -26,9 +26,8 @@ export function ContextsMixin(Base) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current appium context
|
||||
*
|
||||
// do not add a description to this method's docstring
|
||||
/*
|
||||
* @returns {Promise<string>}
|
||||
*/
|
||||
async getCurrentContext() {
|
||||
|
||||
@@ -64,6 +64,10 @@ export function ElementMixin(Base) {
|
||||
await this.setValue('', elementId);
|
||||
}
|
||||
|
||||
/**
|
||||
* This comment should be displayed instead of the one from ExternalDriver
|
||||
* @param {string} elementId
|
||||
*/
|
||||
async click(elementId) {
|
||||
this.assertNoAlert();
|
||||
let el = this.getElement(elementId);
|
||||
|
||||
@@ -78,6 +78,11 @@ export function FindMixin(Base) {
|
||||
return /** @type {Mult extends true ? Element[] : Element} */ (retval);
|
||||
}
|
||||
|
||||
/**
|
||||
* This should override whatever's in ExternalDriver
|
||||
* @param {string} strategy Strategy
|
||||
* @param {string} selector Selector
|
||||
*/
|
||||
async findElement(strategy, selector) {
|
||||
return this.findElOrEls(strategy, selector, false);
|
||||
}
|
||||
|
||||
@@ -79,6 +79,12 @@ export function GeneralMixin(Base) {
|
||||
}
|
||||
}
|
||||
|
||||
async mobileShake() {
|
||||
this.shook = true;
|
||||
}
|
||||
|
||||
async doubleClick() {}
|
||||
|
||||
async execute(script, args) {
|
||||
return await this.executeMethod(script, args);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import {GeneralMixin} from './general';
|
||||
/**
|
||||
*
|
||||
* @param {import('@appium/types').Class<import('../driver').FakeDriverCore>} Base
|
||||
* @returns
|
||||
*/
|
||||
export function FakeDriverMixin(Base) {
|
||||
return GeneralMixin(FindMixin(ElementMixin(AlertMixin(ContextsMixin(Base)))));
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import B from 'bluebird';
|
||||
import {BaseDriver, errors} from 'appium/driver';
|
||||
import {deprecatedCommandsLogged} from '@appium/base-driver/build/lib/protocol/protocol';
|
||||
import {FakeApp} from './fake-app';
|
||||
import {FakeDriverMixin} from './commands';
|
||||
|
||||
@@ -37,6 +38,7 @@ export class FakeDriverCore extends BaseDriver {
|
||||
this.maxElId = 0;
|
||||
this.fakeThing = null;
|
||||
this._proxyActive = false;
|
||||
this.shook = false;
|
||||
}
|
||||
|
||||
proxyActive() {
|
||||
@@ -65,25 +67,21 @@ export class FakeDriverCore extends BaseDriver {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {W3CFakeDriverCaps} jsonwpDesiredCapabilities
|
||||
* @param {W3CFakeDriverCaps} [jsonwpRequiredCaps]
|
||||
* @param {W3CFakeDriverCaps} [w3cCapabilities]
|
||||
* @param {import('@appium/types').DriverData[]} [otherSessionData]
|
||||
* @returns {Promise<[string,FakeDriverCaps]>}
|
||||
* Comment for `createSession` in `FakeDriver`
|
||||
* @param {W3CFakeDriverCaps} w3cCapabilities1 W3C Capabilities
|
||||
* @param {W3CFakeDriverCaps} [w3cCapabilities2] W3C Capabilities
|
||||
* @param {W3CFakeDriverCaps} [w3cCapabilities3] W3C Capabilities
|
||||
* @param {import('@appium/types').DriverData[]} [driverData] Other session data
|
||||
* @override
|
||||
* @returns {Promise<[string,FakeDriverCaps]>} Session ID and normalized capabilities
|
||||
*/
|
||||
async createSession(
|
||||
jsonwpDesiredCapabilities,
|
||||
jsonwpRequiredCaps,
|
||||
w3cCapabilities,
|
||||
otherSessionData = []
|
||||
) {
|
||||
async createSession(w3cCapabilities1, w3cCapabilities2, w3cCapabilities3, driverData = []) {
|
||||
// TODO add validation on caps.app that we will get for free from
|
||||
// BaseDriver
|
||||
|
||||
// check to see if any other sessions have set uniqueApp. If so, emulate
|
||||
// not being able to start a session because of system resources
|
||||
for (let d of otherSessionData) {
|
||||
for (let d of driverData) {
|
||||
if (d.isUnique) {
|
||||
throw new errors.SessionNotCreatedError(
|
||||
'Cannot start session; another ' +
|
||||
@@ -93,12 +91,7 @@ export class FakeDriverCore extends BaseDriver {
|
||||
}
|
||||
|
||||
let [sessionId, caps] = /** @type {[string, FakeDriverCaps]} */ (
|
||||
await super.createSession(
|
||||
jsonwpDesiredCapabilities,
|
||||
jsonwpRequiredCaps,
|
||||
w3cCapabilities,
|
||||
otherSessionData
|
||||
)
|
||||
await super.createSession(w3cCapabilities1, w3cCapabilities2, w3cCapabilities3, driverData)
|
||||
);
|
||||
this.caps = caps;
|
||||
await this.appModel.loadApp(caps.app);
|
||||
@@ -138,6 +131,25 @@ export class FakeDriverCore extends BaseDriver {
|
||||
return this.cliArgs;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a command that will return a list of deprecated command names called
|
||||
*
|
||||
* @returns {Promise<string[]>}
|
||||
*/
|
||||
async getDeprecatedCommandsCalled() {
|
||||
await B.delay(1);
|
||||
return Array.from(deprecatedCommandsLogged);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a command that exists just to be an example of a deprecated command
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async callDeprecatedCommand() {
|
||||
await B.delay(1);
|
||||
}
|
||||
|
||||
static newMethodMap = /** @type {const} */ ({
|
||||
'/session/:sessionId/fakedriver': {
|
||||
GET: {command: 'getFakeThing'},
|
||||
@@ -149,6 +161,13 @@ export class FakeDriverCore extends BaseDriver {
|
||||
'/session/:sessionId/fakedriverargs': {
|
||||
GET: {command: 'getFakeDriverArgs'},
|
||||
},
|
||||
'/session/:sessionId/deprecated': {
|
||||
POST: {command: 'callDeprecatedCommand', deprecated: true},
|
||||
},
|
||||
// this next one exists to override a deprecated method
|
||||
'/session/:sessionId/doubleclick': {
|
||||
POST: {command: 'doubleClick'},
|
||||
},
|
||||
});
|
||||
|
||||
static executeMethodMap = /** @type {const} */ ({
|
||||
@@ -166,6 +185,9 @@ export class FakeDriverCore extends BaseDriver {
|
||||
command: 'setFakeThing',
|
||||
params: {required: ['thing']},
|
||||
},
|
||||
'fake: getDeprecatedCommandsCalled': {
|
||||
command: 'getDeprecatedCommandsCalled',
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,3 +15,8 @@ async function main() {
|
||||
}
|
||||
|
||||
export {FakeDriver, startServer, main};
|
||||
|
||||
/**
|
||||
* @typedef {import('./types').W3CFakeDriverCaps} W3CFakeDriverCaps
|
||||
* @typedef {import('./types').FakeDriverCaps} FakeDriverCaps
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/fake-driver",
|
||||
"version": "5.0.0",
|
||||
"version": "5.1.1",
|
||||
"description": "Mock driver used internally by Appium for testing. Ignore",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -33,7 +33,8 @@
|
||||
"index.js",
|
||||
"lib",
|
||||
"build",
|
||||
"test/fixtures"
|
||||
"test/fixtures",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "cpy lib/screen.png build",
|
||||
@@ -77,8 +78,8 @@
|
||||
}
|
||||
},
|
||||
"typedoc": {
|
||||
"entryPoint": "./build/lib/index.js"
|
||||
"entryPoint": "./lib/index.js"
|
||||
},
|
||||
"types": "./build/lib/index.d.ts",
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72"
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "build",
|
||||
"checkJs": true,
|
||||
|
||||
@@ -3,6 +3,25 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.1.1](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.0...@appium/fake-plugin@3.1.1) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [3.1.0](https://github.com/appium/appium/compare/@appium/fake-plugin@3.0.1...@appium/fake-plugin@3.1.0) (2023-01-13)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **typedoc-appium-plugin:** implement cross-referencing of methods ([8b33414](https://github.com/appium/appium/commit/8b334149018f7d49448da9e7982356c72bcd468e))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.0.1](https://github.com/appium/appium/compare/@appium/fake-plugin@3.0.0...@appium/fake-plugin@3.0.1) (2022-12-21)
|
||||
|
||||
**Note:** Version bump only for package @appium/fake-plugin
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
{
|
||||
"name": "@appium/fake-plugin",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.1",
|
||||
"description": "A fake Appium 2.0 plugin",
|
||||
"keywords": [
|
||||
"automation",
|
||||
"javascript",
|
||||
"selenium",
|
||||
"webdriver",
|
||||
"ios",
|
||||
"android",
|
||||
"firefoxos",
|
||||
"testing"
|
||||
],
|
||||
"homepage": "https://appium.io",
|
||||
"bugs": {
|
||||
"url": "https://github.com/appium/appium/issues"
|
||||
@@ -13,14 +23,14 @@
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"author": "https://github.com/appium",
|
||||
"main": "./build/index.js",
|
||||
"directories": {
|
||||
"lib": "./lib"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"lib",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -28,8 +38,8 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/base-plugin": "^2.0.1",
|
||||
"@appium/support": "^3.0.1",
|
||||
"@appium/base-plugin": "^2.1.1",
|
||||
"@appium/support": "^3.1.1",
|
||||
"@types/bluebird": "3.5.38",
|
||||
"bluebird": "3.7.2",
|
||||
"lodash": "4.17.21",
|
||||
@@ -50,18 +60,14 @@
|
||||
"fake-success": "./build/lib/scripts/fake-success.js"
|
||||
}
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"tags": [
|
||||
"appium"
|
||||
],
|
||||
"keywords": [
|
||||
"automation",
|
||||
"javascript",
|
||||
"selenium",
|
||||
"webdriver",
|
||||
"ios",
|
||||
"android",
|
||||
"firefoxos",
|
||||
"testing"
|
||||
]
|
||||
"typedoc": {
|
||||
"entryPoint": "./lib/plugin.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,11 @@
|
||||
"compilerOptions": {
|
||||
"outDir": "build"
|
||||
},
|
||||
"extends": "../../config/tsconfig.plugin.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.plugin.json",
|
||||
"include": ["lib"],
|
||||
"references": [{
|
||||
"path": "../base-plugin"
|
||||
}]
|
||||
"references": [
|
||||
{
|
||||
"path": "../base-plugin"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,6 +3,25 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.0.3](https://github.com/appium/appium/compare/@appium/images-plugin@2.0.2...@appium/images-plugin@2.0.3) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/images-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.2](https://github.com/appium/appium/compare/@appium/images-plugin@2.0.1...@appium/images-plugin@2.0.2) (2023-01-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **images-plugin,universal-xml-plugin,typedoc-plugin-appium:** add missing lodash dependency ([696c94f](https://github.com/appium/appium/commit/696c94f1abf1da15fb9e3a4d60b95cd2d69d9e7c))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.1](https://github.com/appium/appium/compare/@appium/images-plugin@2.0.0...@appium/images-plugin@2.0.1) (2022-12-21)
|
||||
|
||||
**Note:** Version bump only for package @appium/images-plugin
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/images-plugin",
|
||||
"version": "2.0.1",
|
||||
"version": "2.0.3",
|
||||
"description": "Plugin for working with images and image elements in Appium",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -12,6 +12,7 @@
|
||||
"firefoxos",
|
||||
"testing"
|
||||
],
|
||||
"homepage": "https://appium.io",
|
||||
"bugs": {
|
||||
"url": "https://github.com/appium/appium/issues"
|
||||
},
|
||||
@@ -22,11 +23,13 @@
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"author": "https://github.com/appium",
|
||||
"types": "./build/lib/plugin.d.ts",
|
||||
"files": [
|
||||
"build",
|
||||
"docs",
|
||||
"lib",
|
||||
"index.js"
|
||||
"index.js",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -35,22 +38,27 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/opencv": "^2.0.1",
|
||||
"@appium/opencv": "^2.0.3",
|
||||
"lodash": "4.17.21",
|
||||
"lru-cache": "7.14.1",
|
||||
"source-map-support": "0.5.21"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"appium": "^2.0.0-beta.35"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
||||
"npm": ">=8"
|
||||
},
|
||||
"appium": {
|
||||
"pluginName": "images",
|
||||
"mainClass": "ImageElementPlugin"
|
||||
},
|
||||
"types": "./build/lib/plugin.d.ts",
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"homepage": "https://appium.io",
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
||||
"npm": ">=8"
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"typedoc": {
|
||||
"entryPoint": "./lib/plugin.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"@appium/opencv": ["../opencv"]
|
||||
}
|
||||
},
|
||||
"extends": "../../config/tsconfig.plugin.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.plugin.json",
|
||||
"include": ["lib"],
|
||||
"references": [
|
||||
{
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.0.3](https://github.com/appium/appium/compare/@appium/opencv@2.0.2...@appium/opencv@2.0.3) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/opencv
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.2](https://github.com/appium/appium/compare/@appium/opencv@2.0.1...@appium/opencv@2.0.2) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/opencv
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.0.1](https://github.com/appium/appium/compare/@appium/opencv@2.0.0...@appium/opencv@2.0.1) (2022-12-21)
|
||||
|
||||
**Note:** Version bump only for package @appium/opencv
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/opencv",
|
||||
"version": "2.0.1",
|
||||
"version": "2.0.3",
|
||||
"description": "OpenCV-related helper library",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -30,7 +30,8 @@
|
||||
"files": [
|
||||
"index.js",
|
||||
"lib",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -53,7 +54,7 @@
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"overrides": {
|
||||
"jpeg-js": "0.4.4"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "build"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.3.3](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.2...@appium/plugin-test-support@0.3.3) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/plugin-test-support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.3.2](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.1...@appium/plugin-test-support@0.3.2) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/plugin-test-support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.3.1](https://github.com/appium/appium/compare/@appium/plugin-test-support@0.3.0...@appium/plugin-test-support@0.3.1) (2022-12-21)
|
||||
|
||||
**Note:** Version bump only for package @appium/plugin-test-support
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/plugin-test-support",
|
||||
"version": "0.3.1",
|
||||
"version": "0.3.3",
|
||||
"description": "Testing utilities for Appium plugins",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -31,7 +31,8 @@
|
||||
"files": [
|
||||
"lib",
|
||||
"index.js",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -39,7 +40,7 @@
|
||||
"test:unit": "exit 0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/types": "^0.7.0",
|
||||
"@appium/types": "^0.8.1",
|
||||
"get-port": "5.1.1",
|
||||
"log-symbols": "4.1.0",
|
||||
"source-map-support": "0.5.21",
|
||||
@@ -55,5 +56,6 @@
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
},
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": ".",
|
||||
"outDir": "build",
|
||||
@@ -8,13 +8,8 @@
|
||||
"@appium/types": ["../types"],
|
||||
"appium/support": ["../appium/support"]
|
||||
},
|
||||
"types": [
|
||||
"mocha", "chai", "sinon", "sinon-chai", "chai-as-promised"
|
||||
]
|
||||
"types": ["mocha", "chai", "sinon", "sinon-chai", "chai-as-promised"]
|
||||
},
|
||||
"include": ["./lib"],
|
||||
"references": [
|
||||
{"path": "../types"},
|
||||
{"path": "../support"}
|
||||
]
|
||||
"references": [{"path": "../types"}, {"path": "../support"}]
|
||||
}
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.0.2](https://github.com/appium/appium/compare/@appium/relaxed-caps-plugin@1.0.1...@appium/relaxed-caps-plugin@1.0.2) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/relaxed-caps-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.0.1](https://github.com/appium/appium/compare/@appium/relaxed-caps-plugin@1.0.0-beta.14...@appium/relaxed-caps-plugin@1.0.1) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/relaxed-caps-plugin
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [1.0.0-beta.14](https://github.com/appium/appium/compare/@appium/relaxed-caps-plugin@1.0.0-beta.13...@appium/relaxed-caps-plugin@1.0.0-beta.14) (2022-12-14)
|
||||
|
||||
- chore!: set engines to minimum Node.js v14.17.0 ([a1dbe6c](https://github.com/appium/appium/commit/a1dbe6c43efe76604943a607d402f4c8b864d652))
|
||||
|
||||
@@ -1,7 +1,18 @@
|
||||
{
|
||||
"name": "@appium/relaxed-caps-plugin",
|
||||
"version": "1.0.0-beta.14",
|
||||
"version": "1.0.2",
|
||||
"description": "An Appium 2.0 plugin that loosens requirements for vendor prefixes on caps",
|
||||
"keywords": [
|
||||
"automation",
|
||||
"javascript",
|
||||
"selenium",
|
||||
"webdriver",
|
||||
"ios",
|
||||
"android",
|
||||
"firefoxos",
|
||||
"testing"
|
||||
],
|
||||
"homepage": "https://appium.io",
|
||||
"bugs": {
|
||||
"url": "https://github.com/appium/appium/issues"
|
||||
},
|
||||
@@ -12,13 +23,15 @@
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"author": "https://github.com/appium",
|
||||
"types": "./build/lib/plugin.d.ts",
|
||||
"directories": {
|
||||
"lib": "./lib"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"lib",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -40,19 +53,14 @@
|
||||
"pluginName": "relaxed-caps",
|
||||
"mainClass": "RelaxedCapsPlugin"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"tags": [
|
||||
"appium"
|
||||
],
|
||||
"homepage": "https://appium.io",
|
||||
"keywords": [
|
||||
"automation",
|
||||
"javascript",
|
||||
"selenium",
|
||||
"webdriver",
|
||||
"ios",
|
||||
"android",
|
||||
"firefoxos",
|
||||
"testing"
|
||||
]
|
||||
"typedoc": {
|
||||
"entryPoint": "./lib/plugin.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
"compilerOptions": {
|
||||
"outDir": "build"
|
||||
},
|
||||
"extends": "../../config/tsconfig.plugin.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.plugin.json",
|
||||
"include": ["lib"]
|
||||
}
|
||||
|
||||
@@ -3,6 +3,25 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.2.1](https://github.com/appium/appium/compare/@appium/schema@0.2.0...@appium/schema@0.2.1) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/schema
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [0.2.0](https://github.com/appium/appium/compare/@appium/schema@0.1.0...@appium/schema@0.2.0) (2023-01-13)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **typedoc-appium-plugin:** implement cross-referencing of methods ([8b33414](https://github.com/appium/appium/commit/8b334149018f7d49448da9e7982356c72bcd468e))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [0.1.0](https://github.com/appium/appium/compare/@appium/schema@0.0.9...@appium/schema@0.1.0) (2022-12-14)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/schema",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.1",
|
||||
"description": "Appium Configuration Schema",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -27,7 +27,8 @@
|
||||
"files": [
|
||||
"build",
|
||||
"lib",
|
||||
"index.js"
|
||||
"index.js",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "node ./scripts/generate-schema-json.js",
|
||||
@@ -47,7 +48,7 @@
|
||||
"access": "public"
|
||||
},
|
||||
"typedoc": {
|
||||
"entryPoint": "./build/index.js"
|
||||
"entryPoint": "./lib/index.js"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72"
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": "lib",
|
||||
"outDir": "build",
|
||||
|
||||
@@ -3,6 +3,33 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [3.1.1](https://github.com/appium/appium/compare/@appium/support@3.1.0...@appium/support@3.1.1) (2023-01-13)
|
||||
|
||||
**Note:** Version bump only for package @appium/support
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [3.1.0](https://github.com/appium/appium/compare/@appium/support@3.0.1...@appium/support@3.1.0) (2023-01-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **support:** update dependency axios to v1.2.2 ([5291ca6](https://github.com/appium/appium/commit/5291ca672b3b47c5270e9fd85de3e4ed76a650e0))
|
||||
* **support:** update dependency klaw to v4.1.0 ([7bb4e07](https://github.com/appium/appium/commit/7bb4e07d6883dea4c9954967d320fcc1987ca3af))
|
||||
* **types:** update dependency type-fest to v3.5.0 ([8c8bfe8](https://github.com/appium/appium/commit/8c8bfe824dbe062e24cfe9fc6e1afa2f68cc6e4c))
|
||||
* **types:** update dependency type-fest to v3.5.1 ([4b5ab4d](https://github.com/appium/appium/commit/4b5ab4da7be925d0592c18e8f46a9ce30fbddf8e))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **typedoc-appium-plugin:** implement cross-referencing of methods ([8b33414](https://github.com/appium/appium/commit/8b334149018f7d49448da9e7982356c72bcd468e))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [3.0.1](https://github.com/appium/appium/compare/@appium/support@3.0.0...@appium/support@3.0.1) (2022-12-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@appium/support",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.1",
|
||||
"description": "Support libs used across appium packages",
|
||||
"keywords": [
|
||||
"automation",
|
||||
@@ -30,7 +30,8 @@
|
||||
"files": [
|
||||
"index.js",
|
||||
"lib",
|
||||
"build"
|
||||
"build",
|
||||
"tsconfig.json"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run test:unit",
|
||||
@@ -39,7 +40,8 @@
|
||||
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@appium/types": "^0.7.0",
|
||||
"@appium/tsconfig": "^0.2.1",
|
||||
"@appium/types": "^0.8.1",
|
||||
"@colors/colors": "1.5.0",
|
||||
"@types/archiver": "5.3.1",
|
||||
"@types/base64-stream": "1.0.2",
|
||||
@@ -60,7 +62,7 @@
|
||||
"@types/teen_process": "2.0.0",
|
||||
"@types/uuid": "9.0.0",
|
||||
"archiver": "5.3.1",
|
||||
"axios": "1.2.1",
|
||||
"axios": "1.2.2",
|
||||
"base64-stream": "1.0.0",
|
||||
"bluebird": "3.7.2",
|
||||
"bplist-creator": "0.1.1",
|
||||
@@ -70,7 +72,7 @@
|
||||
"glob": "8.0.3",
|
||||
"jimp": "0.16.2",
|
||||
"jsftp": "2.1.3",
|
||||
"klaw": "4.0.1",
|
||||
"klaw": "4.1.0",
|
||||
"lockfile": "1.0.4",
|
||||
"lodash": "4.17.21",
|
||||
"log-symbols": "4.1.0",
|
||||
@@ -92,7 +94,7 @@
|
||||
"source-map-support": "0.5.21",
|
||||
"supports-color": "8.1.1",
|
||||
"teen_process": "2.0.2",
|
||||
"type-fest": "3.4.0",
|
||||
"type-fest": "3.5.1",
|
||||
"uuid": "9.0.0",
|
||||
"which": "3.0.0",
|
||||
"yauzl": "2.10.0"
|
||||
@@ -104,9 +106,9 @@
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "5c7af8ee73078018e4ec52fccf19fe3f77249d72",
|
||||
"gitHead": "422142302f2f540a31c7eaf5178e2642b53a30d2",
|
||||
"typedoc": {
|
||||
"entryPoint": "./build/lib/index.js"
|
||||
"entryPoint": "./lib/index.js"
|
||||
},
|
||||
"overrides": {
|
||||
"jpeg-js": "0.4.4"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../config/tsconfig.base.json",
|
||||
"extends": "@appium/tsconfig/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "build",
|
||||
"paths": {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user