Compare commits

..
Author SHA1 Message Date
github-actions e648569dfb chore: publish
- appium@3.6.0
 - @appium/base-driver@10.7.2
 - @appium/base-plugin@3.3.3
 - @appium/docutils@2.5.2
 - @appium/driver-test-support@2.0.1
 - @appium/eslint-config-appium-ts@3.2.4
 - @appium/execute-driver-plugin@6.0.7
 - @appium/fake-driver@6.2.2
 - @appium/fake-plugin@4.3.3
 - @appium/images-plugin@4.2.8
 - @appium/logger@2.0.10
 - @appium/opencv@4.1.7
 - @appium/oxc-config@1.1.0
 - @appium/plugin-test-support@2.0.1
 - @appium/relaxed-caps-plugin@2.2.5
 - @appium/schema@1.3.0
 - @appium/semantic-release-config@1.1.0
 - @appium/storage-plugin@1.1.8
 - @appium/strongbox@1.1.3
 - @appium/support@7.2.6
 - @appium/tsconfig@1.2.0
 - @appium/types@1.6.0
 - @appium/universal-xml-plugin@2.1.7
2026-07-25 06:12:06 +00:00
Mykola Mokhnach ea6a2e117f fix: typescript config (#22540) 2026-07-24 22:22:31 +02:00
Edgars Eglītis 4fffe28f89 chore: run npm audit fix (#22541) 2026-07-24 23:19:25 +03:00
dependabot[bot] a4a9022303 chore(deps): bump fast-uri in the npm_and_yarn group across 1 directory (#22539)
Bumps the npm_and_yarn group with 1 update in the / directory: [fast-uri](https://github.com/fastify/fast-uri).


Updates `fast-uri` from 3.1.2 to 3.1.4
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.4)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 23:07:00 +03:00
renovate[bot] 8fd47be066 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.65.0 (#22538)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-24 21:36:17 +02:00
renovate[bot] 0af2a4bfd8 chore(deps): update dependency sinon to v22.1.0 (#22537)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-24 21:36:04 +02:00
renovate[bot] e0c9018453 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.2.0 (#22536)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-23 12:51:38 +00:00
Mykola Mokhnach f4d14c1969 feat(tsconfig): hoist typescript version (#22533) 2026-07-22 18:11:49 +02:00
Mykola Mokhnach e44e5ea918 chore: Use https protocol to access versions and download icons (#22534) 2026-07-22 18:06:41 +02:00
Mykola Mokhnach 32f0bdf870 feat(semantic-release-config): add shared semantic-release configuration package (#22527) 2026-07-22 15:52:47 +02:00
Mykola Mokhnach bf30246a65 chore: Linter warnings (#22532) 2026-07-22 10:19:55 +02:00
renovate[bot] 764cfbae75 chore(oxc-config): update dependency oxlint-tsgolint to v0.25.0 (#22530)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-22 10:54:51 +03:00
dependabot[bot] 5f0534f154 chore(deps): bump fast-uri in the npm_and_yarn group across 1 directory (#22531)
Bumps the npm_and_yarn group with 1 update in the / directory: [fast-uri](https://github.com/fastify/fast-uri).


Updates `fast-uri` from 3.1.2 to 3.1.4
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.4)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 09:37:46 +02:00
renovate[bot] 0b7e7419ef chore(oxc-config): update dependency oxlint to v1.74.0 (#22529)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-22 09:36:49 +02:00
Mykola Mokhnach fee213e49d feat: Add centralised Oxc lint and format config (#22489) 2026-07-22 09:24:20 +02:00
github-actions[bot]andmykola-mokhnach 2fa12e915a docs(appium): Update documentation translations (#22528)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-07-21 19:22:18 -07:00
Asijit Manna f943fab141 feat(appium): add --allow-unknown-args to tolerate unrecognized server CLI arguments (#22477) 2026-07-21 15:20:09 +02:00
Edgars Eglītis 6609b2be57 fix(base-driver): fix typo in generic sensor protocol route (#22525) 2026-07-21 11:47:08 +03:00
Mykola Mokhnach f17899a0f5 ci: Remove the redundant recursion API param (#22524) 2026-07-21 10:36:45 +02:00
renovate[bot] 350eab89a5 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.1.0 (#22522)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-21 08:32:54 +02:00
renovate[bot] 57092711c0 chore(workflows): update actions/checkout action to v7.0.1 (#22521)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-21 08:30:47 +02:00
Mykola Mokhnach cac18e30b5 chore: Remove lodash usage from scripts (#22518) 2026-07-20 22:51:37 +02:00
Mykola Mokhnach 77d249226a fix(docutils): Duplicate package imports (#22520) 2026-07-20 22:49:00 +02:00
Mykola Mokhnach 154ea18252 fix(appium): Duplicated module import (#22519) 2026-07-20 22:48:51 +02:00
renovate[bot] 0cfafb23c0 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.10.1 (#22516)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-19 14:37:19 +00:00
Kazuaki Matsuo b56646198c fix: use module sync in appium/support (#22514)
* fix: use module sync in appium/support

* use node assert

* add __filename

* fix format
2026-07-18 07:34:45 -07:00
renovate[bot] 13d3b615e6 chore(storage-plugin): update dependency ws to v8.21.1 (#22513)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-18 13:33:44 +00:00
renovate[bot] 7c0d771408 chore(docutils): update dependency mkdocs-material to v9.7.7 (#22512)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-18 09:15:07 +00:00
renovate[bot] 0a40623085 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.64.0 (#22505)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-17 15:02:17 +00:00
renovate[bot] b9ad1f1712 chore(workflows): update slackapi/slack-github-action action to v4 (#22511)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-17 13:17:37 +03:00
github-actions[bot]andmykola-mokhnach 608668ed47 docs(appium): Update documentation translations (#22504)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-07-17 13:11:19 +03:00
renovate[bot] 73d4b7760b chore(workflows): update actions/setup-node action to v7 (#22509)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-17 12:57:46 +03:00
renovate[bot] 5112541a34 chore(deps): update dependency oxfmt to v0.59.0 (#22508)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-17 11:56:39 +03:00
Edgars Eglītis cfde82a40e chore(deps): update argparse to v3 (#22507) 2026-07-17 11:51:00 +03:00
renovate[bot] 0f3fd55c65 chore(workflows): update actions/setup-node action to v6.5.0 (#22503)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-16 22:10:20 +00:00
renovate[bot] 67cf081098 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.10.0 (#22502)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-16 18:01:17 +00:00
renovate[bot] d63f5441c7 chore(support): update dependency teen_process to v4.1.9 (#22501)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-16 08:59:17 +00:00
Kazuaki Matsuo 0bb61073e2 docs: drop appiumpro.com (#22500) 2026-07-16 00:57:32 -07:00
renovate[bot] 52eb9e308e chore(support): update dependency shell-quote to v1.10.0 (#22498)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-14 22:14:53 +00:00
renovate[bot] 868153fee4 chore(deps): update dependency eslint to v10.7.0 (#22497)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-14 16:49:16 +00:00
renovate[bot] c25293b23e chore(eslint-config-appium-ts): update dependency eslint-plugin-n to v18.2.2 (#22496)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-14 09:58:51 +00:00
renovate[bot] 4c380d7604 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.13 (#22495)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-13 15:53:59 +00:00
renovate[bot] 1e93aec531 chore(workflows): update slackapi/slack-github-action action to v3.0.5 (#22493)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-12 17:08:10 +00:00
renovate[bot] 22f8a9b04d chore(support): update dependency asyncbox to v6.3.5 (#22492)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-12 08:45:48 +00:00
renovate[bot] 1a7199fbbc chore(support): update dependency teen_process to v4.1.8 (#22488)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-11 22:45:13 +00:00
renovate[bot] fa9c4b2aab chore(storage-plugin): update dependency lru-cache to v11.5.2 (#22487)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-11 18:34:39 +00:00
renovate[bot] 3836f0e614 chore(deps): update dependency @types/node to v24.13.3 (#22490)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-11 13:36:51 +00:00
Edgars Eglītis 6e3fd0a8bc chore: format (#22491) 2026-07-11 14:13:52 +03:00
Mykola Mokhnach d5b1393285 feat: Add codegraph (#22485) 2026-07-11 08:35:38 +02:00
renovate[bot] 123b0e1908 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.63.0 (#22484)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-11 00:40:30 +00:00
Mykola Mokhnach eabe372b0b test: enable source mapping (#22486) 2026-07-10 22:03:27 +02:00
renovate[bot] 416c3349b7 chore(eslint-config-appium-ts): update dependency eslint-plugin-perfectionist to v5.10.0 (#22483)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-10 09:42:04 +00:00
renovate[bot] ad720f5ca0 chore(deps): update dependency oxfmt to v0.58.0 (#22482)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-10 11:15:58 +03:00
renovate[bot] 6d31d6acb2 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.12 (#22480)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-09 21:46:14 +00:00
renovate[bot] 4e93a63ac5 chore(types): update dependency type-fest to v5.8.0 (#22479)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-08 09:46:27 +00:00
renovate[bot] 7233dd315a chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.11 (#22478)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-07 16:14:48 +00:00
github-actions[bot]andmykola-mokhnach 97d53ffa5b docs(appium): Update documentation translations (#22476)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-07-05 18:31:45 -07:00
Mykola Mokhnach 2cec9fa27f chore: Remove redundant chai type references (#22475) 2026-07-05 14:41:16 +02:00
renovate[bot] a1a7b7e981 chore(support): update dependency sharp to v0.35.3 (#22472)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-04 15:31:47 +03:00
Mykola Mokhnach 228103f489 chore(appium): Drop mocha (#22469) 2026-07-04 13:57:57 +02:00
renovate[bot] 9dcb2c4056 chore(deps): update dependency @types/sinon to v22 (#22471)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-04 11:59:35 +03:00
Asijit Manna a9dd7f5e41 fix(base-driver): redact proxied response body in proxy logs (#22470) 2026-07-03 21:09:38 +02:00
Mykola Mokhnach de2cd50b96 fix(base-driver): Perform shallow clone of initial options (#22465) 2026-07-03 20:59:18 +02:00
renovate[bot] ccb3106814 chore(support): update dependency asyncbox to v6.3.4 (#22468)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-03 13:53:38 +00:00
renovate[bot] f707dfa174 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.62.1 (#22467)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-03 09:52:31 +00:00
Mykola Mokhnach 53b2db196d chore(docutils): Drop mocha (#22466) 2026-07-03 08:38:03 +02:00
Mykola Mokhnach 279ebb5cd6 chore(driver-test-support): Drop mocha and chai (#22464) 2026-07-03 06:21:52 +02:00
Mykola Mokhnach f1fc5a6869 chore(fake-driver): Drop mocha (#22463) 2026-07-02 22:07:42 +02:00
Mykola Mokhnach 24586d4ed9 chore(fake-plugin): Drop mocha and chai (#22462) 2026-07-02 20:52:27 +02:00
Mykola Mokhnach 4915433aae chore(logger): Drop mocha (#22457) 2026-07-02 18:51:19 +02:00
Mykola Mokhnach fd70da7ab4 fix: Typescript references (#22458) 2026-07-02 18:39:05 +02:00
renovate[bot] fa769cebd9 chore(deps): update dependency eslint to v10.6.0 (#22455)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-02 14:43:41 +00:00
renovate[bot] 1eb55e85d7 chore(support): update dependency asyncbox to v6.3.1 (#22460)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-02 11:14:34 +00:00
dependabot[bot] f98eea77d1 chore(deps-dev): bump the npm_and_yarn group across 1 directory with 2 updates (#22459)
Bumps the npm_and_yarn group with 2 updates in the / directory: [@sigstore/verify](https://github.com/sigstore/sigstore-js) and [sigstore](https://github.com/sigstore/sigstore-js).


Updates `@sigstore/verify` from 3.1.0 to 3.1.1
- [Release notes](https://github.com/sigstore/sigstore-js/releases)
- [Commits](https://github.com/sigstore/sigstore-js/compare/sigstore@3.1.0...@sigstore/verify@3.1.1)

Updates `sigstore` from 4.1.0 to 4.1.1
- [Release notes](https://github.com/sigstore/sigstore-js/releases)
- [Commits](https://github.com/sigstore/sigstore-js/compare/sigstore@4.1.0...sigstore@4.1.1)

---
updated-dependencies:
- dependency-name: "@sigstore/verify"
  dependency-version: 3.1.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: sigstore
  dependency-version: 4.1.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-02 08:33:47 +03:00
renovate[bot] 4cbcf95d77 chore(support): update dependency teen_process to v4.1.7 (#22452)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-02 03:42:12 +00:00
renovate[bot] 4c947872f1 chore(execute-driver-plugin): update dependency webdriverio to v9.29.1 (#22451)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-01 23:26:49 +00:00
renovate[bot] 11882be379 chore(eslint-config-appium-ts): update dependency eslint-plugin-import-x to v4.17.1 (#22454)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-01 14:38:04 +00:00
Mykola Mokhnach e3334b4dd7 chore(opencv): Drop mocha (#22456) 2026-07-01 16:17:16 +02:00
Mykola Mokhnach a10f403bb1 chore(relaxed-caps-plugin): Ditch mocha (#22453) 2026-07-01 13:40:08 +02:00
Mykola Mokhnach 08d50889c2 chore: Migrate from prettier to oxfmt (#22450) 2026-07-01 08:54:13 +02:00
renovate[bot] d3628a9410 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.10 (#22448)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-30 13:51:26 +00:00
Mykola Mokhnach 8d6b5f87c7 chore(support): Drop mocha (#22444) 2026-06-30 07:56:15 +02:00
Mykola Mokhnach 531b20a3c1 chore(strongbox): Drop mocha (#22446) 2026-06-29 22:03:12 +02:00
renovate[bot] 6699d1b266 chore(eslint-config-appium-ts): update dependency eslint-plugin-n to v18.2.1 (#22445)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-29 12:36:06 +00:00
renovate[bot] 37a6006537 chore(support): update dependency shell-quote to v1.9.0 (#22442)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-28 12:49:57 +00:00
renovate[bot] 1b449709d1 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.8 (#22441)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-28 09:14:18 +00:00
Mykola Mokhnach 0e4ecc49d6 chore(universal-xml-plugin): Drop mocha and chai (#22440) 2026-06-27 22:18:18 +02:00
Mykola Mokhnach bf29503054 chore(base-driver): Drop mocha (#22435) 2026-06-27 11:58:04 +02:00
dependabot[bot] ab0633a70c chore(deps-dev): bump @sigstore/core (#22439)
Bumps the npm_and_yarn group with 1 update in the / directory: [@sigstore/core](https://github.com/sigstore/sigstore-js).


Updates `@sigstore/core` from 3.1.0 to 3.2.1
- [Release notes](https://github.com/sigstore/sigstore-js/releases)
- [Commits](https://github.com/sigstore/sigstore-js/compare/sigstore@3.1.0...@sigstore/core@3.2.1)

---
updated-dependencies:
- dependency-name: "@sigstore/core"
  dependency-version: 3.2.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-27 12:46:21 +03:00
Mykola Mokhnach 0c44ddeebe chore(base-plugin): Drop mocha and chai (#22438) 2026-06-27 08:33:28 +02:00
Mykola Mokhnach d9eb36f413 fix(support): Prevent extraction of external symlinks (#22436) 2026-06-27 07:59:04 +02:00
github-actions[bot]andmykola-mokhnach b483d82b13 docs(appium): Update documentation translations (#22437)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-06-26 22:56:09 -07:00
Mykola Mokhnach 93e81777b9 chore(images-plugin): Drop mocha (#22434) 2026-06-26 20:34:34 +02:00
renovate[bot] 623ef38f2a chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.62.0 (#22433)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-26 08:17:37 +02:00
renovate[bot] 5c696c5c91 chore(eslint-config-appium-ts): update dependency eslint-plugin-import-x to v4.17.0 (#22431)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-26 08:17:22 +02:00
renovate[bot] 98215066ee chore(support): update dependency axios to v1.18.1 (#22430)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-26 08:17:05 +02:00
Mykola Mokhnach 8026a953aa chore(execute-driver-plugin): Drop mocha usage (#22432) 2026-06-26 08:12:04 +02:00
Mykola Mokhnach c8556f172e chore(storage-plugin): Drop mocha usage (#22429) 2026-06-26 07:47:56 +02:00
Mykola Mokhnach e9a41bd9ae chore(base-driver): Migrate index to typescript (#22428) 2026-06-26 07:47:34 +02:00
Mykola Mokhnach e810f2f23d test(base-driver): Add tests to typescript build validation (#22427) 2026-06-25 19:35:23 +02:00
Mykola Mokhnach c04c38d1e6 chore: Update driver-test-support to not export mocha-specific suites (#22424) 2026-06-25 18:33:38 +02:00
renovate[bot] d9c4e4c4ad chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.7 (#22426)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-25 09:05:44 +00:00
renovate[bot] bce22834ba chore(eslint-config-appium-ts): update dependency eslint-plugin-unicorn to v68 (#22420)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-24 16:25:18 +02:00
Mykola Mokhnach ac65be5a1e chore: Update pluginE2EHarness to drop implicit mocha deps (#22421) 2026-06-24 16:24:35 +02:00
renovate[bot] 1e570c4d29 chore(support): update dependency uuid to v14.0.1 (#22422)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-24 14:01:35 +00:00
renovate[bot] 52ec456d17 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.9.3 (#22419)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-23 18:12:07 +00:00
renovate[bot] a89e429a84 chore(support): update dependency semver to v7.8.5 (#22417)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-23 14:49:58 +00:00
renovate[bot] 4b0666d7d5 chore(support): update dependency sharp to v0.35.2 (#22418)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-23 11:27:47 +03:00
renovate[bot] 816ca05020 chore(execute-driver-plugin): update webdriverio monorepo to v9.29.0 (#22416)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-22 13:56:01 +00:00
Mykola Mokhnach 31036f65b2 chore: Ditch unmaintained midnight-smoker dependency (#22414) 2026-06-21 14:22:23 +02:00
renovate[bot] 4bb987c037 chore(workflows): update actions/checkout action to v7 (#22413)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-21 15:07:56 +03:00
renovate[bot] 0162f3ab4e chore(base-driver): update dependency body-parser to v2.3.0 (#22411)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-21 13:09:00 +02:00
renovate[bot] 813c6b5b7a chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.6 (#22410)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-21 13:08:47 +02:00
renovate[bot] edc2013073 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.9.2 (#22409)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-20 17:29:10 +00:00
dependabot[bot] 979a6e4c9d chore(deps): bump undici in the npm_and_yarn group across 1 directory (#22404)
Bumps the npm_and_yarn group with 1 update in the / directory: [undici](https://github.com/nodejs/undici).


Updates `undici` from 6.24.0 to 6.27.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v6.24.0...v6.27.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.27.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-20 18:59:37 +03:00
renovate[bot] 1cc4f0f2e5 chore(support): update dependency teen_process to v4.1.5 (#22408)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-20 13:56:00 +00:00
renovate[bot] 0467311286 chore(eslint-config-appium-ts): update typescript-eslint monorepo to v8.61.1 (#22407)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-20 12:37:45 +00:00
renovate[bot] cb9c476fbb chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.5 (#22406)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-20 08:35:20 +00:00
github-actions[bot]andmykola-mokhnach 44278bdfc3 docs(appium): Update documentation translations (#22405)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-06-19 20:02:12 -07:00
renovate[bot] a8418f95e9 chore(eslint-config-appium-ts): update dependency eslint-plugin-perfectionist to v5.9.1 (#22403)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-19 19:45:19 +00:00
renovate[bot] 7e67b54726 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.4 (#22402)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-19 13:49:33 +00:00
github-actions e6b583a209 chore: publish
- appium@3.5.2
 - @appium/base-driver@10.7.1
 - @appium/base-plugin@3.3.2
 - @appium/docutils@2.5.1
 - @appium/driver-test-support@1.2.5
 - @appium/execute-driver-plugin@6.0.6
 - @appium/fake-plugin@4.3.2
 - @appium/images-plugin@4.2.7
 - @appium/storage-plugin@1.1.7
 - @appium/support@7.2.5
 - @appium/universal-xml-plugin@2.1.6
2026-06-18 21:21:35 +00:00
renovate[bot] 3016201f2a chore(universal-xml-plugin): update dependency fast-xml-parser to v5.9.0 (#22397)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-18 23:15:13 +02:00
renovate[bot] e0d5c4dfd6 chore(support): update dependency axios to v1.18.0 (#22396)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-18 23:14:50 +02:00
Mykola Mokhnach 779a3a048f fix(support): uploadFile overload (#22400) 2026-06-18 23:14:27 +02:00
renovate[bot] 07302ab3e9 chore(workflows): update egmacke/action-check-label action to v5 (#22399)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-18 17:12:45 +03:00
Edgars Eglītis 609db021f4 docs: adjust plugin READMEs for consistency (#22395) 2026-06-18 11:02:19 +03:00
github-actions 213efd0fa4 chore: publish
- appium@3.5.1
 - @appium/base-driver@10.7.0
 - @appium/base-plugin@3.3.1
 - @appium/docutils@2.5.0
 - @appium/driver-test-support@1.2.4
 - @appium/eslint-config-appium-ts@3.2.3
 - @appium/execute-driver-plugin@6.0.5
 - @appium/fake-driver@6.2.1
 - @appium/fake-plugin@4.3.1
 - @appium/images-plugin@4.2.6
 - @appium/logger@2.0.9
 - @appium/opencv@4.1.6
 - @appium/plugin-test-support@1.2.4
 - @appium/relaxed-caps-plugin@2.2.4
 - @appium/schema@1.2.1
 - @appium/storage-plugin@1.1.6
 - @appium/strongbox@1.1.2
 - @appium/support@7.2.4
 - @appium/types@1.5.1
 - @appium/universal-xml-plugin@2.1.5
2026-06-18 05:58:09 +00:00
Mykola Mokhnach d94a40af9f feat(base-driver): Isolate test endpoints (#22394) 2026-06-17 08:32:40 +02:00
renovate[bot] 47638650ee chore(deps): update eslint monorepo to v10.5.0 (#22393)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-16 16:54:45 +00:00
renovate[bot] bf8517a106 chore(deps): update dependency npm-run-all2 to v9.0.2 (#22392)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-16 06:59:57 +00:00
dependabot[bot] 8d25be469b chore(deps): bump the npm_and_yarn group across 2 directories with 1 update (#22391)
Bumps the npm_and_yarn group with 1 update in the / directory: [form-data](https://github.com/form-data/form-data).
Bumps the npm_and_yarn group with 1 update in the /packages/support directory: [form-data](https://github.com/form-data/form-data).


Updates `form-data` from 4.0.5 to 4.0.6
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.5...v4.0.6)

Updates `form-data` from 4.0.5 to 4.0.6
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.5...v4.0.6)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.6
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: form-data
  dependency-version: 4.0.6
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 09:50:32 +03:00
dependabot[bot] e118e453cc chore(deps-dev): bump tmp in the npm_and_yarn group across 1 directory (#22390)
Bumps the npm_and_yarn group with 1 update in the / directory: [tmp](https://github.com/raszi/node-tmp).


Updates `tmp` from 0.2.6 to 0.2.7
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.6...v0.2.7)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.7
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 09:41:38 +03:00
renovate[bot] cf1dbe5389 chore(support): update dependency sharp to v0.35.1 (#22388)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-15 12:15:15 +03:00
renovate[bot] f475b41785 chore(execute-driver-plugin): update webdriverio monorepo to v9.28.0 (#22385)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-14 13:15:28 +00:00
renovate[bot] 8eb41d6fe8 chore(deps): update definitelytyped to v24.13.2 (#22384)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-14 09:36:56 +00:00
renovate[bot] 0e6a33bd26 chore(support): update dependency semver to v7.8.4 (#22383)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-13 18:39:17 +00:00
renovate[bot] 982571c894 chore(deps): update dependency prettier to v3.8.4 (#22382)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-13 13:46:53 +00:00
renovate[bot] 78683d9176 chore(support): update dependency semver to v7.8.3 (#22379)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-12 15:16:08 +02:00
renovate[bot] f572c42921 chore(eslint-config-appium-ts): update dependency eslint-plugin-n to v18.1.0 (#22380)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-12 15:15:58 +02:00
renovate[bot] dec148e997 chore(eslint-config-appium-ts): update typescript-eslint monorepo to v8.61.0 (#22381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-12 15:15:49 +02:00
Edgars Eglītis e4faa6919b feat(docutils): add option to only use major version when deploying (#22374)
* feat(docutils): add option to only use major version when deploying

* test: add tests for findDeployVersion
2026-06-12 13:57:07 +03:00
renovate[bot] 35034552b9 chore(eslint-config-appium-ts): update dependency eslint-plugin-unicorn to v65.0.1 (#22378)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-12 10:47:19 +00:00
renovate[bot] e5071fbf02 chore(support): update dependency yauzl to v3.4.0 (#22376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-11 16:53:39 +00:00
renovate[bot] b1872b47b8 chore(eslint-config-appium-ts): update dependency eslint-plugin-unicorn to v65 (#22377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-11 10:09:28 +03:00
github-actions[bot]andmykola-mokhnach 136903398e docs(appium): Update documentation translations (#22375)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-06-10 22:01:47 -07:00
Mykola Mokhnach c704023790 chore: Strip obsolete methods usages in monorepo packages (#22363) 2026-06-10 19:14:44 +02:00
github-actions[bot]andmykola-mokhnach 27c22b7103 docs(appium): Update documentation translations (#22373)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-06-09 22:03:43 -07:00
renovate[bot] 2b6bf4fa59 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.2 (#22370)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-09 18:50:06 +02:00
Edgars Eglītis a740d9d8dd docs: add AppiumConf 2026 archive & remove banner (#22372) 2026-06-09 18:41:11 +03:00
renovate[bot] a97a7cde25 chore(deps): update definitelytyped to v24.13.1 (#22369)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-09 08:45:57 +00:00
Kazuaki Matsuo 5fee01752f fix(storage-plugin): add fs.sanitizeName for the delete request as well (#22362)
* fix(storage-plugin): add fs.sanitizeName for the delete request

* move empty check as well

* fix: apply formatter

* return false for exception cases

* return false for exception cases

* tweak a bit

* fix format
2026-06-08 20:43:04 -07:00
Mykola Mokhnach 1445da48d8 chore(support): Deprecate jsftp (#22366) 2026-06-08 19:04:35 +02:00
renovate[bot] 7eb65eff9f chore(support): update dependency semver to v7.8.2 (#22364)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-08 09:49:31 +02:00
Mykola Mokhnach 987187e740 chore(support): Ditch package-directory and read-pkg deps (#22361) 2026-06-07 22:14:05 +02:00
renovate[bot] fa96e81341 chore(deps): update definitelytyped to v24.13.0 (#22360)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-07 08:27:48 +00:00
Mykola Mokhnach c6abe8f102 chore(support): Ditch base64-stream (#22359) 2026-06-07 10:01:44 +02:00
Mykola Mokhnach f0de6b8719 chore: Ditch @colors/colors and supports-color (#22357) 2026-06-07 00:00:45 +02:00
Kazuaki Matsuo 939339adc1 ci: add copilot review takes care of nodejs versions (#22358) 2026-06-06 10:30:18 -07:00
renovate[bot] d8d0c12cf9 chore(support): update dependency axios to v1.17.0 (#22356)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-06 12:22:46 +02:00
Mykola Mokhnach 389bff1173 chore: Ditch resolve-from and package-changed dependencies (#22354) 2026-06-06 12:22:03 +02:00
renovate[bot] 367b28d5e3 chore(base-driver): update dependency morgan to v1.11.0 (#22355)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-06 09:59:26 +00:00
Mykola Mokhnach 2939478b47 chore: Slim some dependencies (#22353) 2026-06-05 20:32:20 +02:00
Mykola Mokhnach d91add8000 chore: Reorganize dependencies (#22352) 2026-06-05 12:25:54 +02:00
Mykola Mokhnach 84f9b4dbe4 chore: Remove the obsolete @appium/test-support package (#22351) 2026-06-05 11:38:26 +02:00
renovate[bot] e2fceea6b4 chore(eslint-config-appium-ts): update typescript-eslint monorepo to v8.60.1 (#22349)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-05 09:05:09 +00:00
Mykola Mokhnach 1a46d7d61e chore: Apply format (#22350) 2026-06-05 08:08:54 +02:00
Roman 2ee7d4fe75 chore(support): use native randomUUID where possible (#22348) 2026-06-05 07:45:04 +02:00
Mykola Mokhnach 3b76a4bb63 chore(appium): Ditch lodash (#22342) 2026-06-05 07:40:16 +02:00
renovate[bot] 39131c8c27 chore(support): update dependency yauzl to v3.3.2 (#22346)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-04 12:28:25 +02:00
renovate[bot] f9fa1d429d chore(types): update dependency type-fest to v5.7.0 (#22347)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-04 12:28:18 +02:00
renovate[bot] 36caf86a1a chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63.0.1 (#22345)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-04 12:28:11 +02:00
renovate[bot] 24fd9a2813 chore(eslint-config-appium-ts): update dependency eslint-import-resolver-typescript to v4.4.5 (#22344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-04 09:52:44 +00:00
renovate[bot] 27a4161b67 chore(setup-build): pin dependencies (#22341)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-03 19:11:51 +03:00
Mykola Mokhnach f18fc39de3 chore(appium): Enable strict TS mode (#22340) 2026-06-03 10:14:53 +02:00
renovate[bot] 93722c05fa chore(docutils): update dependency mkdocs-git-revision-date-localized-plugin to v1.5.3 (#22339)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-02 18:34:08 +02:00
renovate[bot] c4151a771c chore(deps): update dependency eslint to v10.4.1 (#22338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-02 14:37:43 +00:00
Mykola Mokhnach d9a30c1ace chore(base-driver): Enable strict TS mode (#22334) 2026-06-02 06:43:18 +02:00
Mykola Mokhnach a7e19d1fc3 chore: Enable strict TS mode for various packages (#22333) 2026-06-02 06:43:02 +02:00
Mykola Mokhnach 9129feb880 chore(support): Optimize zip reading performance (#22332) 2026-06-02 06:42:49 +02:00
Mykola Mokhnach 710738a987 chore(support): Enable strict mode (#22330) 2026-05-31 20:25:12 +02:00
Mykola Mokhnach 41264445a3 chore(universal-xml-plugin): Enable strict mode (#22329) 2026-05-31 20:24:42 +02:00
renovate[bot] 1c5c48b582 chore(storage-plugin): update dependency lru-cache to v11.5.1 (#22328)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-31 08:58:54 +00:00
Kazuaki Matsuo fd270f2b09 chore: replace sync-monorepo-packages pkg with a script (#22315)
* feat: replace sync-monorepo-packages with script

* fix conflicts

* update lock

* apply formatter

* modify const

* fix reviews

* chore: use absolute option
2026-05-30 20:29:38 -07:00
github-actions 8018f8b70e chore: publish
- appium@3.5.0
 - @appium/base-driver@10.6.0
 - @appium/base-plugin@3.3.0
 - @appium/docutils@2.4.3
 - @appium/driver-test-support@1.2.3
 - @appium/eslint-config-appium-ts@3.2.2
 - @appium/execute-driver-plugin@6.0.4
 - @appium/fake-driver@6.2.0
 - @appium/fake-plugin@4.3.0
 - @appium/images-plugin@4.2.5
 - @appium/logger@2.0.8
 - @appium/opencv@4.1.5
 - @appium/plugin-test-support@1.2.3
 - @appium/relaxed-caps-plugin@2.2.3
 - @appium/schema@1.2.0
 - @appium/storage-plugin@1.1.5
 - @appium/support@7.2.3
 - @appium/test-support@4.1.5
 - @appium/types@1.5.0
 - @appium/universal-xml-plugin@2.1.4
2026-05-31 02:29:56 +00:00
renovate[bot] ea38864e95 chore(execute-driver-plugin): update dependency webdriverio to v9.27.2 (#22326)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-30 09:32:17 +00:00
Mykola Mokhnach cf79b3283a feat(base-driver): Ditch lodash (#22324) 2026-05-30 08:13:10 +02:00
Mykola Mokhnach 7c60cee787 chore(driver-test-support): Ditch lodash (#22323) 2026-05-30 08:12:55 +02:00
Mykola Mokhnach bfac5ab9ec chore(fake-driver,fake-plugin): Ditch lodash (#22322) 2026-05-29 18:58:32 +02:00
Mykola Mokhnach d329ecd7f7 chore(support): Deprecate more unused helpers (#22321) 2026-05-29 18:58:19 +02:00
Mykola Mokhnach aa85993c01 chore(support): Simplify plist parsing (#22320) 2026-05-29 18:58:09 +02:00
Mykola Mokhnach 3c34ec1a04 chore(support): Deprecate sharp-related primitives (#22318) 2026-05-29 09:40:29 +02:00
renovate[bot] 2cd71fc45d chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.60.0 (#22319)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-29 09:15:24 +02:00
Mykola Mokhnach bab02cc7c1 chore(docutils): Ditch lodash (#22317) 2026-05-29 09:13:46 +02:00
Mykola Mokhnach 66b38e31ab chore(execute-driver-plugin): Ditch lodash (#22316) 2026-05-28 09:40:30 +02:00
Mykola Mokhnach 66eeaa2791 chore(images-plugin): Ditch lodash (#22312) 2026-05-28 07:41:42 +02:00
Mykola Mokhnach a1fc1c0e18 chore(logger): Ditch lodash (#22313) 2026-05-28 07:40:29 +02:00
Mykola Mokhnach ccbe297d3a chore(relaxed-caps-plugin): Ditch lodash (#22311) 2026-05-27 20:37:25 +02:00
renovate[bot] 101b31f35d chore(storage-plugin): update dependency ws to v8.21.0 (#22310)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-27 08:30:57 +00:00
Mykola Mokhnach b01bed2d2e chore(opencv): Ditch lodash (#22309) 2026-05-27 10:02:35 +02:00
Mykola Mokhnach 6b9ad08246 chore(storage-plugin): Ditch lodash (#22308) 2026-05-27 10:02:26 +02:00
dependabot[bot] 2694d789c4 chore(deps-dev): bump tmp in the npm_and_yarn group across 1 directory (#22307)
Bumps the npm_and_yarn group with 1 update in the / directory: [tmp](https://github.com/raszi/node-tmp).


Updates `tmp` from 0.2.5 to 0.2.6
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.5...v0.2.6)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.6
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-27 06:44:58 +02:00
Mykola Mokhnach 58fad654c3 chore(test-support): Ditch lodash (#22306) 2026-05-27 06:22:52 +02:00
Mykola Mokhnach 0d1271f812 chore(universal-xml-plugin): Ditch lodash (#22305) 2026-05-27 06:22:40 +02:00
renovate[bot] c79225f8cf chore(support): update dependency shell-quote to v1.8.4 (#22304)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-26 19:25:32 +02:00
renovate[bot] 2afd0e651c chore(deps): update dependency npm-run-all2 to v9.0.1 (#22303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-26 16:04:28 +00:00
renovate[bot] 075466243d chore(support): update dependency yauzl to v3.3.1 (#22302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-25 08:26:07 +00:00
Mykola Mokhnach abb83bde62 feat(appium): Ditch bluebird (#22301) 2026-05-25 08:13:07 +02:00
Mykola Mokhnach eb139abf97 chore(test-support): Remove unused bluebird dependency (#22300) 2026-05-25 08:12:54 +02:00
renovate[bot] 377011bdb3 chore(eslint-config-appium-ts): update dependency eslint-plugin-jsdoc to v63 (#22295)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-25 07:50:17 +02:00
renovate[bot] 1fc8582327 chore(support): update dependency semver to v7.8.1 (#22299)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-25 07:42:10 +02:00
renovate[bot] f6a96d6647 chore(deps): update dependency mocha to v11.7.6 (#22298)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-25 07:41:57 +02:00
renovate[bot] 04b408aace chore(storage-plugin): update dependency lru-cache to v11.5.0 (#22294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-25 07:33:05 +02:00
renovate[bot] f600982578 chore(deps): update dependency npm-run-all2 to v9 (#22291)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-25 07:31:57 +02:00
dependabot[bot] c8b9321667 chore(deps): bump qs in the npm_and_yarn group across 1 directory (#22292)
Bumps the npm_and_yarn group with 1 update in the / directory: [qs](https://github.com/ljharb/qs).


Updates `qs` from 6.14.2 to 6.15.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.2...v6.15.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.15.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-25 07:31:06 +02:00
Mykola Mokhnach c9b7eac365 feat(base-driver): Ditch bluebird (#22293) 2026-05-23 08:28:06 +02:00
renovate[bot] efbf7115cc chore(eslint-config-appium-ts): update dependency eslint-plugin-mocha to v11.3.0 (#22290)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-22 16:10:15 +00:00
renovate[bot] 679ec8864c chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.59.4 (#22289)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-22 09:35:52 +00:00
renovate[bot] 094daa24be chore(storage-plugin): update dependency lru-cache to v11.4.0 (#22288)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-21 14:00:29 +00:00
renovate[bot] 9c3aaa1056 chore(deps): update dependency eslint to v10.4.0 (#22286)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-19 10:55:46 +00:00
github-actions[bot]andmykola-mokhnach e58253033d docs(appium): Update documentation translations (#22285)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-05-18 23:46:57 -07:00
Mykola Mokhnach 25d922b7d3 feat: make assignIpc internal (#22278) 2026-05-18 07:35:51 +02:00
Mykola Mokhnach 0264775ecb feat: Limit the maximum count of topics per session and make it configurable (#22279) 2026-05-18 07:22:48 +02:00
Mykola Mokhnach f5b193ccf0 chore(base-driver): Simplify async generator logic in IpcSubscription (#22280) 2026-05-18 07:22:32 +02:00
renovate[bot] 6d88f54918 chore(support): update dependency axios to v1.16.1 (#22283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-17 13:25:41 +00:00
renovate[bot] 95c4091b8b chore(support): update dependency archiver to v8 (#22267) 2026-05-16 15:25:52 +02:00
renovate[bot] ecf927395d chore(storage-plugin): update dependency ws to v8.20.1 (#22281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-16 09:44:23 +00:00
renovate[bot] e1e228380f chore(universal-xml-plugin): update dependency fast-xml-parser to v5.8.0 (#22277)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-15 15:31:01 +00:00
renovate[bot] 74170ec575 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.59.3 (#22275)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-15 12:43:00 +00:00
renovate[bot] 3f9a2ea18f chore(docutils): update dependency yaml to v2.9.0 (#22276)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-15 09:39:13 +00:00
renovate[bot] 2ef20b988b chore(deps): update dependency @types/node to v24.12.4 (#22274)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-15 07:51:31 +00:00
github-actions[bot]andmykola-mokhnach 1dffc4e833 docs(appium): Update documentation translations (#22273)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-05-14 22:45:04 -07:00
Jonathan Lipps 97c879cdd0 feat: add IPC channels per session for drivers and plugins to communicate (#22211)
* feat: add IPC channels per session for drivers and plugins to communicate (fix #22206)

* lint

* export AppiumIpc

* fix test issues

* import AppiumIpc directly from basedriver

* fakedriver is used directly outside of appium so can't rely on existence of IPC

* make ipc functions async with lock and better types

* fix assignIpc types

* deduplicate session object deletion

* ipcGuard -> withIpc

* address various review comments

* lint

* address copilot and other review comments

* store only last message. change model to use subscription object and async generator

* enforce max message size in bytes

* fix tests and call the message payload 'data' for clarity

* lint

* make assignIpc optional on drivers for backwards compatibility

* add error handling in startClock since it is usually not awaited

* add docs

* remove todo comment

* apply copilot and eglitise suggestions

* add typedoc

* add error handling to onIpcInit

* apply more suggestions

* fix schema unit test

* apply more suggestions

* add links to ipc examples

* make minimum ipc message size 1 instead of 0

* ensure publisher names are friendly to consumers

* fix ipc message time unit

* use already included sizeof for objs

* just pass error obj to log

* be more typescriptey about our ipc guard

* make max obj size part of opts for appiumipc

* let unsubscribe return whether it worked

* improve ipc types and shapes

* apply master package-lock.json

* update schema config

* use javascript naming conventions

* clarify distinction between message and payload (data)

* ensure async iterator loop ends when unsubscribe is called

* ensure the right things happen when you unsubscribe

* make require ipc more ergonomic

* remove unnecessary async locks and de-asyncify methods

* simplify interface and just use subscriber/plugin names

* fix docs

* fix lint

* document isActive

* add note about topic namespace

* use sleep instead of delay

* restrict the ipc payload data type to something that can be cloned

* clarify topic namespacing recommendation

* make sure listeners and promises are cleaned up in async iterator

* clean up ipc internal names

* readonly

* address review comments

* make ipcmessage readonly

* readonly cause why not
2026-05-14 16:56:02 -07:00
renovate[bot] 8300e115b2 chore(docutils): update dependency mkdocs-git-revision-date-localized-plugin to v1.5.2 (#22270)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-13 13:38:48 +00:00
renovate[bot] ea186eae17 chore(support): update dependency semver to v7.8.0 (#22266)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 14:46:17 +00:00
renovate[bot] 07466e02f7 chore(support): update dependency asyncbox to v6.3.0 (#22265)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 11:34:37 +00:00
renovate[bot] a91f4a718b chore(deps): update dependency @types/node to v24.12.3 (#22263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-11 19:15:58 +02:00
renovate[bot] f53e443d64 chore(eslint-config-appium-ts): update dependency @eslint/compat to v2.1.0 (#22264)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-11 15:37:16 +00:00
renovate[bot] fc11de2bda chore(test-support): update dependency sinon to v22 (#22262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-10 20:35:59 +02:00
renovate[bot] 82343effc4 chore(eslint-config-appium-ts): update dependency eslint-plugin-n to v18 (#22261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-10 20:35:28 +02:00
renovate[bot] 59a460949a chore(universal-xml-plugin): update dependency fast-xml-parser to v5.7.3 (#22260)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-10 10:19:43 +02:00
renovate[bot] b4dd22512c chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.59.2 (#22258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-10 08:48:04 +02:00
renovate[bot] a18700fed6 chore(storage-plugin): update dependency lru-cache to v11.3.6 (#22259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-10 08:47:54 +02:00
dependabot[bot] 2f312722d7 chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates (#22257)
Bumps the npm_and_yarn group with 2 updates in the / directory: [fast-uri](https://github.com/fastify/fast-uri) and [fast-xml-builder](https://github.com/NaturalIntelligence/fast-xml-builder).


Updates `fast-uri` from 3.0.1 to 3.1.2
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.0.1...v3.1.2)

Updates `fast-xml-builder` from 1.1.5 to 1.2.0
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-builder/blob/main/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-builder/compare/v1.1.5...v1.2.0)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: fast-xml-builder
  dependency-version: 1.2.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-08 22:43:31 +03:00
github-actions f5369c65a8 chore: publish
- appium@3.4.2
 - @appium/base-driver@10.5.2
 - @appium/base-plugin@3.2.4
 - @appium/docutils@2.4.2
 - @appium/fake-plugin@4.2.4
 - @appium/images-plugin@4.2.4
 - @appium/storage-plugin@1.1.4
 - @appium/support@7.2.2
 - @appium/test-support@4.1.4
2026-05-07 18:32:52 +00:00
Mykola Mokhnach 8c6c19982e fix(support): accept Uint8Array/ArrayBuffer in plist parse path (#22256) 2026-05-07 20:26:25 +02:00
Mykola Mokhnach e39017feac ci: Restore publish fallback script (#22255) 2026-05-07 20:25:25 +02:00
github-actions fd6dbe9eff chore: publish
- appium@3.4.1
 - @appium/base-driver@10.5.1
 - @appium/base-plugin@3.2.3
 - @appium/docutils@2.4.1
 - @appium/eslint-config-appium-ts@3.2.1
 - @appium/fake-plugin@4.2.3
 - @appium/images-plugin@4.2.3
 - @appium/storage-plugin@1.1.3
 - @appium/support@7.2.1
 - @appium/test-support@4.1.3
2026-05-06 20:38:58 +00:00
dependabot[bot] c18b535d42 chore(deps): bump basic-ftp in the npm_and_yarn group across 1 directory (#22253)
Bumps the npm_and_yarn group with 1 update in the / directory: [basic-ftp](https://github.com/patrickjuchli/basic-ftp).


Updates `basic-ftp` from 5.3.0 to 5.3.1
- [Release notes](https://github.com/patrickjuchli/basic-ftp/releases)
- [Changelog](https://github.com/patrickjuchli/basic-ftp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/patrickjuchli/basic-ftp/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: basic-ftp
  dependency-version: 5.3.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-06 23:24:12 +03:00
Edgars Eglītis 9045dfcefa ci: tune release workflows (#22252)
* ci: tune release workflows

* revert splitting workflows
2026-05-06 23:16:35 +03:00
Edgars Eglītis 98a1735913 fix(eslint-config-appium-ts): set new ESLint 10 rules to 'warn' (#22251) 2026-05-06 22:36:19 +03:00
Mykola Mokhnach 3229e74d3d fix(support): Avoid exceptions in unwrapElement (#22250) 2026-05-06 21:28:12 +02:00
github-actions 9c35776756 chore: publish
- appium@3.4.0
 - @appium/base-driver@10.5.0
 - @appium/base-plugin@3.2.2
 - @appium/docutils@2.4.0
 - @appium/driver-test-support@1.2.2
 - @appium/eslint-config-appium-ts@3.2.0
 - @appium/execute-driver-plugin@6.0.3
 - @appium/fake-driver@6.1.3
 - @appium/fake-plugin@4.2.2
 - @appium/images-plugin@4.2.2
 - @appium/opencv@4.1.4
 - @appium/plugin-test-support@1.2.2
 - @appium/relaxed-caps-plugin@2.2.2
 - @appium/schema@1.1.1
 - @appium/storage-plugin@1.1.2
 - @appium/support@7.2.0
 - @appium/test-support@4.1.2
 - @appium/types@1.4.0
 - @appium/universal-xml-plugin@2.1.3
2026-05-06 19:01:52 +00:00
Mykola Mokhnach 1b31db3be9 ci: Add a workflow for executing lerna version (#22249) 2026-05-06 20:59:36 +02:00
renovate[bot] 0a4b4f5a55 chore(support): update dependency glob to v13.0.6 (#22244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 17:42:13 +02:00
Mykola Mokhnach a085d44616 ci: Apply scoped release recovery (#22248) 2026-05-06 17:41:59 +02:00
Mykola Mokhnach a10f558382 ci: tune recovery logic (#22247) 2026-05-06 17:19:23 +02:00
Mykola Mokhnach f61e7d57fa ci: Release recovery script (#22246) 2026-05-06 17:09:23 +02:00
renovate[bot] 705710adc5 chore(support): update dependency axios to v1.16.0 (#22240)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 14:50:17 +00:00
renovate[bot] 6a3d659c5a chore(support): update dependency teen_process to v4.1.3 (#22241)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 13:46:54 +00:00
dependabot[bot] c760f02e14 chore(deps): bump ip-address (#22243)
Bumps the npm_and_yarn group with 1 update in the / directory: [ip-address](https://github.com/beaugunderson/ip-address).


Updates `ip-address` from 9.0.5 to 10.2.0
- [Commits](https://github.com/beaugunderson/ip-address/commits)

---
updated-dependencies:
- dependency-name: ip-address
  dependency-version: 10.2.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-06 12:27:52 +03:00
renovate[bot] e1ab96fc4e chore(docutils): update dependency yaml to v2.8.4 (#22239)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 08:47:02 +00:00
github-actions[bot]andmykola-mokhnach e8d31c63c4 docs(appium): Update documentation translations (#22238)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-05-06 09:20:11 +03:00
Edgars Eglītis 787571d338 feat: add 3 WebDriver extension endpoints (#22237)
* feat: add 2 WebDriver extension endpoints

* docs: add missing reference for removeAuthCredential

* fix protocol hash
2026-05-05 20:30:59 +03:00
Edgars Eglītis 4849ad015d feat(eslint-config-appium-ts): support ESLint 10 (#22236) 2026-05-05 11:15:02 +03:00
renovate[bot] 0878f3c8ce chore(workflows): update fuxingloh/multi-labeler action to v5 (#22235)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-05 09:05:43 +03:00
renovate[bot] 3dd0ac715a chore(support): update dependency asyncbox to v6.2.0 (#22233)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-04 20:27:40 +00:00
Edgars Eglītis ce09eb2e7d chore: fix new linting errors in ESLint 10 (#22230)
* fix no-useless-assignment errors

* fix preserve-caught-error errors

* address comments

* address comments
2026-05-04 20:44:23 +03:00
renovate[bot] 9cc0377acf chore(execute-driver-plugin): update dependency webdriverio to v9.27.1 (#22232)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-04 15:15:08 +00:00
renovate[bot] 9b21b92418 chore(workflows): update slackapi/slack-github-action action to v3.0.3 (#22229)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-02 13:35:08 +00:00
renovate[bot] c758fcaf13 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.59.1 (#22228)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-02 09:06:07 +00:00
Mykola Mokhnach 63218cdac6 feat(support): Replace lodash with native alternatives (#22225) 2026-05-01 23:17:40 +02:00
Edgars Eglītis 08493df3d1 feat(docutils): add mermaid diagram support (#22227) 2026-05-01 19:47:22 +03:00
Mykola Mokhnach bde5bd57f4 feat(eslint-config-appium-ts): Add rule to warn if a type is not imported properly (#22226) 2026-05-01 17:47:26 +02:00
renovate[bot] b5bdfdd4e4 chore(eslint-config-appium-ts): update dependency eslint-plugin-promise to v7.3.0 (#22222)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-30 14:43:29 +00:00
Edgars Eglītis cb4aa687a2 chore(deps): update plist to v4 (#22224) 2026-04-30 13:52:34 +03:00
renovate[bot] 180f2611c1 chore(support): update dependency plist to v3.1.1 (#22221)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-30 10:06:28 +00:00
Mykola Mokhnach 1f3119ec1f chore(support): Deprecate v1, v3 and v5 uuid generators (#22218) 2026-04-30 07:16:26 +02:00
Mykola Mokhnach 2c0fb7a2e4 feat(support): Add various helper utils (#22213) 2026-04-29 20:29:19 +02:00
Sai Asish Y fa1e87535b feat(base-driver): map W3C 'no such shadow root' to NoSuchShadowRootError (#22210)
Appium's base-driver had no dedicated ProtocolError subclass for
the W3C WebDriver 'no such shadow root' error. Every such response
from an underlying browser (the GetShadowRoot command against an
element whose shadow DOM is absent) fell through the
w3cErrorCodeMap lookup to UnknownError, making client-side error
handling (Selenium's NoSuchShadowRootException in particular)
unreachable.

Add NoSuchShadowRootError with error='no such shadow root' /
w3cStatus=404 / code=65, register it in the errors map so
errorFromW3CJsonCode returns it, and extend the existing
errors.spec table-tests to lock the new mapping.

Fixes #22209

Signed-off-by: SAY-5 <say.apm35@gmail.com>
2026-04-29 19:19:50 +02:00
renovate[bot] 79370cd307 chore(appium): update dependency ajv to v8.20.0 (#22216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-28 20:05:03 +02:00
renovate[bot] 712832ae61 chore(support): update dependency axios to v1.15.2 (#22205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-28 17:00:15 +00:00
renovate[bot] 6c9f7bbf6a chore(universal-xml-plugin): update dependency fast-xml-parser to v5.7.2 (#22215)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-28 11:44:36 +00:00
renovate[bot] 0f0f60effd chore(support): update dependency teen_process to v4.1.2 (#22212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-25 13:43:11 +02:00
renovate[bot] be35e0b3d1 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.59.0 (#22208)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-24 15:14:49 +00:00
github-actions 17f84265d1 chore: publish
- appium@3.3.1
 - @appium/base-driver@10.4.0
 - @appium/base-plugin@3.2.1
 - @appium/docutils@2.3.1
 - @appium/driver-test-support@1.2.1
 - @appium/eslint-config-appium-ts@3.1.0
 - @appium/execute-driver-plugin@6.0.2
 - @appium/fake-driver@6.1.2
 - @appium/fake-plugin@4.2.1
 - @appium/images-plugin@4.2.1
 - @appium/logger@2.0.7
 - @appium/opencv@4.1.3
 - @appium/plugin-test-support@1.2.1
 - @appium/relaxed-caps-plugin@2.2.1
 - @appium/storage-plugin@1.1.1
 - @appium/strongbox@1.1.1
 - @appium/support@7.1.1
 - @appium/test-support@4.1.1
 - @appium/types@1.3.1
 - @appium/universal-xml-plugin@2.1.2
2026-04-23 21:25:07 +00:00
renovate[bot] 7da5477e7a chore(workflows): update slackapi/slack-github-action action to v3.0.2 (#22207)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-23 15:06:39 +00:00
renovate[bot] 49f0dc7ab1 chore(support): update dependency uuid to v14 [security] (#22204)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-23 08:56:35 +03:00
Mykola Mokhnach 622f1999d7 fix(appium): plugins caching per session (#22203) 2026-04-22 23:09:58 +02:00
renovate[bot] 52b96394d6 chore(workflows): pin bahmutov/npm-install action to v1.12.1 (#22201)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-22 12:05:13 +03:00
renovate[bot] abba69f23a chore(universal-xml-plugin): update dependency @xmldom/xmldom to v0.9.10 (#22202)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-22 10:33:13 +03:00
Kazuaki Matsuo 83bfbce9cc docs: update governance.md (#22199)
* docs: update governance.md

* Update GOVERNANCE.md

* Update committers list in GOVERNANCE.md

* Update ownership details for Delta456 and navin772
2026-04-21 23:10:20 -07:00
Mykola Mokhnach 9670d93a12 fix(execute-driver-plugin): Protect VM-accessible instances from prototype pollution (#22195) 2026-04-21 23:23:28 +02:00
renovate[bot] c986fbe5ac chore(universal-xml-plugin): update dependency fast-xml-parser to v5.7.1 (#22181)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-21 22:12:18 +03:00
renovate[bot] 1c8735dfbe chore(eslint-config-appium-ts): update dependency eslint-plugin-perfectionist to v5.9.0 (#22200)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-21 16:44:17 +00:00
renovate[bot] 6d76b1ded6 chore(types): update dependency type-fest to v5.6.0 (#22198)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-21 09:39:32 +00:00
renovate[bot] 9c1c5ba06e chore(deps): update dependency typescript to v6.0.3 (#22196)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-20 14:34:31 +00:00
renovate[bot] bbb70d3c1e chore(workflows): update rinchsan/renovate-config-validator action to v0.2.1 (#22197)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-20 15:55:53 +03:00
Mykola Mokhnach 6476197bff fix(eslint-config-appium-ts): Suppress lint warnings (#22190) 2026-04-18 20:26:30 +02:00
Mykola Mokhnach 4c4e8d8911 feat(base-driver): Show known capability name matches for typos (#22193) 2026-04-18 19:17:00 +02:00
renovate[bot] c65e6d26f1 chore(workflows): update msimerson/node-lts-versions action to v2 (#22194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-18 11:24:17 +02:00
renovate[bot] 97af269d68 chore(deps): update dependency prettier to v3.8.3 (#22191)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-18 10:01:53 +02:00
renovate[bot] a31b82cc7b chore(appium): update dependency @sidvind/better-ajv-errors to v5 (#22192)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-18 10:01:35 +02:00
Mykola Mokhnach efe167f59a fix: All the rest of linter warnings (#22183) 2026-04-17 19:24:57 +02:00
renovate[bot] 3efaac1e9a chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.58.2 (#22187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-17 14:07:51 +00:00
renovate[bot] 3d3abbdc6f chore(docutils): update dependency diff to v9 (#22188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-17 11:30:22 +03:00
Edgars Eglītis 862fbbb438 chore: bump basic-ftp to 5.3.0 (#22186) 2026-04-17 08:54:45 +03:00
Mykola Mokhnach 5484e9a4ff fix(logger): linter errors (#22182) 2026-04-16 20:05:28 +02:00
Mykola Mokhnach 943866bcf3 fix(base-driver): lint warnings (#22174) 2026-04-16 18:15:34 +02:00
Mykola Mokhnach 62c7132476 fix(fake-driver): linter warnings (#22177) 2026-04-16 18:13:52 +02:00
renovate[bot] dbcf4a133c chore(storage-plugin): update dependency lru-cache to v11.3.5 (#22180)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-16 11:17:27 +00:00
Mykola Mokhnach 4da7da0a14 fix(support): lint warnings (#22175) 2026-04-15 08:38:32 +02:00
Mykola Mokhnach 8e68b3e2c9 fix(appium): lint warnings (#22171) 2026-04-15 07:15:45 +02:00
renovate[bot] 2e465ef433 chore(test-support): update dependency sinon to v21.1.2 (#22166)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-15 04:57:00 +00:00
github-actions[bot]andmykola-mokhnach 021aed1fdf docs(appium): Update documentation translations (#22173)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-04-14 20:43:00 -07:00
Mykola Mokhnach a929cd6024 feat(eslint-config-appium-ts): Add new rules (#22164) 2026-04-14 20:54:40 +02:00
Mykola Mokhnach 6e0fdfd967 refactor(appium): reorganize bootstrap entities into a separate subfolder (#22165) 2026-04-14 20:54:18 +02:00
Edgars Eglītis 18138f939d chore(deps): bump follow-redirects to v1.16.0 (#22169) 2026-04-14 15:21:39 +03:00
renovate[bot] e43b9052d0 chore(docutils): update dependency mike to v2.2.0 (#22167)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-14 09:00:25 +00:00
Mykola Mokhnach 1a5d266c04 chore(appium): Migrate logger.js to typescript (#22163) 2026-04-13 20:29:28 +02:00
Mykola Mokhnach 97d26a5796 chore(appium): Migrate main.js to typescript (#22159) 2026-04-13 18:07:11 +02:00
renovate[bot] 20d410e108 chore(test-support): update dependency sinon to v21.1.0 (#22161)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-13 13:00:02 +00:00
renovate[bot] ad562353d9 chore(deps): update dependency prettier to v3.8.2 (#22160)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-13 10:05:35 +00:00
Mykola Mokhnach 96152aef42 chore(appium): Migrate umbrella driver to typescript (#22156) 2026-04-12 20:03:50 +02:00
renovate[bot] 71ca18c565 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.5.11 (#22158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-12 13:51:05 +00:00
renovate[bot] 4d45af1ef2 chore(eslint-config-appium-ts): update dependency @eslint/compat to v2.0.5 (#22157)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-11 13:13:38 +02:00
renovate[bot] 73a9891c24 chore(support): update dependency glob to v13.0.6 (#22155)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-11 13:13:26 +02:00
Mykola Mokhnach dfe8bde687 fix(base-driver): Make proxy timeout mutable again (#22154) 2026-04-11 09:30:37 +02:00
dependabot[bot] 9b0a5a4096 chore(deps): bump basic-ftp in the npm_and_yarn group across 1 directory (#22150)
Bumps the npm_and_yarn group with 1 update in the / directory: [basic-ftp](https://github.com/patrickjuchli/basic-ftp).


Updates `basic-ftp` from 5.2.1 to 5.2.2
- [Release notes](https://github.com/patrickjuchli/basic-ftp/releases)
- [Changelog](https://github.com/patrickjuchli/basic-ftp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/patrickjuchli/basic-ftp/compare/v5.2.1...v5.2.2)

---
updated-dependencies:
- dependency-name: basic-ftp
  dependency-version: 5.2.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-11 09:24:22 +02:00
renovate[bot] 73abe981de chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.58.1 (#22151)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-11 09:24:13 +02:00
renovate[bot] e34c0dd639 chore(support): update dependency teen_process to v4.1.1 (#22152)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-11 09:24:03 +02:00
renovate[bot] c8f0ed5deb chore(workflows): update peter-evans/create-pull-request action to v8.1.1 (#22153)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-11 09:23:51 +02:00
Mykola Mokhnach 62fb60a8b5 chore(appium): Migrate extension stuff to typescript (#22149) 2026-04-11 09:00:29 +02:00
renovate[bot] 4e9bf1944b chore(deps): update dependency typescript to v6 (#22104) 2026-04-10 10:42:49 +02:00
github-actions 7a8965f5c3 chore: publish
- appium@3.3.0
 - @appium/base-driver@10.3.0
 - @appium/base-plugin@3.2.0
 - @appium/docutils@2.3.0
 - @appium/driver-test-support@1.2.0
 - @appium/eslint-config-appium-ts@3.0.2
 - @appium/execute-driver-plugin@6.0.1
 - @appium/fake-driver@6.1.1
 - @appium/fake-plugin@4.2.0
 - @appium/images-plugin@4.2.0
 - @appium/logger@2.0.6
 - @appium/opencv@4.1.2
 - @appium/plugin-test-support@1.2.0
 - @appium/relaxed-caps-plugin@2.2.0
 - @appium/storage-plugin@1.1.0
 - @appium/strongbox@1.1.0
 - @appium/support@7.1.0
 - @appium/test-support@4.1.0
 - @appium/types@1.3.0
 - @appium/universal-xml-plugin@2.1.1
2026-04-09 18:57:40 +00:00
renovate[bot] daa99525eb chore(storage-plugin): update dependency lru-cache to v11.3.3 (#22148)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-09 21:36:41 +03:00
renovate[bot] 6234359ff2 chore(support): update dependency glob to v13.0.6 (#22142)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-09 21:36:30 +03:00
renovate[bot] 24d8344927 chore(support): update dependency axios to v1.15.0 (#22145)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-09 21:26:19 +03:00
renovate[bot] e00cd5e7eb chore(storage-plugin): update dependency lru-cache to v11.3.1 (#22144)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-09 21:23:46 +03:00
renovate[bot] 27d3c517d7 chore(storage-plugin): update dependency lru-cache to v11.3.0 (#22143)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-09 09:24:44 +00:00
dependabot[bot] 76e060cf75 chore(deps): bump basic-ftp in the npm_and_yarn group across 1 directory (#22141)
Bumps the npm_and_yarn group with 1 update in the / directory: [basic-ftp](https://github.com/patrickjuchli/basic-ftp).


Updates `basic-ftp` from 5.2.0 to 5.2.1
- [Release notes](https://github.com/patrickjuchli/basic-ftp/releases)
- [Changelog](https://github.com/patrickjuchli/basic-ftp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/patrickjuchli/basic-ftp/compare/v5.2.0...v5.2.1)

---
updated-dependencies:
- dependency-name: basic-ftp
  dependency-version: 5.2.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-09 00:34:48 +03:00
renovate[bot] 3b8c41e3d4 chore(eslint-config-appium-ts): update dependency @eslint/compat to v2.0.4 (#22140)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-07 09:16:27 +02:00
renovate[bot] 0e5db551b4 chore(deps): update definitelytyped (#22137)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-06 17:40:25 +00:00
renovate[bot] e79c521fa7 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.5.10 (#22138)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-06 13:54:55 +00:00
renovate[bot] 1c4ce5d5ec chore(strongbox): update dependency slugify to v1.6.9 (#22136)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-05 16:34:53 +00:00
renovate[bot] a36736862f chore(base-driver): update dependency path-to-regexp to v8.4.2 (#22135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-05 12:58:24 +00:00
renovate[bot] 22b60daf75 chore(support): update dependency yauzl to v3.3.0 (#22133)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-04 08:48:44 +00:00
renovate[bot] 7153d0adf8 chore(base-driver): update dependency path-to-regexp to v8.4.1 (#22126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-03 05:13:13 +00:00
renovate[bot] ad13932e6e chore(universal-xml-plugin): update dependency lodash to v4.18.1 [security] (#22131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-03 01:35:57 +00:00
renovate[bot] f044afd932 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.58.0 (#22127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-02 21:14:56 +00:00
Edgars Eglītis ac46d8ef5c chore: run npm audit fix (#22129) 2026-04-01 14:57:16 +03:00
Edgars Eglītis dc37b2766d fix: adjust Renovate config (#22128) 2026-04-01 10:17:38 +03:00
Edgars Eglītis fe8b8eb808 chore: update Renovate config (#22125)
* chore: update Renovate config

* update config
2026-03-31 21:30:27 +03:00
renovate[bot] aca8f72ee5 chore(universal-xml-plugin): update dependency @xmldom/xmldom to v0.9.9 (#22122)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-30 14:46:34 +03:00
dependabot[bot] f135acadd4 chore(deps-dev): bump brace-expansion (#22120)
Bumps the npm_and_yarn group with 1 update in the / directory: [brace-expansion](https://github.com/juliangruber/brace-expansion).


Updates `brace-expansion` from 1.1.12 to 1.1.13
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.13)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.13
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-29 19:53:59 +03:00
Edgars Eglītis 4539f868fc chore: run npm audit fix (#22119) 2026-03-29 19:47:30 +03:00
Edgars Eglītis 5cd7076fd6 fix(docutils): do not silence errors when building without serve (#22118)
* fix(docutils): do not silence original errors when building without serve

* address comments
2026-03-29 19:33:41 +03:00
renovate[bot] 96254ef3b8 chore(docutils): update dependency mkdocs-redirects to v1.2.3 (#22116)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-29 09:17:15 +00:00
Mykola Mokhnach ed9d4aed09 chore(appium): Migrate cli foundation to typescript (#22110) 2026-03-29 09:16:00 +02:00
renovate[bot] a03b28a12c chore(eslint-config-appium-ts): update dependency eslint-plugin-unicorn to v64 (#22114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-28 14:58:49 +02:00
renovate[bot] b649c64df5 chore(support): update dependency axios to v1.14.0 (#22113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-28 09:39:44 +00:00
github-actions[bot]andmykola-mokhnach 22eed52c60 docs(appium): Update documentation translations (#22112)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-03-27 23:12:32 -07:00
Edgars Eglītis 5e2006ae23 docs: add AppClaw to Ecosystem tools document (#22111)
* docs: add AppClaw to Ecosystem tools document

* remove extra line
2026-03-27 15:45:24 +02:00
dependabot[bot] c45839f057 chore(deps-dev): bump handlebars (#22108)
Bumps the npm_and_yarn group with 1 update in the / directory: [handlebars](https://github.com/handlebars-lang/handlebars.js).


Updates `handlebars` from 4.7.8 to 4.7.9
- [Release notes](https://github.com/handlebars-lang/handlebars.js/releases)
- [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/v4.7.9/release-notes.md)
- [Commits](https://github.com/handlebars-lang/handlebars.js/compare/v4.7.8...v4.7.9)

---
updated-dependencies:
- dependency-name: handlebars
  dependency-version: 4.7.9
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 10:42:34 +02:00
renovate[bot] b31574d0ed chore(base-driver): update dependency path-to-regexp to v8.4.0 (#22109)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-27 08:29:01 +00:00
Mykola Mokhnach c2b7070c53 chore(appium): Migrate the entire schema from JavaScript to TypeScript (#22107) 2026-03-27 08:19:05 +01:00
dependabot[bot] e907832667 chore(deps): bump the npm_and_yarn group across 1 directory with 1 update (#22106)
Bumps the npm_and_yarn group with 1 update in the / directory: [picomatch](https://github.com/micromatch/picomatch).


Updates `picomatch` from 4.0.3 to 4.0.4
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4)

Updates `picomatch` from 2.3.1 to 2.3.2
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4)

Updates `picomatch` from 4.0.2 to 4.0.4
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-26 09:47:53 +02:00
Mykola Mokhnach 6e104d4ba1 chore(appium): Migrate doctor.js to typescript (#22105) 2026-03-25 20:34:28 +01:00
renovate[bot] 41f2304e16 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.5.9 (#22102)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-24 21:45:51 +00:00
renovate[bot] 4ec08dbbf9 chore(execute-driver-plugin): update dependency webdriverio to v9.27.0 (#22103)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-24 17:21:19 +00:00
renovate[bot] a842430634 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.57.2 (#22101)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-24 13:03:09 +00:00
renovate[bot] 4d3a5dc74a chore(docutils): update dependency diff to v8.0.4 (#22100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-24 10:15:37 +00:00
Mykola Mokhnach e6fc983d9d chore(appium): Migrate config-related stuff to typescript (#22099) 2026-03-23 20:13:02 +01:00
renovate[bot] a2be0836da chore(storage-plugin): update dependency ws to v8.20.0 (#22098)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-23 16:36:01 +00:00
renovate[bot] 46f2160bf1 chore(plugin-test-support): update dependency get-port to v7.2.0 (#22097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-23 12:36:41 +00:00
renovate[bot] 00e3d864f0 chore(docutils): update dependency yaml to v2.8.3 (#22096)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-23 09:15:43 +00:00
Mykola Mokhnach caee6b733b chore(appium): Migrate constants and grid-register to typescript (#22095) 2026-03-23 07:53:36 +01:00
renovate[bot] 4d94dffa80 chore(support): update dependency teen_process to v4.1.0 (#22094)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-21 16:37:33 +01:00
Mykola Mokhnach 86c8f23a67 feat: use exact version for dependencies in monorepo packages instead of ^ (#22090) 2026-03-21 16:37:22 +01:00
Mykola Mokhnach 73b7820df5 feat(strongbox): Add a possibility to list strongbox items (#22091) 2026-03-21 16:37:04 +01:00
renovate[bot] 26f8429509 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.5.8 (#22093)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-21 14:06:08 +00:00
renovate[bot] ff96c9a6e1 chore(support): update dependency sanitize-filename to v1.6.4 (#22092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-21 08:53:47 +00:00
renovate[bot] 87704de080 chore(types): update dependency type-fest to v5.5.0 (#22084) 2026-03-20 19:41:38 +01:00
renovate[bot] e20ee97139 chore(support): update dependency glob to v13.0.6 (#22089)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-20 19:18:51 +01:00
renovate[bot] 52a620818a chore(docutils): update dependency mkdocs-material to v9.7.6 (#22088)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-20 09:47:34 +00:00
dependabot[bot] 72b9efcb42 chore(deps): bump flatted in the npm_and_yarn group across 1 directory (#22087)
Bumps the npm_and_yarn group with 1 update in the / directory: [flatted](https://github.com/WebReflection/flatted).


Updates `flatted` from 3.4.1 to 3.4.2
- [Commits](https://github.com/WebReflection/flatted/compare/v3.4.1...v3.4.2)

---
updated-dependencies:
- dependency-name: flatted
  dependency-version: 3.4.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-20 08:48:23 +02:00
renovate[bot] 2f17a1a0ac chore(universal-xml-plugin): update dependency fast-xml-parser to v5.5.7 [security] (#22086)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-20 04:51:04 +00:00
github-actions[bot]andmykola-mokhnach 87b8603329 docs(appium): Update documentation translations (#22083)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-03-18 21:11:16 -07:00
Kazuaki Matsuo 7ab1df8e62 docs(appium): add skills in the tools (#22080)
* docs(appium): add skills in the tools

* Update AI Agent skills description for clarity
2026-03-18 08:02:45 -07:00
renovate[bot] 1412d58452 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.5.6 (#22066)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-17 17:46:15 +00:00
renovate[bot] 63908458c0 chore(test-support): update dependency sinon to v21.0.3 (#22079)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-17 13:56:31 +00:00
renovate[bot] 2c12f647e5 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.57.1 (#22078)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-17 10:01:34 +00:00
renovate[bot] 75682fa2e5 chore(support): update dependency glob to v13.0.6 (#22073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-16 20:21:58 +01:00
Mykola Mokhnach af16eafbb2 chore(appium): Migrate utils to typescript (#22075) 2026-03-16 11:38:17 +01:00
renovate[bot] 6cffa01c8d chore(execute-driver-plugin): update dependency webdriverio to v9.26.1 (#22076)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-16 08:54:42 +00:00
renovate[bot] 7abbd51c28 chore(strongbox): update dependency slugify to v1.6.8 (#22074)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-15 08:46:07 +00:00
Mykola Mokhnach 2b859134a8 chore(appium): Migrate logsink to typescript (#22072) 2026-03-14 20:54:55 +01:00
renovate[bot] 06b5fe5019 chore(deps): update dependency lerna to v9.0.7 (#22070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-14 17:41:41 +01:00
renovate[bot] d6a195a556 chore(storage-plugin): update dependency lru-cache to v11.2.7 (#22071)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-14 17:41:28 +01:00
renovate[bot] 69bd198a18 chore(workflows): update slackapi/slack-github-action action to v3 (#22067)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-14 12:50:02 +02:00
dependabot[bot] 3ca551ba2e chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates (#22069)
Bumps the npm_and_yarn group with 2 updates in the / directory: [flatted](https://github.com/WebReflection/flatted) and [undici](https://github.com/nodejs/undici).


Updates `flatted` from 3.3.2 to 3.4.1
- [Commits](https://github.com/WebReflection/flatted/compare/v3.3.2...v3.4.1)

Updates `undici` from 6.23.0 to 6.24.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v6.23.0...v6.24.0)

---
updated-dependencies:
- dependency-name: flatted
  dependency-version: 3.4.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: undici
  dependency-version: 6.24.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-14 12:46:31 +02:00
dependabot[bot] f897dbaacb chore(deps-dev): bump tar in the npm_and_yarn group across 1 directory (#22068)
Bumps the npm_and_yarn group with 1 update in the / directory: [tar](https://github.com/isaacs/node-tar).


Updates `tar` from 7.5.8 to 7.5.11
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.8...v7.5.11)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.11
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-14 00:05:53 +02:00
github-actions[bot]andmykola-mokhnach e83e513957 docs(appium): Update documentation translations (#22065)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-03-12 18:43:19 -07:00
Edgars Eglītis d3e8ddc35b docs: add reference pages for caps & insecure features (#22064)
* docs: add reference page for globally recognized caps

* docs: add index page

* docs: add reference for insecure features

* docs: update server security doc

* docs: update caps guide doc

* docs: address comments

* docs: address more comments
2026-03-12 20:58:35 +02:00
renovate[bot] d5092ffd30 chore(eslint-config-appium-ts): update dependency eslint-plugin-import-x to v4.16.2 (#22063)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-12 18:01:45 +00:00
renovate[bot] 91a9eb782a chore(deps): update dependency lerna to v9.0.6 (#22062)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-12 13:45:26 +00:00
renovate[bot] 3a452888fc chore(universal-xml-plugin): update dependency fast-xml-parser to v5.5.3 (#22061)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-12 09:40:41 +00:00
renovate[bot] 66ddff0a33 chore(execute-driver-plugin): update dependency webdriverio to v9.25.0 (#22060)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-11 13:29:44 +00:00
renovate[bot] d7c30108d6 chore(support): update dependency yauzl to v3.2.1 (#22059)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-11 08:40:56 +00:00
Kazuaki Matsuo f628d517fe ci: update publish docs workflow (#22057)
* ci: update publish docs workflow

* use docs:publish

* Add step to fetch gh-pages before publishing docs

* ci: run after 'Appium Server Release' completion
2026-03-11 00:20:54 -07:00
Mykola Mokhnach 190c30b418 chore(base-driver): Migrate proxy.js to typescript (#22054) 2026-03-11 07:07:54 +01:00
renovate[bot] fa7ba639d4 chore(docutils): update dependency mkdocs-material to v9.7.5 (#22058)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-11 05:04:19 +00:00
github-actions[bot]andmykola-mokhnach 1b1314cd6b docs(appium): Update documentation translations (#22056)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-03-10 19:45:48 -07:00
Mykola Mokhnach 36179e8795 docs: Enhance documentation on properties managed by the umbrella driver (#22055) 2026-03-10 22:23:48 +01:00
renovate[bot] 825431b14a chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.57.0 (#22053)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-10 08:56:24 +00:00
github-actions c745352c65 chore: publish
- appium@3.2.2
 - @appium/base-driver@10.2.2
 - @appium/base-plugin@3.1.1
 - @appium/fake-plugin@4.1.1
2026-03-09 18:42:00 +00:00
Mykola Mokhnach 1d89e2a5f8 fix(appium): Exclude package.json from tsconfig (#22052) 2026-03-09 19:33:14 +01:00
Mykola Mokhnach 2dfae495ff chore(base-driver): Migrate protocol converter to typescript (#22049) 2026-03-08 21:51:32 +01:00
github-actions 980a121804 chore: publish
- appium@3.2.1
 - @appium/base-driver@10.2.1
 - @appium/base-plugin@3.1.0
 - @appium/docutils@2.2.2
 - @appium/driver-test-support@1.1.0
 - @appium/eslint-config-appium-ts@3.0.1
 - @appium/execute-driver-plugin@6.0.0
 - @appium/fake-driver@6.1.0
 - @appium/fake-plugin@4.1.0
 - @appium/images-plugin@4.1.1
 - @appium/logger@2.0.5
 - @appium/opencv@4.1.1
 - @appium/plugin-test-support@1.1.0
 - @appium/relaxed-caps-plugin@2.1.0
 - @appium/schema@1.1.0
 - @appium/storage-plugin@1.0.6
 - @appium/strongbox@1.0.2
 - @appium/support@7.0.6
 - @appium/test-support@4.0.6
 - @appium/tsconfig@1.1.2
 - @appium/types@1.2.1
 - @appium/universal-xml-plugin@2.1.0
2026-03-08 20:32:27 +00:00
Kazuaki Matsuo 8fae5e69ea ci: add github token for a release task 2026-03-08 13:30:40 -07:00
Kazuaki Matsuo 2d149121e1 ci: print only versions in release task (#22050) 2026-03-08 12:43:38 -07:00
renovate[bot] 362a2a2d4d chore(docutils): update dependency mike to v2.1.4 (#22048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-08 12:41:14 +00:00
Mykola Mokhnach 503f0c1f18 ci: Add manual release workflow (#22043) 2026-03-08 08:30:31 +01:00
Mykola Mokhnach a1095d2816 chore(base-driver): Migrate status.js to typescript (#22047) 2026-03-08 08:29:55 +01:00
Mykola Mokhnach e7e26e5f57 chore(base-driver): Migrate the rest of protocol modules to typescript (#22046) 2026-03-07 19:16:46 +01:00
renovate[bot] b4c1b7be78 chore(eslint-config-appium-ts): update eslint monorepo to v9.39.4 (#22045)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-07 16:22:14 +01:00
Edgars Eglītis eee4c05844 fix(support): add path traversal check in _extractEntryTo (#22042)
* fix(support): add path traversal check for `_extractEntryTo`

* simplify

* use isSubPath

* add test
2026-03-07 17:08:27 +02:00
renovate[bot] f2e4bc7fcd chore(eslint-config-appium-ts): update dependency @eslint/compat to v2.0.3 (#22044)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-07 14:00:43 +00:00
renovate[bot] 5187e63e33 chore(deps): update dependency @types/node to v24.12.0 (#22040)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-06 08:33:37 +01:00
renovate[bot] 43a096cf1f chore(eslint-config-appium-ts): update dependency @stylistic/eslint-plugin to v5.10.0 (#22041)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-06 08:33:25 +01:00
Mykola Mokhnach 27c39aed20 chore(base-driver): Migrate routes.js to typescript (#22039) 2026-03-06 08:33:05 +01:00
Mykola Mokhnach 176f19beff chore(base-driver): Migrate capability helpers to typescript (#22037) 2026-03-05 19:12:00 +01:00
renovate[bot] dd0be5ec6c chore(test-support): update dependency sinon to v21.0.2 (#22038)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-05 15:41:51 +00:00
Mykola Mokhnach a7006075f8 chore(base-driver): Migrate the rest of express modules to typescript (#22036) 2026-03-04 21:03:22 +01:00
Mykola Mokhnach 3b728c641a chore(base-driver): Migrate websocket and express logging helpers to typescript (#22034) 2026-03-04 18:28:24 +01:00
renovate[bot] 367ba33deb chore(docutils): update dependency mkdocs-material to v9.7.4 (#22033)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-04 09:30:04 +00:00
Mykola Mokhnach 5d260c78a2 chore(base-driver): Migrate middleware.js to typescript (#22032) 2026-03-04 07:21:28 +01:00
Mykola Mokhnach 7deb40a4a4 chore(base-driver): Migrate server.js to typescript (#22030) 2026-03-03 19:01:05 +01:00
renovate[bot] 2c8ff15c30 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.4.2 (#22031)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-03 14:54:47 +00:00
Edgars Eglītis 405d8e9491 chore: run npm audit fix (#22029) 2026-03-01 21:29:55 +02:00
Edgars Eglītis 207761a2dc chore(support): drop non-breaking uses of bluebird (#22026)
* chore(support): drop bluebird

* remove extra newline

* fix timeout not being cleared

* simplify zipReadStream

* address comments

* drop custom error classes

* simplify promisified types

* add back bluebird where needed to avoid breaking changes

* tune cancellableDelay
2026-03-01 21:17:27 +02:00
Mykola Mokhnach c6d9e079c3 chore(base-driver): Migrate settings and logger to typescript (#22028) 2026-03-01 16:41:25 +01:00
Mykola Mokhnach 69482ee634 chore(base-driver): Migrate helpers.js to typescript (#22027) 2026-02-28 22:35:14 +01:00
Mykola Mokhnach 2f27425ea3 fix: Type imports (#22025) 2026-02-28 19:53:11 +01:00
renovate[bot] 61bba1e06f chore(support): update dependency glob to v13.0.6 (#22024)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-28 15:33:42 +02:00
renovate[bot] eda42cffff chore(deps): update dependency @types/node to v24.11.0 (#22021)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-28 13:10:21 +01:00
dependabot[bot] bfc57ea366 chore(deps): bump tar in the npm_and_yarn group across 1 directory (#22022)
Bumps the npm_and_yarn group with 1 update in the / directory: [tar](https://github.com/isaacs/node-tar).


Updates `tar` from 7.5.7 to 7.5.8
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.7...v7.5.8)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.8
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 13:10:08 +01:00
Mykola Mokhnach 0110437610 chore(types): Migrate index to lib (#22023) 2026-02-28 13:09:50 +01:00
renovate[bot] 0c966f2ce1 chore(support): update dependency axios to v1.13.6 (#22020)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-28 08:57:05 +00:00
Mykola Mokhnach 954ee5f621 chore(docutils): Migrate index to lib (#22019) 2026-02-28 09:22:09 +01:00
Mykola Mokhnach 9db2b7827d chore(support): Move index to lib (#22018) 2026-02-28 09:21:59 +01:00
Mykola Mokhnach b11cb78d11 chore(support): migrate zip.js to typescript (#22017) 2026-02-27 21:42:32 +01:00
renovate[bot] 9c7e2efaaf chore(deps): update dependency @types/node to v24.10.15 (#22015)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-27 10:14:51 +01:00
renovate[bot] 987996cc22 chore(support): update dependency glob to v13.0.6 (#22016)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-27 10:14:40 +01:00
Mykola Mokhnach 5c3289a8e9 chore(support): Migrate util.js to typescript (#22013) 2026-02-27 10:14:20 +01:00
Kazuaki Matsuo 98d2497b49 fix(support): fix missing throw for Error (#22014) 2026-02-26 23:05:27 -08:00
dependabot[bot] 579b6538f0 chore(deps): bump basic-ftp in the npm_and_yarn group across 1 directory (#22011)
Bumps the npm_and_yarn group with 1 update in the / directory: [basic-ftp](https://github.com/patrickjuchli/basic-ftp).


Updates `basic-ftp` from 5.0.5 to 5.2.0
- [Release notes](https://github.com/patrickjuchli/basic-ftp/releases)
- [Changelog](https://github.com/patrickjuchli/basic-ftp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/patrickjuchli/basic-ftp/compare/v5.0.5...v5.2.0)

---
updated-dependencies:
- dependency-name: basic-ftp
  dependency-version: 5.2.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 18:04:39 +01:00
Mykola Mokhnach 5dac35b3cc chore(support): Migrate timing.js to typescript (#22010) 2026-02-26 18:04:24 +01:00
renovate[bot] 3c1f0fc99f chore(deps): update dependency @types/node to v24.10.14 (#22012)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-26 15:05:44 +00:00
renovate[bot] f94df7feb0 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.4.1 (#22007)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-25 18:14:55 +01:00
Edgars Eglītis fb8b9297da chore(deps): run npm audit fix (#22009) 2026-02-25 16:51:42 +02:00
Mykola Mokhnach dcc6a00d10 fix(support): Make staticDir call lazy (#22008) 2026-02-25 09:42:34 +01:00
renovate[bot] 4838d301f6 chore(docutils): update dependency mkdocs-material to v9.7.3 (#22006)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-25 06:55:03 +00:00
Mykola Mokhnach 5f73989a17 chore(support): Migrate tempdir.js to typescript (#22005) 2026-02-24 22:54:13 +01:00
renovate[bot] 6db6e2a5d0 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.56.1 (#22004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-24 13:10:58 +00:00
Mykola Mokhnach 3708211153 chore(support): Migrate system.js to typescript (#22003) 2026-02-23 21:32:08 +01:00
Mykola Mokhnach 30f9ad5202 chore(support): Migrate process.js to typescript (#22002) 2026-02-23 18:44:20 +01:00
renovate[bot] 1cb5f91cce chore(deps): update dependency @types/lodash to v4.17.24 (#22001)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-23 09:49:42 +00:00
Mykola Mokhnach b885084dde chore(support): Migrate plist.js to typescript (#22000) 2026-02-22 21:18:40 +01:00
Mykola Mokhnach 90785783e6 chore(support): Migrate npm.js to typescript (#21999) 2026-02-22 17:24:43 +01:00
Mykola Mokhnach 358c6aaf4f chore(support): migrate node.js to typescript (#21998) 2026-02-21 20:06:36 +01:00
Edgars Eglītis 09f7e6c245 test(appium,base-driver,support): drop bluebird (#21996)
* test(appium,base-driver,support): drop bluebird

* copilot
2026-02-21 14:26:49 +02:00
renovate[bot] 0ebd0c3ccd chore(eslint-config-appium-ts): update eslint monorepo to v9.39.3 (#21997)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-21 12:24:38 +01:00
Mykola Mokhnach 4daaa14c29 fix(logger): Make sure we always have single logger instance per process (#21991) 2026-02-21 12:12:15 +01:00
Edgars Eglītis 8895ac79d7 feat(execute-driver-plugin)!: replace bluebird usage inside scripts with native promises (#21990)
BREAKING CHANGE: The `Promise` object in the script context now matches the global `Promise` object instead of `bluebird`. Methods specific to `bluebird` are no longer supported.
2026-02-20 22:11:01 +02:00
Edgars Eglītis 196c38f7af chore(deps-dev): remove unused yaml-js (#21995) 2026-02-20 19:22:30 +02:00
Edgars Eglītis edae4ac239 chore(fake-plugin): drop bluebird (#21992) 2026-02-20 14:36:30 +02:00
renovate[bot] fec645f64a chore(support): update dependency glob to v13.0.6 (#21993)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-20 13:28:35 +01:00
renovate[bot] df7efe4339 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.3.7 (#21994)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-20 13:28:22 +01:00
Edgars Eglītis 7467221f64 chore(driver-test-support): drop bluebird (#21989) 2026-02-19 23:38:07 +02:00
Edgars Eglītis cad140783f chore(fake-driver): drop bluebird (#21988) 2026-02-19 21:53:57 +02:00
Edgars Eglītis 69e667b969 chore(deps): run npm audit fix (#21987) 2026-02-19 21:35:38 +02:00
Mykola Mokhnach f2dcd2d32f chore(support): Migrate mkdirp and net helpers to typescript (#21985) 2026-02-19 20:27:20 +01:00
Edgars Eglītis 77f9f14e48 chore(opencv): drop bluebird (#21986) 2026-02-19 21:25:28 +02:00
renovate[bot] 550f134f75 chore(eslint-config-appium-ts): update dependency @stylistic/eslint-plugin to v5.9.0 (#21984)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-19 17:45:50 +00:00
renovate[bot] 2cc5c59426 chore(docutils): update dependency mkdocs-material to v9.7.2 (#21982)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-19 09:50:56 +00:00
github-actions[bot]andmykola-mokhnach ee57552181 docs(appium): Update documentation translations (#21981)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-02-18 22:33:51 -08:00
Edgars Eglītis 7b908ec869 chore(storage-plugin): drop bluebird (#21980) 2026-02-18 23:53:16 +02:00
Mykola Mokhnach 8f13721110 chore(support): Migrate mjpeg.js to typescript (#21979) 2026-02-18 21:33:16 +01:00
renovate[bot] b6b340225c chore(support): update dependency glob to v13.0.5 (#21978)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-18 10:43:28 +00:00
Edgars Eglītis df60c91482 chore: remove obsolete root-level files (#21975)
* chore: remove obsolete root-level files

* chore: remove duplicated code of conduct

* chore: remove old ideas doc

* docs: update code of conduct link
2026-02-18 08:46:27 +02:00
Mykola Mokhnach 9b0dac0b61 chore(support): Migrate logging helpers to typescript (#21977) 2026-02-17 21:57:00 +01:00
renovate[bot] 5cd25c1d0c chore(support): update dependency glob to v13.0.4 (#21973)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-17 18:21:11 +01:00
renovate[bot] bfa5debfb8 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.56.0 (#21974)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-17 18:20:55 +01:00
Mykola Mokhnach 6f78e06c34 chore(support): Migrate image-util.js to typescript (#21972) 2026-02-16 19:04:43 +01:00
renovate[bot] d59a7c9d49 chore(support): update dependency teen_process to v4.0.10 (#21971)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 17:30:45 +00:00
renovate[bot] bce5946755 chore(deps): update dependency rimraf to v6.1.3 (#21970)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 13:16:09 +00:00
Mykola Mokhnach 94e811d284 chore(support): Migrate fs.js to typescript (#21969) 2026-02-15 20:22:20 +01:00
Mykola Mokhnach 500ce8bc03 chore(support): Migrate env.js to typescript (#21968) 2026-02-15 18:57:41 +01:00
Kazuaki Matsuo d734b4c200 fix(base-driver): fix session id handling more (#21962)
* fix(appium): fix session id handling more

* modify the comment

* Refine comments in getSessionId and the log

Updated comments for clarity and corrected typos.
2026-02-15 09:12:34 -08:00
renovate[bot] 666c92cd72 chore(appium): update dependency ajv to v8.18.0 (#21966)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-15 14:14:20 +00:00
renovate[bot] 906ad62e8a chore(eslint-config-appium-ts): update dependency eslint-plugin-n to v17.24.0 (#21967)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-15 08:30:12 +00:00
Mykola Mokhnach 951e1c2a3b chore(support): Migrate doctor.js to typescript (#21965) 2026-02-15 08:42:54 +01:00
Mykola Mokhnach 9f5faf5bed fix: Avoid attaching plugins to a non-existing session (#21964) 2026-02-15 08:42:40 +01:00
Mykola Mokhnach 453a9e9e01 chore(support): Migrate console utils (#21961) 2026-02-14 19:52:41 +01:00
renovate[bot] 5bb75c0859 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.3.6 (#21963)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-14 14:06:58 +00:00
Edgars Eglītis bcda0bec56 chore(support): replace moment with native Date (#21960)
* chore(support): replace moment with native Date

* avoid concatenation
2026-02-13 20:58:50 +02:00
Mykola Mokhnach 0caab1fa58 test(base-driver): Migrate e2e tests to typescript (#21956) 2026-02-13 19:21:05 +01:00
Edgars Eglītis f54961a655 chore(storage-plugin): replace rimraf with @appium/support equivalent (#21959) 2026-02-13 20:01:46 +02:00
Edgars Eglītis 8c9e66a70f chore(deps): run npm audit fix (#21958) 2026-02-13 15:58:21 +02:00
renovate[bot] 46fe54555c chore(support): update dependency glob to v13.0.3 (#21957)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-13 09:26:18 +00:00
Mykola Mokhnach 761bee667b test(base-driver): Migrate unit tests to typescript (#21955) 2026-02-12 20:04:10 +01:00
Kazuaki Matsuo 77eed7d4c0 chore(base-driver): update type of express-serve-static-core (#21942)
* chore(base-driver): update type of express-serve-static-core

* modify

* clean up a bit

* use debug

* remove error, address possible array case

* chore: remove a line

Check if the driver proxy is active before proceeding.
2026-02-11 22:17:39 -08:00
renovate[bot] 8ce7b05325 chore(support): update dependency which to v6.0.1 (#21953)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-11 18:08:22 +01:00
renovate[bot] 5ed44a0131 chore(support): update dependency glob to v13.0.2 (#21952)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-11 18:08:10 +01:00
renovate[bot] 55e61cc625 chore(storage-plugin): update dependency lru-cache to v11.2.6 (#21951)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-11 13:56:23 +00:00
renovate[bot] a1c5c03e8c chore(eslint-config-appium-ts): update dependency eslint-plugin-unicorn to v63 (#21954)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-11 12:54:07 +02:00
renovate[bot] 5259e27ee8 chore(deps): update dependency lerna to v9.0.4 (#21950)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-11 08:43:24 +00:00
renovate[bot] 2a49c53ce6 chore(deps): update dependency @types/node to v24.10.13 (#21949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-11 07:16:49 +00:00
Mykola Mokhnach 6e8c19c83e test(logger): Migrate tests to typescript (#21948) 2026-02-11 07:11:59 +01:00
Mykola Mokhnach 2611459ac8 chore(appium): Split package installation and validation (#21947) 2026-02-11 07:11:05 +01:00
Mykola Mokhnach 1707cc1f85 feat(fake-driver): Migrate doctor scripts to typescript (#21946) 2026-02-10 22:33:18 +01:00
Mykola Mokhnach 9ea601c833 fix(appium): Fix CLI arguments normalization (#21945) 2026-02-10 17:43:20 +01:00
Mykola Mokhnach 0515ae5c49 feat(fake-driver): Migrate to typescript (#21935) 2026-02-10 16:32:47 +01:00
renovate[bot] d0df4fbd3b chore(execute-driver-plugin): update dependency webdriverio to v9.24.0 (#21944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-10 14:11:53 +00:00
renovate[bot] 5da1e7dee3 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.55.0 (#21943)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-10 10:14:26 +00:00
renovate[bot] f7e6da2bd4 chore(support): update dependency read-pkg to v10.1.0 (#21939)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 19:39:55 +00:00
renovate[bot] 12347b5323 chore(eslint-config-appium-ts): update dependency @stylistic/eslint-plugin to v5.8.0 (#21941)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 13:12:26 +00:00
renovate[bot] 2d97841834 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.3.5 (#21938)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 10:54:36 +00:00
Mykola Mokhnach 51e9b06784 test(appium): Fix BiDi test (#21936) 2026-02-08 18:43:16 +01:00
renovate[bot] b7eec0a01d chore(types): update dependency type-fest to v5.4.4 (#21934)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-08 14:14:31 +01:00
renovate[bot] e9eed8de4c chore(support): update dependency axios to v1.13.5 (#21933)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-08 14:14:23 +01:00
renovate[bot] d1e07b55e2 chore(deps): update dependency @types/node to v24.10.12 (#21932)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-08 12:45:45 +00:00
Mykola Mokhnach ecaa49f00c test(fake-driver): Migrate to typescript (#21931) 2026-02-08 10:05:28 +01:00
Mykola Mokhnach a570aa4781 chore(appium): Remove unused scripts (#21930) 2026-02-07 19:27:58 +01:00
Mykola Mokhnach a938fa4e7b test(appium): Migrate tests to typescript (#21928) 2026-02-07 10:41:42 +01:00
Kazuaki Matsuo 18355bdf3a docs(execute-driver-plugin): add note about possible risk (#21924)
* docs(execute-driver-plugin): add note about possible risk

Update README to clarify plugin usage and security note.

* Update README.md
2026-02-06 22:56:10 -08:00
renovate[bot] df509693d1 chore(support): update dependency semver to v7.7.4 (#21927)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-06 17:50:41 +00:00
renovate[bot] 4048e1bfde chore(deps): update dependency @types/node to v24.10.11 (#21926)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-06 14:32:32 +00:00
Mykola Mokhnach 844e80c19c test(support): Migrate tests to typescript (#21925) 2026-02-05 23:32:12 +01:00
Mykola Mokhnach e33ad95851 feat(driver-test-support): Migrate to typescript (#21922) 2026-02-05 17:05:35 +01:00
renovate[bot] d308390db7 chore(deps): update dependency cpy-cli to v7 (#21923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-05 12:19:05 +02:00
renovate[bot] 8b3c69f03c chore(tsconfig): update dependency @tsconfig/node20 to v20.1.9 (#21921)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-04 11:07:30 +00:00
dependabot[bot] 94e58f2ea6 chore(deps): bump @isaacs/brace-expansion (#21919)
Updates `@isaacs/brace-expansion` from 5.0.0 to 5.0.1

---
updated-dependencies:
- dependency-name: "@isaacs/brace-expansion"
  dependency-version: 5.0.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 09:29:03 +02:00
Mykola Mokhnach 2615935939 fix: Move @appium/types to dev dependencies for various packages (#21920) 2026-02-03 21:02:18 -08:00
Mykola Mokhnach 07b573df27 feat(base-plugin): Migrate to typescript (#21918) 2026-02-03 22:58:38 +01:00
renovate[bot] eb0aaa2e5f chore(deps): update dependency @types/node to v24.10.10 (#21917)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-03 14:07:04 +00:00
renovate[bot] f736bce4a5 chore(support): update dependency package-directory to v8.2.0 (#21916)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 17:09:51 +00:00
renovate[bot] 7343ec8cb5 chore(types): update dependency type-fest to v5.4.3 (#21915)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 12:50:28 +00:00
renovate[bot] 2cfc5d3956 chore(execute-driver-plugin): update dependency webdriverio to v9.23.3 (#21914)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 09:00:00 +00:00
Mykola Mokhnach 7b139d7e35 feat(fake-plugin): Migrate to typescript (#21913) 2026-02-02 09:48:44 +01:00
Mykola Mokhnach 27e7e5a4e2 feat(plugin-test-support): Migrate to typescript (#21911) 2026-02-01 21:23:38 +01:00
Mykola Mokhnach 36fd0af47e test(storage-plugin): Migrate to typescript (#21912) 2026-02-01 16:02:21 +01:00
Edgars Eglītis f4426a82dc chore: remove old WDIO version from lockfile (#21910) 2026-02-01 00:39:08 +02:00
Mykola Mokhnach 4f860502c4 test(appium): Update plugin resolution test (#21909) 2026-01-31 10:41:06 +01:00
Mykola Mokhnach 59ef8af269 feat(relaxed-caps-plugin): Migrate to typescript (#21908) 2026-01-31 10:31:39 +01:00
renovate[bot] 6461188ba8 chore(eslint-config-appium-ts): update dependency @eslint/compat to v2.0.2 (#21907)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-31 08:41:04 +00:00
Kazuaki Matsuo 971c584a17 chore(docs): update openjs foundation copyright format (#21906)
* chore(docs): update openjs foundation copyright format

* remove extra space
2026-01-30 23:10:14 -08:00
renovate[bot] 4d8dec1c91 chore(universal-xml-plugin): update dependency fast-xml-parser to v5.3.4 (#21904)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-30 12:26:18 +00:00
renovate[bot] eb344f0225 chore(base-driver): update dependency asyncbox to v6.1.0 (#21899)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-29 10:33:03 +00:00
github-actions[bot]andmykola-mokhnach 3cdacfcdbe docs(appium): Update documentation translations (#21901)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-01-29 08:47:27 +02:00
Mykola Mokhnach d43f749fc7 feat(schema): Migrate to typescript (#21900) 2026-01-28 21:32:02 +01:00
renovate[bot] 5a736fba08 chore(types): update dependency type-fest to v5.4.2 (#21898)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-28 18:54:09 +01:00
renovate[bot] 7c99e88fcf chore(support): update dependency teen_process to v4.0.9 (#21897)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-28 17:38:09 +00:00
Mykola Mokhnach 75ae6145c2 feat(universal-xml-plugin): Migrate to typescript (#21894) 2026-01-28 18:38:04 +01:00
renovate[bot] 31f4f298e1 chore(support): update dependency axios to v1.13.4 (#21896)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-28 13:10:56 +00:00
Navin Chandra b013a548f0 docs(appium): update lambdatest to TestMu AI (#21893)
* update lambdatest to TestMu AI

* revert ja/zh changes

* revert textual changes

* revert blogposts
2026-01-28 12:40:12 +02:00
github-actions[bot]andmykola-mokhnach c5053e2248 docs(appium): Update documentation translations (#21895)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-01-27 22:16:05 -08:00
Kazuaki Matsuo 0e84047ab3 docs(appium): add branch example (#21890)
* docs(appium): add branch example

Add instructions for installing a specific branch of the XCUITest driver.

* Update extensions.md
2026-01-27 12:48:22 -08:00
renovate[bot] e9255d8b8e chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.54.0 (#21892)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-27 17:04:05 +00:00
renovate[bot] 98214795fe chore(docutils): update dependency mkdocs-git-revision-date-localized-plugin to v1.5.1 (#21891)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-27 13:58:46 +00:00
Jonathan Lipps 3c70437da4 chore: publish 2026-01-27 08:08:28 +09:00
Jonathan Lipps f7b20335ea chore: publish
- appium@3.2.0
 - @appium/base-driver@10.2.0
 - @appium/base-plugin@3.0.6
 - @appium/docutils@2.2.1
 - @appium/driver-test-support@1.0.6
 - @appium/eslint-config-appium-ts@3.0.0
 - @appium/execute-driver-plugin@5.1.0
 - @appium/fake-driver@6.0.2
 - @appium/fake-plugin@4.0.6
 - @appium/images-plugin@4.1.0
 - @appium/logger@2.0.4
 - @appium/opencv@4.1.0
 - @appium/plugin-test-support@1.0.5
 - @appium/relaxed-caps-plugin@2.0.2
 - @appium/schema@1.0.1
 - @appium/storage-plugin@1.0.5
 - @appium/strongbox@1.0.1
 - @appium/support@7.0.5
 - @appium/test-support@4.0.5
 - @appium/types@1.2.0
 - @appium/universal-xml-plugin@2.0.4
2026-01-27 07:59:26 +09:00
renovate[bot] 8b9597b0e5 chore(support): update dependency axios to v1.13.3 (#21889)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-26 08:25:32 +01:00
renovate[bot] 556e90be7e chore(storage-plugin): update dependency lru-cache to v11.2.5 (#21888)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-26 08:25:23 +01:00
Mykola Mokhnach ab8ee41e79 feat(execute-driver-plugin): Migrate to typescript (#21887) 2026-01-25 22:52:21 +01:00
renovate[bot] 028a4274e1 chore(strongbox): update dependency env-paths to v4 (#21886)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-25 12:13:20 +02:00
renovate[bot] 9a4e5c77ac chore(eslint-config-appium-ts): update dependency @stylistic/eslint-plugin to v5.7.1 (#21885)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-24 13:48:44 +00:00
renovate[bot] cafb9bf089 chore(support): update dependency teen_process to v4.0.8 (#21884)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 14:45:37 +00:00
renovate[bot] cdfe8ddc48 chore(base-driver): update dependency asyncbox to v6.0.1 (#21879)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 09:11:19 +00:00
Mykola Mokhnach 5ff00a0a5c chore: Make sure tests are never included into published dist (#21883) 2026-01-23 08:13:36 +01:00
Mykola Mokhnach fec5f3a377 feat(opencv): Migrate to typescript (#21881) 2026-01-23 06:54:29 +01:00
Edgars Eglītis 5e5b76cf6b chore(deps): update asyncbox to v6 (#21880) 2026-01-22 20:17:20 +02:00
renovate[bot] efd13358cc chore(workflows): update peter-evans/create-pull-request action to v8.1.0 (#21878)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 09:40:28 +00:00
renovate[bot] 17eb3cac86 chore(deps): update dependency prettier to v3.8.1 (#21877)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 06:43:28 +00:00
dependabot[bot] 4419664ffd chore(deps): bump the npm_and_yarn group across 16 directories with 1 update (#21875)
Bumps the npm_and_yarn group with 1 update in the / directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/appium directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/base-driver directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/docutils directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/driver-test-support directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/execute-driver-plugin directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/fake-driver directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/fake-plugin directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/images-plugin directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/logger directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/opencv directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/relaxed-caps-plugin directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/storage-plugin directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/support directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/test-support directory: [lodash](https://github.com/lodash/lodash).
Bumps the npm_and_yarn group with 1 update in the /packages/universal-xml-plugin directory: [lodash](https://github.com/lodash/lodash).


Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

Updates `lodash` from 4.17.21 to 4.17.23
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-22 08:36:09 +02:00
renovate[bot] 4be29e49b5 chore(fake-driver): update dependency asyncbox to v5 (#21874)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-21 11:34:31 +02:00
renovate[bot] f115ebed49 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.53.1 (#21871)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-20 12:41:13 +00:00
Edgars Eglītis beb9da3320 chore: run npm audit fix (#21869) 2026-01-19 11:29:00 +02:00
Mykola Mokhnach 7c9d1363a9 test(images-plugin): Migrate tests to typescript (#21868) 2026-01-18 20:53:54 +01:00
Kazuaki Matsuo 5e28714442 fix: apply npm run lint:fix (#21867) 2026-01-18 09:04:01 -08:00
Mykola Mokhnach 14507371f7 feat(images-plugin): Migrate to typescript (#21865) 2026-01-18 16:10:48 +01:00
renovate[bot] 384afc77ff chore(execute-driver-plugin): update dependency webdriverio to v9.23.2 (#21866)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-18 12:59:27 +00:00
Kazuaki Matsuo 77c9b58989 feat(eslint-config-appium-ts): add unicorn/prefer-node-protocol with warn (#21864)
* feat(eslint-config-appium-ts): add unicorn/prefer-node-protocol with warn

* chore: remvoe unicorn from test files block
2026-01-18 01:28:25 -08:00
renovate[bot] 9500bd17e3 chore(deps): update dependency @types/node to v24.10.9 (#21862)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-16 08:49:10 +00:00
Edgars Eglītis 1f9e786df2 chore: update lockfile to v3 (#21861) 2026-01-16 09:12:21 +02:00
renovate[bot] a605032f2d chore(deps): update dependency prettier to v3.8.0 (#21860)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-15 08:43:22 +00:00
dependabot[bot] bfa33c6bf7 chore(deps): bump undici in the npm_and_yarn group across 1 directory (#21859)
Bumps the npm_and_yarn group with 1 update in the / directory: [undici](https://github.com/nodejs/undici).


Updates `undici` from 6.21.3 to 6.23.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v6.21.3...v6.23.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.23.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-15 08:43:10 +02:00
renovate[bot] 99d663c930 chore(types): update dependency type-fest to v5.4.1 (#21858)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 18:46:18 +00:00
renovate[bot] 70b383deaa chore(eslint-config-appium-ts): update dependency eslint-plugin-n to v17.23.2 (#21857)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 13:10:03 +00:00
renovate[bot] 43002e3286 chore(deps): update dependency @types/node to v24.10.8 (#21856)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 09:12:05 +00:00
renovate[bot] 2f949e581e chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.53.0 (#21855)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-13 21:13:39 +00:00
renovate[bot] 27419248e4 chore(docutils): update dependency diff to v8.0.3 (#21854)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-13 16:35:44 +00:00
renovate[bot] a5bee22a07 chore(deps): update dependency @types/node to v24.10.7 (#21852)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-12 08:24:04 +00:00
renovate[bot] cfaaf768a5 chore(deps): update definitelytyped (#21850)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-10 17:49:01 +00:00
renovate[bot] 0508626518 chore(eslint-config-appium-ts): update dependency @eslint/compat to v2.0.1 (#21851)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-10 12:54:41 +00:00
renovate[bot] 9dc0030fb9 chore(eslint-config-appium-ts): update dependency @stylistic/eslint-plugin to v5.7.0 (#21849)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-09 13:51:33 +00:00
renovate[bot] 002f8fce7f chore(base-driver): update dependency body-parser to v2.2.2 (#21847)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-08 08:29:58 +00:00
github-actions[bot]andmykola-mokhnach 57ae03f899 docs(appium): Update documentation translations (#21846)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2026-01-08 07:48:22 +01:00
Edgars Eglītis df5a7da467 chore(deps): update qs to 6.14.1 (#21845) 2026-01-07 08:58:05 +02:00
renovate[bot] 8de688f020 chore(storage-plugin): update dependency ws to v8.19.0 (#21843)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-06 16:50:47 +00:00
renovate[bot] d4fcd81aed chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.52.0 (#21842)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-06 13:03:36 +00:00
renovate[bot] aa90b9a840 chore(execute-driver-plugin): update dependency webdriverio to v9.23.0 (#21841)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-04 12:46:13 +00:00
Edgars Eglītis 1f6c82ce6d docs: add SeleniumConf & AppiumConf 2026 banner (#21840) 2026-01-01 16:57:16 +02:00
Kazuaki Matsuo 529aeb48f1 fix(appium): appium symlink behavior across drivers/plugins installations (#21837)
* fix(appium): appium symlink behavior with plugins

* add unit tests

* add invalid format case
2025-12-30 13:03:21 -08:00
renovate[bot] 04d9520f76 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.51.0 (#21838)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-30 14:52:30 +00:00
renovate[bot] 6098bdeb92 chore(execute-driver-plugin): update dependency webdriverio to v9.22.0 (#21834)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-24 12:40:57 +00:00
Kazuaki Matsuo a6c4fad26b chore: bump teen-process (#21831)
* chore: bump teen-process

* remove renovate

* update tests

* update mock in e2e

* remove the custom rule in renovate

* remove unused tpMock

* remove Custom Rules completely
2025-12-23 09:30:32 -08:00
renovate[bot] 8e36bfe56d chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.50.1 (#21833)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-23 13:35:20 +00:00
renovate[bot] fdb95389b1 chore(driver-test-support): update dependency chai to v6.2.2 (#21832)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-23 12:01:34 +01:00
renovate[bot] 30adda0092 chore(test-support): update dependency sinon to v21.0.1 (#21828)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-20 17:06:05 +00:00
renovate[bot] 441c4e5572 chore(docutils): update dependency mkdocs-material to v9.7.1 (#21827)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-19 15:51:06 +00:00
renovate[bot] 7235392585 chore(fake-driver): update dependency asyncbox to v4 (#21826)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-18 08:33:31 +02:00
Mykola Mokhnach ce91686852 feat(appium): Add repository links to verbose extensions list (#21813) 2025-12-17 16:01:38 +01:00
renovate[bot] cbf7e4dfd6 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.50.0 (#21825)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-17 10:56:05 +00:00
renovate[bot] a9a66d7cf5 chore(deps): update dependency serve-static to v2.2.1 (#21824)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-17 07:47:48 +00:00
Edgars Eglītis 2bd2bb7667 chore(renovate): remove custom Appium groups (#21821) 2025-12-16 17:40:50 +02:00
Edgars Eglītis 56a45a5244 chore(deps): update read-pkg to v10 (#21820) 2025-12-16 11:54:31 +02:00
Edgars Eglītis d9e4437c55 chore(deps): remove wrap-ansi (#21818)
* chore(deps): remove wrap-ansi

* remove unused lodash import
2025-12-15 20:28:10 +02:00
Edgars Eglītis e9a6e5425c fix(scripts): properly import log-symbols in scripts (#21819) 2025-12-15 17:17:24 +02:00
Edgars Eglītis 053a88bac1 chore(deps): update log-symbols to v7 (#21816) 2025-12-15 14:13:29 +02:00
github-actions[bot]andmykola-mokhnach cae84898d5 docs(appium): Update documentation translations (#21815)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2025-12-14 19:03:22 -08:00
Edgars Eglītis dcfaa88830 fix(docs): add missing verbose flag for CLI list command (#21814) 2025-12-15 00:02:39 +02:00
renovate[bot] 1143896b97 chore(deps): update dependency @types/node to v24.10.4 (#21812)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-14 12:51:52 +00:00
renovate[bot] a90797683c chore(universal-xml-plugin): update dependency fast-xml-parser to v5.3.3 (#21809)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-14 01:36:04 +00:00
renovate[bot] cc42206b4d chore(support): update dependency teen_process to v3.0.6 (#21808)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 20:26:48 +00:00
renovate[bot] e9ca1f5dd1 chore(eslint-config-appium-ts): update eslint-related packages to v9.39.2 (#21811)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 16:40:04 +00:00
Edgars Eglītis a5ba1c5efb chore: fix all lint issues (#21810)
* chore: fix all lint issues

* fix unit tests

* apply copilot suggestion
2025-12-13 15:24:16 +02:00
Edgars Eglītis b0b219aa01 feat(eslint-config-appium-ts)!: modernize ESLint config (#21781) 2025-12-12 09:07:14 +02:00
github-actions[bot]andmykola-mokhnach 204a07f5a4 docs(appium): Update documentation translations (#21807)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2025-12-11 21:22:03 -08:00
Srinivasan SekarandSaikrishna321 aeef6afb8b docs(appium): Add LambdaTest as Development partner (#21783)
Co-authored-by: Saikrishna321 <saikrishna321@yahoo.com>
2025-12-11 08:58:15 -08:00
Edgars Eglītis 8093c2658c chore(deps): update pkg-dir to v8 and rename it (#21806)
* chore(deps): update pkg-dir to v8 and rename it

* address copilot comments

* remove uuid cache keys since we always pass cwd
2025-12-11 17:28:10 +02:00
Edgars Eglītis 5b74a7653c chore(deps): update get-stream to v9 (#21805) 2025-12-11 16:16:07 +02:00
Edgars Eglītis 671c37a89c chore(deps): update get-port to v7 (#21804) 2025-12-11 15:59:00 +02:00
Edgars Eglītis cb2d6eef6c chore(deps): update env-paths to v3 (#21803) 2025-12-11 15:41:17 +02:00
Edgars Eglītis 183a2683b6 chore(deps): update supports-color to v10 (#21802) 2025-12-11 15:06:57 +02:00
Edgars Eglītis ee3d935899 chore(docutils): remove chalk (#21801) 2025-12-11 13:26:24 +02:00
Edgars Eglītis 591e678e6f chore(deps): remove source-map-support (#21800) 2025-12-11 12:50:26 +02:00
renovate[bot] 0cc3acf5e3 chore(support): update dependency teen_process to v3.0.5 (#21799)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 12:37:36 +02:00
Edgars Eglītis b20d36f979 chore(renovate): update config (#21797)
* chore: remove unused packages from Renovate blocklist

* chore: other Renovate config adjustments
2025-12-11 12:30:42 +02:00
renovate[bot] 146bc98876 chore(deps): update dependency @types/node to v24.10.3 (#21796)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 11:21:29 +01:00
renovate[bot] 477b837b1c chore(workflows): update peter-evans/create-pull-request action to v8 (#21795)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-10 13:09:12 +02:00
renovate[bot] ac78fedf43 chore(eslint-config-appium-ts): update dependency typescript-eslint to v8.49.0 (#21794)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-09 18:31:24 +00:00
renovate[bot] b0e12852f0 chore(deps): update dependency @types/node to v24.10.2 (#21793)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-09 12:59:31 +00:00
Mykola Mokhnach 274b28cb29 chore(test-support): Mark the module as deprecated (#21791) 2025-12-08 18:34:04 +01:00
renovate[bot] cb9324cda4 chore(types): update dependency type-fest to v5.3.1 (#21792)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-08 14:48:55 +00:00
Karl BaumgartnerandKarl Baumgartner a4b47c02c6 feat(base-driver): add ability to supply custom headers for proxy (#21790)
Signed-off-by: Karl Baumgartner <178656887+karlbaumg@users.noreply.github.com>
Co-authored-by: Karl Baumgartner <178656887+karlbaumg@users.noreply.github.com>
2025-12-07 22:11:53 +01:00
renovate[bot] adf90ee746 chore(appium): update dependency winston to v3.19.0 (#21789)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-07 10:42:25 +01:00
renovate[bot] 653b95965a chore(workflows): update peter-evans/create-pull-request action to v7.0.11 (#21788)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-06 13:35:51 +00:00
github-actions[bot]andmykola-mokhnach 18864bfcac docs(appium): Update documentation translations (#21787)
Co-authored-by: mykola-mokhnach <7767781+mykola-mokhnach@users.noreply.github.com>
2025-12-05 20:50:08 -08:00
Edgars Eglītis 6ae5930346 docs: move Appium MCP to official tools (#21786) 2025-12-05 23:16:18 +02:00
820 changed files with 52940 additions and 61565 deletions
+10
View File
@@ -0,0 +1,10 @@
<!-- CODEGRAPH_START -->
## CodeGraph
In repositories indexed by CodeGraph (a `.codegraph/` directory exists at the repo root), reach for it BEFORE grep/find or reading files when you need to understand or locate code:
- **MCP tool** (when available): `codegraph_explore` answers most code questions in one call — the relevant symbols' verbatim source plus the call paths between them, including dynamic-dispatch hops grep can't follow. Name a file or symbol in the query to read its current line-numbered source. If it's listed but deferred, load it by name via tool search.
- **Shell** (always works): `codegraph explore "<symbol names or question>"` prints the same output.
If there is no `.codegraph/` directory, skip CodeGraph entirely — indexing is the user's decision.
<!-- CODEGRAPH_END -->
+17
View File
@@ -0,0 +1,17 @@
{
"permissions": {
"allow": ["mcp__codegraph__*"]
},
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "codegraph prompt-hook"
}
]
}
]
}
}
+5
View File
@@ -0,0 +1,5 @@
# CodeGraph data files — local to each machine, not for committing.
# Ignore everything in .codegraph/ except this file itself, so transient
# files (the database, daemon.pid, sockets, logs) never show up in git.
*
!.gitignore
+9
View File
@@ -0,0 +1,9 @@
{
"mcpServers": {
"codegraph": {
"type": "stdio",
"command": "codegraph",
"args": ["serve", "--mcp", "--path", "."]
}
}
}
+1
View File
@@ -8,6 +8,7 @@ end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
[*.md]
trim_trailing_whitespace = false
-2
View File
@@ -29,8 +29,6 @@ targets:
path: ./packages/fake-driver
- type: npm
path: ./packages/support
- type: npm
path: ./packages/test-support
- type: npm
path: ./packages/types
- type: npm
+8 -9
View File
@@ -3,7 +3,6 @@ description: Create a new bug report.
title: '🐞 bug: <title>'
labels: [Bug, Needs Triage]
body:
- type: markdown
attributes:
value: ':stop_sign: _Make sure you are reporting an issue. For general questions, please use [http://discuss.appium.io](http://discuss.appium.io)._'
@@ -13,9 +12,9 @@ body:
label: Is there an existing issue for this?
description: 'Please [search :mag: the issues](https://github.com/appium/appium/issues) to check if this bug has already been reported.'
options:
- label: I have searched the existing issues
required: true
- label: I have searched the existing issues
required: true
- type: input
attributes:
label: Appium Version
@@ -49,7 +48,7 @@ body:
description: |
You can retrieve the latest server/driver/plugin version number by running `npm info <package-name> version`. If you are not up to date, please try to reproduce your issue after updating all affected components.
options:
- label: I confirm the issue is still reproducible with the latest component versions
- label: I confirm the issue is still reproducible with the latest component versions
- type: textarea
attributes:
@@ -82,10 +81,10 @@ body:
:warning: _Remember to redact or remove any sensitive information!_
value: |
- Debug details (`appium --show-debug-info`):
- Last component version(s) which did _not_ exhibit the problem:
- Platform and version of device under test:
- Real device or emulator/simulator:
- Debug details (`appium --show-debug-info`):
- Last component version(s) which did _not_ exhibit the problem:
- Platform and version of device under test:
- Real device or emulator/simulator:
- type: textarea
attributes:
+1 -1
View File
@@ -1,5 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: ❓ Question
- name: ❓ Question
url: https://discuss.appium.io/
about: Please use the Appium forum for any questions.
+1 -2
View File
@@ -1,9 +1,8 @@
name: 💡 Feature Request
description: Suggest an idea for this project.
title: "💡 feat: <title>"
title: '💡 feat: <title>'
labels: [Enhancement]
body:
- type: textarea
attributes:
label: Is your feature request related to a problem?
+2 -2
View File
@@ -20,12 +20,12 @@ runs:
using: composite
steps:
- name: Use Node.js ${{ inputs.node-version }}
uses: actions/setup-node@v6
uses: actions/setup-node@v7.0.0
with:
node-version: ${{ inputs.node-version }}
cache: npm
- name: SocketDev Security Check
uses: SocketDev/action@v1
uses: SocketDev/action@v1.3.2
with:
mode: firewall-free
- name: Install dependencies
+9
View File
@@ -0,0 +1,9 @@
# Copilot Instructions
## Code Review
When reviewing JavaScript or TypeScript changes, check new uses of Node.js built-in APIs against the supported Node.js versions declared in package.json#engines.node. The current supported range is ^20.19.0 || ^22.12.0 || >=24.0.0.
For each new Node.js built-in API or option, verify that it exists and is stable across all supported Node.js versions. If any supported version lacks the API, only supports it experimentally, or has different behavior, leave a review comment and suggest using the existing dependency, adding a fallback, avoiding the API, or raising the engine requirement.
Example: util.styleText exists in Node.js 20.12+, but only became stable in Node.js 22.13.0 and 23.5.0. Because this repository supports Node.js 20.19.0 and 22.12.0, replacing a color library with util.styleText should be flagged unless the project explicitly accepts relying on a non-stable API for those supported versions.
+10 -5
View File
@@ -73,6 +73,11 @@ labels:
matcher:
files: ['packages/eslint-config-appium-ts/**']
- label: '@appium/oxc-config'
sync: true
matcher:
files: ['packages/oxc-config/**']
- label: '@appium/execute-driver-plugin'
sync: true
matcher:
@@ -118,6 +123,11 @@ labels:
matcher:
files: ['packages/schema/**']
- label: '@appium/semantic-release-config'
sync: true
matcher:
files: ['packages/semantic-release-config/**']
- label: '@appium/support'
sync: true
matcher:
@@ -128,11 +138,6 @@ labels:
matcher:
files: ['packages/strongbox/**']
- label: '@appium/test-support'
sync: true
matcher:
files: ['packages/test-support/**']
- label: '@appium/tsconfig'
sync: true
matcher:
+1 -1
View File
@@ -13,4 +13,4 @@ jobs:
name: Auto-Label PRs
runs-on: ubuntu-latest
steps:
- uses: fuxingloh/multi-labeler@v4
- uses: fuxingloh/multi-labeler@v5.0.0
+20 -20
View File
@@ -6,7 +6,7 @@ on:
# this list of paths could potentially impact the build
paths:
- '**/tsconfig*.json'
- 'packages/base-driver/static/**/*'
- 'packages/base-driver/test-fixtures/**/*'
- 'packages/*/test/**'
- 'packages/*/bin'
- 'packages/**/*.ts'
@@ -15,10 +15,9 @@ on:
- 'package*.json'
- 'lerna.json'
- '.npmrc'
- '.mocharc.js'
- '.github/workflows/build.yml' # this file
- '.eslintrc'
- '.eslintignore'
- 'oxlint.config.mjs'
- 'oxfmt.config.mjs'
- '!**/sample-code/**'
- '!packages/*/docs/**'
pull_request:
@@ -26,7 +25,7 @@ on:
- master
paths:
- '**/tsconfig*.json'
- 'packages/base-driver/static/**/*'
- 'packages/base-driver/test-fixtures/**/*'
- 'packages/*/test/**'
- 'packages/*/bin'
- 'packages/**/*.ts'
@@ -35,10 +34,9 @@ on:
- 'package*.json'
- 'lerna.json'
- '.npmrc'
- '.mocharc.js'
- '.github/workflows/build.yml' # this file
- '.eslintrc'
- '.eslintignore'
- 'oxlint.config.mjs'
- 'oxfmt.config.mjs'
- '!**/sample-code/**'
- '!packages/*/docs/**'
@@ -61,7 +59,7 @@ jobs:
outputs:
packages: ${{ steps.discover-packages.outputs.packages }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Discover packages with e2e tests
id: discover-packages
run: |
@@ -103,14 +101,14 @@ jobs:
test-smoke:
needs:
- prepare_matrix
- prepare_matrix
name: Smoke Tests
strategy:
matrix:
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Setup, install and build
uses: ./.github/actions/setup-build
with:
@@ -122,14 +120,14 @@ jobs:
test-unit:
needs:
- prepare_matrix
- prepare_matrix
name: Unit Tests
strategy:
matrix:
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Setup, install and build
uses: ./.github/actions/setup-build
with:
@@ -141,14 +139,14 @@ jobs:
test-types:
needs:
- prepare_matrix
- prepare_matrix
name: Type Tests
strategy:
matrix:
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Setup, install and build
uses: ./.github/actions/setup-build
with:
@@ -160,8 +158,8 @@ jobs:
test-e2e:
needs:
- prepare_matrix
- prepare_e2e_packages
- prepare_matrix
- prepare_e2e_packages
name: E2E Tests - ${{ matrix.package_dir }} (Node ${{ matrix.node-version }})
if: ${{ github.event_name == 'pull_request' }}
strategy:
@@ -171,7 +169,7 @@ jobs:
package_dir: ${{ fromJSON(needs.prepare_e2e_packages.outputs.packages) }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Setup, install and build
uses: ./.github/actions/setup-build
with:
@@ -188,12 +186,14 @@ jobs:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Setup and install (no build)
uses: ./.github/actions/setup-build
with:
node-version: lts/*
install-command: npm ci
run-build: 'false'
- name: ESLint
- name: Lint
run: npm run lint:ci
- name: Format check
run: npm run format:check
+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v6
uses: actions/checkout@v7.0.1
- name: Cleanup
run: |
+3 -3
View File
@@ -21,9 +21,9 @@ jobs:
project_name: appium-inspector
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Use Node.js LTS
uses: actions/setup-node@v6
uses: actions/setup-node@v7.0.0
with:
node-version: lts/*
cache: 'npm'
@@ -36,7 +36,7 @@ jobs:
CROWDIN_PROJECT_ID: ${{ vars[matrix.project_id_var] }}
CROWDIN_TOKEN: ${{ secrets.CROWDIN_DOCS_TOKEN }}
- name: Post to Slack for ${{ matrix.project_name }}
uses: slackapi/slack-github-action@v2.1.1
uses: slackapi/slack-github-action@v4.0.0
with:
errors: true
webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
@@ -12,11 +12,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
with:
persist-credentials: false
- name: Use Node.js LTS
uses: actions/setup-node@v6
uses: actions/setup-node@v7.0.0
with:
node-version: lts/*
cache: 'npm'
@@ -29,7 +29,7 @@ jobs:
CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_DOCS_PROJECT_ID }}
CROWDIN_TOKEN: ${{ secrets.CROWDIN_DOCS_TOKEN }}
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.9
uses: peter-evans/create-pull-request@v8.1.1
with:
token: ${{ github.token }}
commit-message: 'docs(appium): Update documentation translations'
@@ -15,9 +15,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Use Node.js LTS
uses: actions/setup-node@v6
uses: actions/setup-node@v7.0.0
with:
node-version: lts/*
cache: 'npm'
+5 -5
View File
@@ -14,13 +14,13 @@ jobs:
outputs:
versions: ${{ steps.generate-matrix.outputs.lts }}
steps:
- name: Select all current LTS versions of Node.js
id: generate-matrix
uses: msimerson/node-lts-versions@v1
- name: Select all current LTS versions of Node.js
id: generate-matrix
uses: msimerson/node-lts-versions@v2.0.2
check:
needs:
- prepare_matrix
- prepare_matrix
name: Check
runs-on: ${{ matrix.os }}
strategy:
@@ -29,7 +29,7 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v6
uses: actions/setup-node@v7.0.0
with:
node-version: ${{ matrix.node-version }}
- name: Install Appium
+2 -2
View File
@@ -37,9 +37,9 @@ jobs:
name: Docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Install dependencies (Node.js)
uses: bahmutov/npm-install@v1
uses: bahmutov/npm-install@v1.12.1
with:
useRollingCache: true
install-command: npm ci
+2 -2
View File
@@ -13,11 +13,11 @@ jobs:
env:
FOSSA_API_KEY: ${{secrets.FOSSA_API_KEY}}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
with:
ref: master
- name: Install dependencies
uses: bahmutov/npm-install@v1
uses: bahmutov/npm-install@v1.12.1
- name: Install fossa-cli
run: |
curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install-latest.sh | bash
+3 -3
View File
@@ -14,9 +14,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Use Node.js LTS
uses: actions/setup-node@v6
uses: actions/setup-node@v7.0.0
with:
node-version: lts/*
cache: 'npm'
@@ -29,7 +29,7 @@ jobs:
# GITHUB_TOKEN is optional - if not provided, uses unauthenticated requests (rate limited)
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Post to Slack
uses: slackapi/slack-github-action@v2.1.1
uses: slackapi/slack-github-action@v4.0.0
with:
errors: true
webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
+137
View File
@@ -0,0 +1,137 @@
name: Appium Server Release
on:
workflow_dispatch:
inputs:
dry_run:
description: 'Dry run (no publishing or tagging)'
required: true
type: boolean
default: true
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
jobs:
release:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master' && contains(fromJSON('["mykola-mokhnach", "jlipps", "eglitise", "KazuCocoa"]'), github.actor)
steps:
- name: Checkout repository
uses: actions/checkout@v7.0.1
with:
fetch-depth: 0
- name: Configure git user
run: |
git config user.name "github-actions"
git config user.email "github-actions@github.com"
- name: Setup Node and install deps (LTS)
uses: ./.github/actions/setup-build
with:
node-version: lts/*
install-command: npm ci
run-build: 'true'
- name: Run Lerna publish
env:
# for lerna createRelease
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DRY_RUN: ${{ inputs.dry_run }}
run: |
set -euo pipefail
if [ "$DRY_RUN" = "true" ]; then
echo "Running lerna publish in dry-run mode"
printf "n\n" | npx lerna version --exact --no-git-tag-version --no-push
else
echo "Running lerna publish for real"
set +e
release_output="$(npm run release -- --yes 2>&1)"
release_exit_code=$?
set -e
printf '%s\n' "$release_output"
if [ $release_exit_code -eq 0 ]; then
exit 0
fi
if [[ "$release_output" == *"fatal: tag '"*"' already exists"* ]]; then
existing_tag="$(printf '%s\n' "$release_output" | sed -n "s/.*fatal: tag '\\([^']*\\)' already exists.*/\\1/p" | head -n 1)"
if [ -z "$existing_tag" ]; then
echo "Detected existing tag failure, but could not parse tag name"
exit $release_exit_code
fi
echo "Detected existing tag failure for ${existing_tag}; attempting scoped publish recovery from tagged commit"
git fetch --tags --force origin
tagged_commit="$(git rev-list -n 1 "$existing_tag")"
if [ -z "$tagged_commit" ]; then
echo "Tag ${existing_tag} was not found after fetching tags"
exit $release_exit_code
fi
git checkout "$tagged_commit"
missing=()
for pkg_json in packages/*/package.json; do
if [ ! -f "$pkg_json" ]; then
continue
fi
if [ "$(jq -r '.private // false' "$pkg_json")" = "true" ]; then
continue
fi
pkg_name="$(jq -r '.name // empty' "$pkg_json")"
pkg_version="$(jq -r '.version // empty' "$pkg_json")"
if [ -z "$pkg_name" ] || [ -z "$pkg_version" ]; then
echo "Skipping malformed package manifest: $pkg_json"
continue
fi
pkg_spec="${pkg_name}@${pkg_version}"
if ! npm view "$pkg_spec" version >/dev/null 2>&1; then
missing+=("$pkg_spec")
fi
done
if [ ${#missing[@]} -gt 0 ]; then
echo "Missing package versions on npm before scoped recovery:"
printf ' - %s\n' "${missing[@]}"
echo "Publishing missing packages one-by-one with scope"
for pkg_spec in "${missing[@]}"; do
pkg_name="${pkg_spec%@*}"
echo "Publishing ${pkg_name}"
set +e
npx lerna publish from-package --yes --scope "$pkg_name"
scoped_exit_code=$?
set -e
if [ $scoped_exit_code -ne 0 ]; then
echo "Scoped publish exited non-zero for ${pkg_name}; will verify on npm"
fi
done
final_missing=()
for pkg_spec in "${missing[@]}"; do
if ! npm view "$pkg_spec" version >/dev/null 2>&1; then
final_missing+=("$pkg_spec")
fi
done
if [ ${#final_missing[@]} -gt 0 ]; then
echo "Recovery incomplete after scoped retries. Still missing:"
printf ' - %s\n' "${final_missing[@]}"
exit $release_exit_code
fi
fi
echo "All publishable workspace package versions are present on npm; treating recovery as successful."
else
echo "Release failed and no known recovery condition matched"
exit $release_exit_code
fi
fi
+41
View File
@@ -0,0 +1,41 @@
# This job only publishes new releases on GitHub and updates the changelog, without publishing to NPM.
# It can be used if the standard release workflow failed and *only* published to NPM.
name: Appium Server Version (Without NPM Publish)
on:
workflow_dispatch:
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
jobs:
version:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master' && contains(fromJSON('["mykola-mokhnach", "jlipps", "eglitise", "KazuCocoa"]'), github.actor)
steps:
- name: Checkout repository
uses: actions/checkout@v7.0.1
with:
fetch-depth: 0
- name: Configure git user
run: |
git config user.name "github-actions"
git config user.email "github-actions@github.com"
- name: Setup Node and install deps (LTS)
uses: ./.github/actions/setup-build
with:
node-version: lts/*
install-command: npm ci
run-build: 'true'
- name: Run Lerna version
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npx lerna version --exact --yes
+1 -1
View File
@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check for "On Hold" label
uses: egmacke/action-check-label@v4
uses: egmacke/action-check-label@v5
with:
label: On Hold
state: absent
+22 -28
View File
@@ -1,38 +1,32 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
name: Publish docs
on:
workflow_dispatch:
workflow_run:
workflows: ['Appium Server Release']
types:
- completed
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v6
- run: |
git config user.name github-actions
git config user.email github-actions@github.com
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies (Node.js)
uses: bahmutov/npm-install@v1
with:
useRollingCache: true
install-command: npm ci
- name: Install dependencies (Python)
run: PIP_BREAK_SYSTEM_PACKAGES=1 pip install -r packages/docutils/requirements.txt
- name: Publish docs
run: |
cd packages/appium
npm run publish:docs
- uses: actions/checkout@v7.0.1
- run: |
git config user.name github-actions
git config user.email github-actions@github.com
- name: Setup Node and install deps (LTS)
uses: ./.github/actions/setup-build
with:
node-version: lts/*
install-command: npm ci
run-build: 'true'
- name: Install dependencies (Python)
run: npm run install-docs-deps
- name: Fetch gh-pages
run: |
git fetch origin gh-pages:gh-pages || true
- name: Publish docs
run: |
npm run docs:publish
+2 -2
View File
@@ -23,8 +23,8 @@ jobs:
name: Check Renovate Configs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7.0.1
- name: Validate Renovate Config
uses: rinchsan/renovate-config-validator@v0.2.0
uses: rinchsan/renovate-config-validator@v0.2.1
with:
pattern: '{.renovaterc.json,renovate/default.json}'
-10
View File
@@ -1,10 +0,0 @@
module.exports = {
'*.(js|ts)': ['eslint --fix', 'prettier --write'],
'appium-config-schema.js': () => [
'npm run --workspace=./packages/schema build',
'git add -A packages/schema/lib/appium-config.schema.json',
'npm run --workspace=./packages/types build',
'git add -A packages/types/lib/appium-config.ts',
],
'!(package|package-lock)*.json': ['prettier --write'],
};
+9
View File
@@ -0,0 +1,9 @@
{
"mcpServers": {
"codegraph": {
"type": "stdio",
"command": "codegraph",
"args": ["serve", "--mcp"]
}
}
}
-11
View File
@@ -1,11 +0,0 @@
// @ts-check
'use strict';
module.exports = {
require: ['ts-node/register'],
// forbids use of .only() in CI
forbidOnly: Boolean(process.env.CI),
color: true,
timeout: '5s',
};
-15
View File
@@ -1,15 +0,0 @@
**/node_modules/**
**/build/**
**/fixtures/**
**/*.min.*
**/*.md
package-lock.json
package.json
**/.vscode/**
**/*.html
**/generated/**
# generated
packages/types/lib/appium-config.ts
**/*.hbs
/.nx/workspace-data
+1 -4
View File
@@ -1,9 +1,6 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["github>appium/appium//renovate/default"],
"schedule": [
"after 10pm",
"before 5:00am"
],
"schedule": ["after 10pm", "before 5:00am"],
"timezone": "America/Vancouver"
}
+1 -1
View File
@@ -33,7 +33,6 @@ to driver/client documentation
* [schema](packages/schema/CHANGELOG.md)
* [strongbox](packages/strongbox/CHANGELOG.md)
* [support](packages/support/CHANGELOG.md)
* [test-support](packages/test-support/CHANGELOG.md)
* [tsconfig](packages/tsconfig/CHANGELOG.md)
* [types](packages/types/CHANGELOG.md)
@@ -42,4 +41,5 @@ The changelog links used for these modules lead to the last version of their cha
* [doctor](https://github.com/appium/appium/blob/8daf5e123ac14c8325acf504fb33eb28e1a3dd78/packages/doctor/CHANGELOG.md) ([removal PR](https://github.com/appium/appium/pull/20805))
* [eslint-config-appium](https://github.com/appium/appium/blob/4b3a8c2197a587ec5a2606b662e4e7667a7852cb/packages/eslint-config-appium/CHANGELOG.md) ([removal PR](https://github.com/appium/appium/pull/20856))
* [gulp-plugins](https://github.com/appium/appium/blob/0823f0b60e40395cd1dc3b72cfa3c0092bc81302/packages/gulp-plugins/CHANGELOG.md) ([removal PR](https://github.com/appium/appium/pull/17943))
* [test-support](https://github.com/appium/appium/blob/1a46d7d61ee49c7e82a63687c5647c42ab69513d/packages/test-support/CHANGELOG.md) ([removal PR](https://github.com/appium/appium/pull/22351))
* [typedoc-plugin-appium](https://github.com/appium/appium/blob/d6204b6902074210943d7bbbf72d139b9b170a20/packages/typedoc-plugin-appium/CHANGELOG.md) ([removal PR](https://github.com/appium/appium/pull/19465))
-48
View File
@@ -1,48 +0,0 @@
## Code of Conduct
### What is this code of conduct for?
Appium is a piece of technology, but **the core of the Appium community is the people in it**. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, gender identity and expression, sexual orientation, ability, physical appearance, body size, race, age, socioeconomic status, religion (or lack thereof), or other marginalized aspect of community members. We expect all members of the Appium community to abide by this Code of Conduct whenever interacting in Appium venues (pull requests, GitHub issues, 1-1 or group chat, meetups, conferences, etc...)
### Examples of inappropriate behavior
Because we come from a variety of backgrounds, we don't want to assume that everyone has the same assumptions about what is and isn't appropriate. Here are some examples of inappropriate behavior that are incompatible with our community's ethos:
* Spamming, trolling, intentionally disrupting conversations, or irrelevant solicitation or advertisement
* Making demeaning or discriminatory comments
* Making negative assumptions about someone's background, abilities, or intentions
* Harassing or stalking individuals (online or in person)
* Giving someone unwelcome sexual attention or making unwelcome physical contact (in the case of an IRL event)
* Sharing sexual images or using sexually explicit language
In general: treat others how you would like to be treated, were you in their place. Don't be a jerk. _Do_ ask questions. _Do_ keep conflicts productively focused on technical issues. _Do_ think before you speak; remember that what is perceived as a funny witticism in your group of friends might be hurtful or reinforce hurtful stereotypes in the context of our diverse online community. _Do_ remember that we are all people, not robots, and all equally deserving of sensitivity and respect. (If and when robots join our community, let's treat them with respect too!)
### What will organizers do about inappropriate behavior?
If we notice you doing or saying something inappropriate, an organizer will explain why it's inappropriate and ask you to stop. We won't demonize or vilify you. But please do stop the inappropriate behavior so we can get back to writing and discussing code in a safe environment. If you have philosophical disagreements about what's actually inappropriate, please take them to a separate public or private conversation with an Appium maintainer so we don't turn pull requests into an ethics debate.
If you keep doing unacceptable things, we'll likely ban you, report you to GitHub, or take other appropriate action.
### What if I see or am subject to what feels like inappropriate behavior?
Let us know! Please notify a community organizer as soon as possible. Full contact information is listed in the [Contact Info](#contact-info) section of this document. All communications will be kept strictly confidential, unless otherwise required by law. No issue will be considered too inconsequential or unimportant for us to have a conversation about.
### Contact Info
If you need to report an incident, please contact any of the following organizers directly:
* Isaac Murchie [email](mailto:isaac@saucelabs.com) [twitter](https://twitter.com/imurchie)
* Jonathan Lipps [email](mailto:jlipps@saucelabs.com) [twitter](https://twitter.com/jlipps)
### Credit, License, and Attribution
This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/).
It's inspired among other things by:
* [Citizen Code of Conduct](http://citizencodeofconduct.org/)
* [npmjs](https://www.npmjs.com/policies/conduct)
* [Geek Feminism](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy)
* [Ashe Dryden](http://www.ashedryden.com/blog/codes-of-conduct-101-faq)
* [Model View Culture](https://modelviewculture.com/issues/events)
* [Open Source & Feelings](http://osfeels.com/conduct).
+4
View File
@@ -50,18 +50,22 @@ The current committers are (along with their primary areas(s) of ownership or ma
* [@dan-maor](https://github.com/Dan-Maor) - XCUITest driver and iOS internals
* [@dor-bl](https://github.com/Dor-bl) - DotNet client
* [@Delta456](https://github.com/Delta456) - appium-mcp, iOS support libraries
* [@eglitise](https://github.com/eglitise) - Appium server, Inspector
* [@harsha509](https://github.com/harsha509) - appium-ios-tuntap
* [@jlipps](https://github.com/jlipps) - Appium server, Inspector
* [@kazucocoa](https://github.com/KazuCocoa) - all Appium projects
* [@laolubenson](https://github.com/laolubenson) - DotNet client
* [@mwakizaka](https://github.com/mwakizaka) - XCUITest driver
* [@mykola-mokhnach](https://github.com/mykola-mokhnach) - all Appium projects
* [@navin772](https://github.com/navin772) - appium-mcp, iOS support libraries
* [@rerorero](https://github.com/rerorero) - XCUITest/UIA2 driver
* [@saikrishna321](https://github.com/saikrishna321) - Java client
* [@srinivasantarget](https://github.com/SrinivasanTarget) - Java client
* [@tomriddly](https://github.com/tomriddly) - appium-ios-device
* [@valfirst](https://github.com/valfirst) - Java client
See [Emeritus Contributors](#emeritus-contributors) below for a list of people who formerly made
significant contributions to the project but are no longer actively committing.
-16
View File
@@ -1,16 +0,0 @@
Google Summer of Code Ideas
=====
Appium is excited to participate as a [Google Summer of Code](https://summerofcode.withgoogle.com/) sponsor project. Here's a fun list of ideas that a Summer of Code student participant can use as a foundation for thinking about what to contribute to Appium!
|Idea|Description|
|----|-----------|
|Apple tvOS Support|Our users have been asking for an Appium driver for Apple tvOS apps. Is this possible? We're not entirely sure! Why not be awesome and build it?|
|Test App revamp|Appium uses a number of poorly-designed mobile applications in its own testing. We have to use a variety of apps because we need to test that Appium can automate all the various controls and platform features that mobile vendors provide. Really what we need is one cross-platform app (or one app per platform) that exhibit all and only the features we need to test. This would be a fun project to build some mobile apps used for testing and also demoing Appium at events and in training videos, etc...|
|Tooling and Performance|We haven't instrumented Appium with very many performance metrics, and don't really know if we're missing some low-hanging fruit in terms of performance. Maybe you can help us do that?|
|Babel|We have a lot of repos, and they're all on a really old version of Babel. They all need to stay in sync. How can we make this situation better, and upgrade to the latest and greatest?|
|Unity3d Driver|Historically, Appium hasn't been great at automating games. We don't have any particular support for the frameworks used to create games. Unity is a popular one, for example. What if we could write an Appium driver that talked to an embedded process in a test version of a Unity game, that allowed us to find and interact with 3d elements? It would be amazing! You can also be amazing and lead Appium into this new world.|
|Testing the Internet of Things|Appium's architecture makes it dead simple to integrate drivers for automating new technologies. What about _really_ new technologies like IoT devices? Help to redefine the semantics of the WebDriver protocol for use with IoT, and build a driver for an IoT device to prove it out.|
|Driver for X|Have an idea of something else Appium could automate that it doesn't already? Build a driver for it! This would involve some awesome Node.js code, plus whatever else is needed to integrate with the platform you have in mind.|
Hopefully this gives you some ideas of fun projects that would be substantial and long-lasting contributions to the Appium community.
+4 -4
View File
@@ -199,11 +199,11 @@ contribution of project development and leadership!
</p>
<p align="center">
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
<a href="https://www.testmuai.com">
<picture>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png" media="(prefers-color-scheme: dark)"/>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png" media="(prefers-color-scheme: light)"/>
<img src="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png" width="300" alt="LambdaTest"/>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-dark.png" media="(prefers-color-scheme: dark)"/>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-light.png" media="(prefers-color-scheme: light)"/>
<img src="packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-dark.png" width="300" alt="TestMu AI (formerly LambdaTest)"/>
</picture>
</a>
</p>
+32 -18
View File
@@ -1,24 +1,38 @@
import tsConfig from '@appium/eslint-config-appium-ts';
import appiumConfig from '@appium/eslint-config-appium-ts';
import {defineConfig, globalIgnores} from 'eslint/config';
export default [
...tsConfig,
// Create a modified config subset for test support files:
// Extract the test file related configs (Mocha plugin and custom rules),
// then override their 'files' property (match by name — resilient to new config entries).
const testFileConfigItems = appiumConfig.filter(
(item) => typeof item?.name === 'string' && item.name.startsWith('Test Files'),
);
const testSupportFiles = ['packages/driver-test-support/lib/**', 'packages/plugin-test-support/lib/**'];
const testSupportConfig = testFileConfigItems.map((item) => ({...item, files: testSupportFiles}));
export default defineConfig([
{
name: 'Base Config',
extends: [appiumConfig],
},
{
...tsConfig.find(({name}) => name === 'Test Files'),
name: 'Test Support',
files: [
'packages/test-support/lib/**',
'packages/driver-test-support/lib/**',
'packages/plugin-test-support/lib/**',
],
extends: [testSupportConfig],
},
{
name: 'Ignores',
ignores: [
'**/build-fixtures/**',
'packages/appium/docs/**/assets/**',
'packages/appium/docs/**/js/**',
'packages/appium/sample-code/**',
],
name: 'Consistent type-only imports (all packages)',
files: ['**/*.{ts,tsx,mtsx}'],
rules: {
'@typescript-eslint/consistent-type-imports': [
'error',
{fixStyle: 'separate-type-imports', prefer: 'type-imports'},
],
},
},
];
globalIgnores([
'**/build-fixtures/**',
'packages/appium/docs/**/assets/**',
'packages/appium/docs/**/js/**',
'packages/appium/sample-code/**',
]),
]);
+2 -1
View File
@@ -14,7 +14,8 @@
"version": {
"conventionalCommits": true,
"createRelease": "github",
"allowBranch": ["master", "appium3"]
"allowBranch": ["master", "appium3"],
"exact": true
}
},
"ignoreChanges": ["**/test/**", "**/*.md"],
+11
View File
@@ -0,0 +1,11 @@
import appiumConfig, {defineConfig, ignorePatterns as appiumIgnorePatterns} from '@appium/oxc-config/oxfmt';
export default defineConfig({
...appiumConfig,
ignorePatterns: [
...appiumIgnorePatterns,
'packages/appium/docs/**',
'packages/schema/lib/appium-config.schema.json',
'packages/types/lib/appium-config.ts',
],
});
+11
View File
@@ -0,0 +1,11 @@
import appiumConfig, {defineConfig, ignorePatterns as appiumIgnorePatterns} from '@appium/oxc-config/oxlint';
export default defineConfig({
extends: [appiumConfig],
ignorePatterns: [
...appiumIgnorePatterns,
'packages/appium/docs/**/assets/**',
'packages/appium/docs/**/js/**',
'packages/appium/sample-code/**',
],
});
+9619 -22344
View File
File diff suppressed because it is too large Load Diff
+58 -76
View File
@@ -4,28 +4,31 @@
"private": true,
"description": "Automation for Apps.",
"keywords": [
"android",
"automation",
"firefoxos",
"ios",
"javascript",
"selenium",
"webdriver",
"ios",
"android",
"firefoxos",
"testing"
"testing",
"webdriver"
],
"homepage": "https://appium.io",
"bugs": {
"url": "https://github.com/appium/appium/issues"
},
"license": "Apache-2.0",
"author": "https://github.com/appium",
"repository": {
"type": "git",
"url": "https://github.com/appium/appium.git"
},
"license": "Apache-2.0",
"author": "https://github.com/appium",
"workspaces": [
"packages/*"
],
"publishConfig": {
"access": "public"
},
"scripts": {
"build": "run-s build:*",
"build:compile": "tsc -b",
@@ -47,9 +50,11 @@
"docs:publish": "npm run -w packages/appium publish:docs",
"doctor": "node ./scripts/doctor-stub.mjs",
"install-docs-deps": "npm run -w packages/appium install-docs-deps",
"lint": "eslint .",
"lint:ci": "eslint --quiet .",
"lint:fix": "run-s \"lint -- --fix\"",
"format": "oxfmt -c oxfmt.config.mjs .",
"format:check": "oxfmt -c oxfmt.config.mjs --check .",
"lint": "oxlint -c oxlint.config.mjs .",
"lint:ci": "oxlint -c oxlint.config.mjs --quiet .",
"lint:fix": "oxlint -c oxlint.config.mjs --fix .",
"prepare": "run-p rebuild",
"prepublishOnly": "run-s rebuild",
"preversion": "run-s rebuild",
@@ -57,119 +62,96 @@
"rebuild": "run-s clean build",
"reinstall": "run-s clean clean:deps ci",
"reinstall:angry": "npm run clean:dangerously && npm ci",
"release": "lerna publish",
"release": "lerna publish --exact",
"stage-synced-pkgs": "git add -A packages/appium/README.md \"packages/*/package.json\"",
"start": "appium",
"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:default": "sync-monorepo-packages --packages=\"!packages/logger\" --fields=author,license,bugs,homepage",
"sync-pkgs:common-fields:logger": "sync-monorepo-packages --packages=\"packages/logger\" --fields=author,bugs,homepage",
"sync-pkgs:keywords": "sync-monorepo-packages --field=keywords --packages=\"packages/*\" --packages=\"!packages/types\" --packages=\"!packages/eslint-config-appium-ts\" ",
"sync-pkgs:license": "sync-monorepo-packages --force --no-package-json --packages=\"!packages/logger\" LICENSE",
"sync-pkgs": "node ./scripts/sync-monorepo-packages.mjs",
"test": "run-s test:quick",
"test:ci": "run-s test:smoke test:unit test:types test:e2e",
"test:e2e": "lerna run test:e2e",
"test:quick": "run-s lint test:unit test:types",
"test:slow": "run-s test:quick test:smoke test:e2e",
"test:smoke": "smoker --all test:smoke",
"test:smoke": "lerna run test:smoke",
"test:types": "lerna run test:types",
"test:unit": "lerna run test",
"upload": "gulp github-upload",
"zip": "zip -qr ./appium.zip ./packages/appium",
"zip-and-upload": "run-s zip upload"
},
"prettier": {
"bracketSpacing": false,
"printWidth": 100,
"singleQuote": true
},
"devDependencies": {
"@colors/colors": "1.6.0",
"@eslint/js": "9.39.1",
"@tsconfig/node20": "20.1.8",
"@types/argparse": "2.0.17",
"@types/archiver": "7.0.0",
"@appium/oxc-config": "1.0.0",
"@eslint/js": "10.0.1",
"@stylistic/eslint-plugin": "5.10.0",
"@tsconfig/node20": "20.1.9",
"@types/async-lock": "1.4.2",
"@types/base64-stream": "1.0.5",
"@types/bluebird": "3.5.42",
"@types/chai": "5.2.3",
"@types/chai-as-promised": "8.0.2",
"@types/content-disposition": "0.5.9",
"@types/express": "5.0.6",
"@types/finalhandler": "1.2.4",
"@types/jsftp": "2.1.5",
"@types/json-schema": "7.0.15",
"@types/klaw": "3.0.7",
"@types/lockfile": "1.0.4",
"@types/lodash": "4.17.21",
"@types/lodash": "4.17.24",
"@types/method-override": "3.0.0",
"@types/mocha": "10.0.10",
"@types/morgan": "1.9.10",
"@types/mv": "2.1.4",
"@types/ncp": "2.0.8",
"@types/node": "24.10.1",
"@types/node": "24.13.3",
"@types/plist": "3.0.5",
"@types/pluralize": "0.0.33",
"@types/semver": "7.7.1",
"@types/serve-favicon": "2.5.7",
"@types/shell-quote": "1.7.5",
"@types/sinon": "21.0.0",
"@types/sinon": "22.0.0",
"@types/sinon-chai": "4.0.0",
"@types/source-map-support": "0.5.10",
"@types/supports-color": "8.1.3",
"@types/teen_process": "2.0.4",
"@types/which": "3.0.4",
"@types/wrap-ansi": "3.0.0",
"@types/ws": "8.18.1",
"@types/xmldom": "0.1.34",
"@types/yargs": "17.0.35",
"asyncbox": "3.0.0",
"chai": "6.2.1",
"asyncbox": "6.3.5",
"chai": "6.2.2",
"chai-as-promised": "8.0.2",
"conventional-changelog-conventionalcommits": "7.0.2",
"cpy-cli": "6.0.0",
"cpy-cli": "7.0.0",
"cross-env": "10.1.0",
"eslint": "9.39.1",
"eslint": "10.7.0",
"eslint-config-prettier": "10.1.8",
"eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-import": "2.32.0",
"eslint-plugin-mocha": "11.2.0",
"eslint-plugin-promise": "7.2.1",
"eslint-import-resolver-typescript": "4.4.5",
"eslint-plugin-import-x": "4.17.1",
"eslint-plugin-mocha": "11.3.0",
"eslint-plugin-n": "18.2.2",
"eslint-plugin-promise": "7.3.0",
"finalhandler": "2.1.1",
"get-port": "5.1.1",
"json-schema-to-typescript": "15.0.4",
"lerna": "9.0.3",
"log-symbols": "4.1.0",
"midnight-smoker": "8.0.0",
"lerna": "9.0.7",
"mjpeg-consumer": "2.0.0",
"mjpeg-server": "0.3.1",
"mocha": "11.7.5",
"npm-run-all2": "8.0.4",
"prettier": "3.7.4",
"npm-run-all2": "9.0.2",
"rewiremock": "3.14.6",
"rimraf": "6.1.2",
"serve-static": "2.2.0",
"sinon": "21.0.0",
"sync-monorepo-packages": "1.0.2",
"teen_process": "3.0.4",
"ts-node": "10.9.2",
"rimraf": "6.1.3",
"serve-static": "2.2.1",
"sinon": "22.1.0",
"sinon-chai": "4.0.1",
"teen_process": "4.1.9",
"tsd": "0.33.0",
"typescript": "5.9.3",
"typescript-eslint": "8.48.1",
"webdriverio": "9.21.0",
"ws": "8.18.3",
"yaml-js": "0.3.1"
"typescript": "6.0.3",
"typescript-eslint": "8.65.0",
"webdriverio": "9.29.1",
"ws": "8.21.1"
},
"overrides": {
"@sidvind/better-ajv-errors": {
"ajv": "8.20.0"
},
"ajv-formats": {
"ajv": "8.20.0"
},
"http-cache-semantics": "4.2.0"
},
"engines": {
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
"npm": ">=10"
},
"publishConfig": {
"access": "public"
},
"overrides": {
"@sidvind/better-ajv-errors": {
"ajv": "8.17.1"
},
"ajv-formats": {
"ajv": "8.17.1"
},
"http-cache-semantics": "4.2.0"
}
}
+126
View File
@@ -3,6 +3,132 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.6.0](https://github.com/appium/appium/compare/appium@3.5.2...appium@3.6.0) (2026-07-25)
### Features
* **appium:** add --allow-unknown-args to tolerate unrecognized server CLI arguments ([#22477](https://github.com/appium/appium/issues/22477)) ([f943fab](https://github.com/appium/appium/commit/f943fab1411826212cfb174e3847e610c25f37b7))
### Bug Fixes
* **appium:** Duplicated module import ([#22519](https://github.com/appium/appium/issues/22519)) ([154ea18](https://github.com/appium/appium/commit/154ea1825281335569f0d6952db527135c75e153))
* typescript config ([#22540](https://github.com/appium/appium/issues/22540)) ([ea6a2e1](https://github.com/appium/appium/commit/ea6a2e117f56c1d7ff459378700494407c51608e))
* Typescript references ([#22458](https://github.com/appium/appium/issues/22458)) ([fd70da7](https://github.com/appium/appium/commit/fd70da7ab407bf1f6fec8a3576b9a33f0aef9b69))
## [3.5.2](https://github.com/appium/appium/compare/appium@3.5.1...appium@3.5.2) (2026-06-18)
**Note:** Version bump only for package appium
## [3.5.1](https://github.com/appium/appium/compare/appium@3.5.0...appium@3.5.1) (2026-06-18)
### Bug Fixes
* **storage-plugin:** add fs.sanitizeName for the delete request as well ([#22362](https://github.com/appium/appium/issues/22362)) ([5fee017](https://github.com/appium/appium/commit/5fee01752f2782e96fbe64fd13520b433d4a7535))
## [3.5.0](https://github.com/appium/appium/compare/appium@3.4.2...appium@3.5.0) (2026-05-31)
### Features
* add IPC channels per session for drivers and plugins to communicate ([#22211](https://github.com/appium/appium/issues/22211)) ([97c879c](https://github.com/appium/appium/commit/97c879cdd02e6fcccaaea45a8d1a7088bed4ae66)), closes [#22206](https://github.com/appium/appium/issues/22206)
* **appium:** Ditch bluebird ([#22301](https://github.com/appium/appium/issues/22301)) ([abb83bd](https://github.com/appium/appium/commit/abb83bde62e8beefdd9483a276ef2aa888722245))
* Limit the maximum count of topics per session and make it configurable ([#22279](https://github.com/appium/appium/issues/22279)) ([0264775](https://github.com/appium/appium/commit/0264775ecb8ecaca9dac2eae47784da02a653255))
* make assignIpc internal ([#22278](https://github.com/appium/appium/issues/22278)) ([25d922b](https://github.com/appium/appium/commit/25d922b7d3062c306c1631d6f5c227600ddd226a))
## [3.4.2](https://github.com/appium/appium/compare/appium@3.4.1...appium@3.4.2) (2026-05-07)
**Note:** Version bump only for package appium
## [3.4.1](https://github.com/appium/appium/compare/appium@3.4.0...appium@3.4.1) (2026-05-06)
**Note:** Version bump only for package appium
## [3.4.0](https://github.com/appium/appium/compare/appium@3.3.1...appium@3.4.0) (2026-05-06)
### Features
* add 3 WebDriver extension endpoints ([#22237](https://github.com/appium/appium/issues/22237)) ([787571d](https://github.com/appium/appium/commit/787571d33836c06bb1332d7bc6cc2f9800bbdd82))
## [3.3.1](https://github.com/appium/appium/compare/appium@3.3.0...appium@3.3.1) (2026-04-23)
### Bug Fixes
* **appium:** lint warnings ([#22171](https://github.com/appium/appium/issues/22171)) ([8e68b3e](https://github.com/appium/appium/commit/8e68b3e2c9c7b6238e0ffc241adbd4d9991ead7a))
* **appium:** plugins caching per session ([#22203](https://github.com/appium/appium/issues/22203)) ([622f199](https://github.com/appium/appium/commit/622f1999d72d2f7ebc7cc279879ea0fcefe29a54))
## [3.3.0](https://github.com/appium/appium/compare/appium@3.2.2...appium@3.3.0) (2026-04-09)
### Features
* use exact version for dependencies in monorepo packages instead of ^ ([#22090](https://github.com/appium/appium/issues/22090)) ([86c8f23](https://github.com/appium/appium/commit/86c8f23a670d0bbc2d359a8235828606bd36e6aa))
## [3.2.2](https://github.com/appium/appium/compare/appium@3.2.1...appium@3.2.2) (2026-03-09)
### Bug Fixes
* **appium:** Exclude package.json from tsconfig ([#22052](https://github.com/appium/appium/issues/22052)) ([1d89e2a](https://github.com/appium/appium/commit/1d89e2a5f8e478f3331666d3c308427ab834471a))
## [3.2.1](https://github.com/appium/appium/compare/appium@3.2.0...appium@3.2.1) (2026-03-08)
### Bug Fixes
* **appium:** Fix CLI arguments normalization ([#21945](https://github.com/appium/appium/issues/21945)) ([9ea601c](https://github.com/appium/appium/commit/9ea601c8330d35f45f0712e41867544d925a0f6b))
* Avoid attaching plugins to a non-existing session ([#21964](https://github.com/appium/appium/issues/21964)) ([9f5faf5](https://github.com/appium/appium/commit/9f5faf5bedffe6196742c09c6793a6450af48ac9))
* **logger:** Make sure we always have single logger instance per process ([#21991](https://github.com/appium/appium/issues/21991)) ([4daaa14](https://github.com/appium/appium/commit/4daaa14c29bed129d329d0881a93ecdb9de77676))
* Type imports ([#22025](https://github.com/appium/appium/issues/22025)) ([2f27425](https://github.com/appium/appium/commit/2f27425ea300ca1af1c1da6e4be68d48e7a94346))
## [3.2.0](https://github.com/appium/appium/compare/appium@3.1.2...appium@3.2.0) (2026-01-26)
### Features
* **appium:** Add repository links to verbose extensions list ([#21813](https://github.com/appium/appium/issues/21813)) ([ce91686](https://github.com/appium/appium/commit/ce91686852b0baab5f46990f5d40db4747922924))
### Bug Fixes
* **appium:** appium symlink behavior across drivers/plugins installations ([#21837](https://github.com/appium/appium/issues/21837)) ([529aeb4](https://github.com/appium/appium/commit/529aeb48f10419e21555cec05835ff07bb0e2e51))
* apply npm run lint:fix ([#21867](https://github.com/appium/appium/issues/21867)) ([5e28714](https://github.com/appium/appium/commit/5e28714442cf59ee35b085e01e82c3f5483891fd))
* **docs:** add missing verbose flag for CLI list command ([#21814](https://github.com/appium/appium/issues/21814)) ([dcfaa88](https://github.com/appium/appium/commit/dcfaa88830f6a5c608c92f5ae72445e065261d38))
## [3.1.2](https://github.com/appium/appium/compare/appium@3.1.1...appium@3.1.2) (2025-12-04)
**Note:** Version bump only for package appium
+4 -4
View File
@@ -199,11 +199,11 @@ contribution of project development and leadership!
</p>
<p align="center">
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
<a href="https://www.testmuai.com">
<picture>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png" media="(prefers-color-scheme: dark)"/>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png" media="(prefers-color-scheme: light)"/>
<img src="packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png" width="300" alt="LambdaTest"/>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-dark.png" media="(prefers-color-scheme: dark)"/>
<source srcset="packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-light.png" media="(prefers-color-scheme: light)"/>
<img src="packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-dark.png" width="300" alt="TestMu AI (formerly LambdaTest)"/>
</picture>
</a>
</p>
+3 -1
View File
@@ -3,7 +3,9 @@ site_name: Appium Documentation
repo_url: https://github.com/appium/appium
repo_name: appium/appium
edit_uri: edit/master/packages/appium/docs
copyright: Copyright &copy; 2012 OpenJS Foundation - <a href="#__consent">Change cookie settings</a>
copyright: |
<p>Copyright <a href="https://openjsf.org">OpenJS Foundation</a> and Appium contributors. All rights reserved. The <a href="https://openjsf.org">OpenJS Foundation</a> has registered trademarks and uses trademarks. For a list of trademarks of the <a href="https://openjsf.org">OpenJS Foundation</a>, please see our <a href="https://trademark-policy.openjsf.org">Trademark Policy</a> and <a href="https://trademark-list.openjsf.org">Trademark List</a>. Trademarks and logos not indicated on the <a href="https://trademark-list.openjsf.org">list of OpenJS Foundation trademarks</a> are trademarks&trade; or registered&reg; trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.</p>
<p><a href="https://openjsf.org">The OpenJS Foundation</a> | <a href="https://terms-of-use.openjsf.org">Terms of Use</a> | <a href="https://privacy-policy.openjsf.org">Privacy Policy</a> | <a href="https://bylaws.openjsf.org">Bylaws</a> | <a href="https://code-of-conduct.openjsf.org">Code of Conduct</a> | <a href="https://trademark-policy.openjsf.org">Trademark Policy</a> | <a href="https://trademark-list.openjsf.org">Trademark List</a> | <a href="https://www.linuxfoundation.org/cookies">Cookie Policy</a></p><a href="#__consent">Change cookie settings</a>
theme:
logo: assets/images/appium-logo-white.png
@@ -10,7 +10,7 @@ maintenance, and support from companies and volunteers. As such, we welcome cont
There are a lot of different ways to help the project - see below for everything you can do and the
processes to follow for each contribution method. Note that no matter how you contribute, your
participation is governed by our [Code of Conduct](https://github.com/appium/appium/blob/master/CONDUCT.md).
participation is governed by our [Code of Conduct](https://github.com/appium/.github/blob/master/CODE_OF_CONDUCT.md).
## Join the Discussion Forum
@@ -568,6 +568,33 @@ capability), and then to set an internal field to that value, so that it can be
bidiProxyUrl`. Once all this is in place, Appium will proxy BiDi commands from the client straight
to the upstream connection.
### Understand server-assigned driver properties and security flags
When your driver is running under the main Appium server, Appium assigns a small set of
server-related properties on your driver instance when a session is created:
- `cliArgs`: Driver-specific configuration derived from the Appium server’s CLI flags and/or
configuration files (for example via the `server.driver.<your-driver-name>` section). These
options are **not** user capabilities and cannot be influenced directly by test code.
- `server`, `serverHost`, `serverPort`, `serverPath`: Information about the HTTP server that is
hosting your driver. These values reflect how the Appium server was started (for example the
`--address`, `--port`, and `--base-path` flags) and are useful when your driver needs to construct
URLs that point back to the Appium server itself (for example when setting up proxies, webhooks,
or other callbacks).
`BaseDriver` and `AppiumDriver` also cooperate to expose security-related flags on your driver
instance:
- `relaxedSecurityEnabled`: Indicates whether the server is running with relaxed security enabled
(for example via `--relaxed-security`).
- `allowInsecure`: A list of insecure features which are explicitly allowed for this driver (derived
from server-level options like `--allow-insecure`).
- `denyInsecure`: A list of insecure features which are explicitly disabled for this driver (derived
from server-level options like `--deny-insecure`).
See [Hide behaviour behind security flags](#hide-behaviour-behind-security-flags) for how to use
these flags in your driver (e.g. via `isFeatureEnabled` and `assertFeatureEnabled`).
### Extend the existing protocol with new commands
You may find that the existing commands don't cut it for your driver. If you want to expose
@@ -858,3 +885,118 @@ this.onUnexpectedShutdown(handler)
`handler` should be a function which receives an error object (representing the reason for the
unexpected shutdown).
### Send messages to plugins running on the same session
Appium's driver and plugin architecture means that a single driver and any number of plugins can be
running together for a current session. The driver and plugins don't really know anything about
each other though, which can make coordination potentially difficult. Without creating any kind of
tight coupling between drivers or plugins, it's possible for drivers and plugins to communicate
along a pub/sub style message bus. With Appium's IPC feature, "message" means a combination of
"data" (the data intended to be published or received), and metadata (timestamp, the name of the
publisher, etc...).
Drivers and plugins can implement an instance method called `async onIpcInit`, in which they will
know that the IPC channel for the session is now active. At this point, they have access to the
following methods:
#### `ipcSubscribe<T>(topic: string): IIpcSubscription`
This method allows a driver or plugin to subscribe to a topic on the IPC channel for the session.
Topics are simply strings. To coordinate effectively, drivers or plugins would use the same topic
string (so this would be something advertised in the driver/plugin documentation).
The result of this call is an `IpcSubscription` object that allows:
- Looping through messages on the topic via an async generator
- Hooking up an event handler for new messages
- Getting the last message sent on the topic
- Publishing a message to the topic
- Unsubscribing from the topic
#### `IpcSubscription` object
Here is an example of how subscribing and use of these subscription methods might work:
```ts
async onIpcInit() {
// we know at this point in our driver/plugin lifecycle that we can use IPC methods
type MyMessageData = {myData: string}; // let's say the message data for this channel has this shape
const subscription = this.ipcSubscribe<MyMessageData>('coolTopic');
// listen for new messages on topic
subscription.on('message', (message) => {
console.log(message.data); // {myData: 'something'}
});
// publish data to the topic; might throw if the data is larger than configured max size, or we
// are no longer subscribed
await subscription.publish({myData: 'hi'});
// get last message sent to topic
const {data} = subscription.getMessage() ?? {data: null};
// data = {myData: 'hi'}
// unsubscribe
subscription.unsubscribe(); // returns true if we unsubscribed and false if no subscription existed
}
```
With a subscription object, we can also iterate async over it to receive new messages:
```ts
for await (const message of subscription) {
// here we have a message and can unwrap its data
}
```
Note that the iteration will stop when the subscription ends (i.e., when `unsubscribe` is called).
You can also check whether the subscription is still active (if your subscribe and unsubscribe
logic is not locally connected):
```ts
if (subscription.isActive) {
// we know we have not yet unsubscribed
}
```
If the subscription is not active, attempts to call `subscription.publish` will throw an error.
#### `IpcMessage` object
When you get a message on a topic, it has the following shape:
```ts
export type IpcMessage<T> = {
publisher: string, // the id of the publishing object (typically of the form <ClassName>@<uniqueObjectId>)
timestampMs: number, // when the message was published, in ms since epoch
topic: string, // the topic the message was published on
data: T, // the arbitrary message data. Must be serializable and a valid argument to 'structuredClone()'
};
```
#### IPC Notes
There are some important things to keep in mind when using Appium's IPC feature:
- IPC is only available once `onIpcInit` has been called, at the end of the `createSession` flow.
It cannot be used statically or in `createSession` hooks
- In sum, IPC is only for use during a session (this is also to prevent drivers/plugins from
accessing or reading data sent on IPC channels in other sessions.)
- The default max size of an IPC message is 1MB. This can be configured by the server-admin by
using the `--max-ipc-data-size` arg (value is a number in bytes).
- If a message exceeds the configured size, any call to `publish` methods will throw, so be
sure to cover this case in your error handling.
- The default max number of IPC topics per session is 1000. This can be configured by the
server-admin using the `--max-ipc-topics` arg.
- If the topic limit is reached, calls to `subscribe` or `publish` on a new topic will throw, so
be sure to cover this case in your error handling.
- Topic names exist within a global namespace per session. So if you don't want to clash with other
drivers or plugins, make sure you prefix your topic names with something unique, akin to vendor
prefixes in the WebDriver standard (for example: `fake-driver:some-topic`). We recommend the
format `<namespace>:<topic>`.
To see examples of IPC in action, check out Appium's own
[FakeDriver](https://github.com/appium/appium/blob/master/packages/fake-driver/lib/driver.ts) and
[FakePlugin](https://github.com/appium/appium/blob/master/packages/fake-plugin/lib/plugin.ts)
extensions, which showcase several ways of using IPC messages.
@@ -512,3 +512,12 @@ async onUnexpectedShutdown(driver, cause) {
}
}
```
### Send messages to the driver or other plugins running on the same session
Even though drivers and plugins don't know anything about each other, it's possible for them to
send messages that other drivers or plugins can listen for, within the context of the same session,
using an IPC channel. Given that the developer instructions for this feature are the same for
drivers and plugins, please head over to the [IPC development docs for
drivers](./build-drivers.md#send-messages-to-plugins-running-on-the-same-session) at the driver
development guide.
@@ -30,7 +30,7 @@ In lieu of a separate file, configuration can be embedded in a project's `packag
```
When an Appium server is started via the `appium` executable, the `init` function in `lib/main.js`
will call into `lib/config-file.js` to load and/or search for a configuration file and in
will call into `lib/bootstrap/config-file.js` to load and/or search for a configuration file and in
`package.json`.
!!! note
@@ -69,7 +69,7 @@ It is more straightforward to explain how config files are validated, so we'll s
### Validating Config Files
When a config file is found (`lib/config-file.js`), it will call the `validate` function exported
When a config file is found (`lib/bootstrap/config-file.js`), it will call the `validate` function exported
from `lib/schema/schema.js` with the contents of the config file. In turn, this asks `ajv` to
validate the data against the schema that Appium has provided it.
+50 -27
View File
@@ -19,6 +19,43 @@ Appium has a graphical client which can be used to inspect application screensho
application hierarchy, search for elements, run Appium commands, record app interactions, and more.
It can be very useful for Appium test development.
=== "Install as an Appium Plugin"
```bash
appium plugin install inspector
```
=== "Install Standalone"
Download the app from the Appium Inspector repo's [GitHub Releases section](https://github.com/appium/appium-inspector/releases).
### [Appium MCP](https://github.com/appium/appium-mcp)
Appium MCP is a Model Context Protocol (MCP) server that provides mobile test development and
automation capabilities using Appium.
```json title="Install This Tool"
// Add the following to your MCP client configuration
{
"appium-mcp": {
"disabled": false,
"timeout": 100,
"type": "stdio",
"command": "npx",
"args": ["appium-mcp@latest"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
```
### [Skills](https://github.com/appium/skills)
A set of AI Agent skills to support Appium automation, for example:
- Help preparing Appium test environment from scratch, including common driver setup
- Help preparing XCUITest driver and WebDriverAgent for real device automation
## Extension Tools
Appium driver or plugin developers can choose to include these tools in their driver/plugin:
@@ -33,7 +70,7 @@ details needed for the driver/plugin have been set up correctly. The tool can be
appium {driver|plugin} doctor <extension-name>
```
It shows no results if the driver/plugin author did not implement Doctor support.
It shows no results if the driver/plugin does not have such validation checks.
!!! note
@@ -44,6 +81,18 @@ It shows no results if the driver/plugin author did not implement Doctor support
These tools are not maintained by the Appium team:
### [AppClaw](https://github.com/AppiumTestDistribution/AppClaw)
AppClaw is a CLI-based agentic AI layer for mobile automation, powered by [Appium MCP](#appium-mcp).
Agent instructions can be passed directly via CLI, or defined as YAML flows in either structured
or natural language syntax.
Supported by: `@AppiumTestDistribution`
```sh title="Install This Tool"
npm install -g appclaw
```
### [Appium Installer](https://github.com/AppiumTestDistribution/appium-installer)
Appium Installer is a command-line tool for simplifying setups of new Appium test environments.
@@ -55,29 +104,3 @@ Supported by: `@AppiumTestDistribution`
```sh title="Install This Tool"
npm install -g appium-installer
```
### [Jarvis Appium](https://github.com/AppiumTestDistribution/mcp-appium)
Jarvis Appium is a Model Context Protocol (MCP) server that provides mobile test development and
automation capabilities using Appium.
Supported by: `@AppiumTestDistribution`
```json title="Install This Tool"
// Add the following to your MCP client configuration
{
"mcpServers": {
"jarvis-appium": {
"disabled": false,
"timeout": 100,
"type": "stdio",
"command": "npx",
"args": ["jarvis-appium"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk",
"CAPABILITIES_CONFIG": "/path/to/your/capabilities.json"
}
}
}
}
```
+50 -54
View File
@@ -2,14 +2,14 @@
title: Session Capabilities
---
"Capabilities" is the name given to the set of parameters used to start an Appium session. The
information in the set describes what sort of "capabilities" you want your session to have, for
example, a certain mobile operating system or a certain version of a device. Capabilities are
represented as key-value pairs, with values allowed to be any valid JSON type, including
other objects.
Capabilities are the core parameters used to start an Appium session. They describe various
features that you want your session to have, for example, a certain mobile operating system or a
certain version of a device. Capabilities are represented as key-value pairs, with values allowed
to be any valid JSON type, including other objects. Most importantly, they cannot be changed
during the lifecycle of the session.
The W3C WebDriver spec's [section on Capabilities](https://w3c.github.io/webdriver/#capabilities)
identifies a small set of 10 standard capabilities, including the following:
The capabilities used in Appium follow [the W3C WebDriver specification of the same name](https://w3c.github.io/webdriver/#capabilities).
The WebDriver spec defines a small set of standard capabilities, including the following:
| Capability Name | Type | Description |
|------------------|----------|------------------------------------------------|
@@ -17,65 +17,62 @@ identifies a small set of 10 standard capabilities, including the following:
| `browserVersion` | `string` | The specific version of the browser |
| `platformName` | `string` | The type of platform hosting the browser |
While the above capabilities are commonly used by Appium drivers, they are not sufficient for
describing Appium-specific features, such as the name of the driver to use, or the name of the app
to launch. In order to achieve this, Appium defines its own [extension capabilities](https://w3c.github.io/webdriver/#dfn-extension-capability).
## Common Appium Capabilities
Appium understands these browser-focused capabilities, but introduces a number of additional
capabilities. According to the WebDriver spec, any
non-standard "extension capabilities" must include a namespace prefix (signifying the vendor
introducing the capability), ending in a `:`. Appium's vendor prefix is
`appium:`, and so any Appium-specific capabilities must include this prefix. Depending on which
client you are using, the prefix may be added automatically or in conjunction with certain
interfaces, but it is always a good practice to explicitly include it for clarity.
According to the WebDriver spec, extension capabilities must include a namespace prefix (signifying
the vendor introducing the capability), and the namespace must end a colon (`:`). Appium's vendor
prefix is `appium:`, and so any Appium-specific capabilities must include this prefix. Depending on
your Appium client, the prefix may be added automatically or in conjunction with certain interfaces,
but it is always a good practice to explicitly include it for clarity.
Here is a list of all the globally-recognized Appium capabilities:
Here are a few commonly (but not universally!) used Appium-specific capabilities:
!!! info
| Capability Name | Type | Description |
|-------------------------|----------|-----------------------------------------------------------------|
| `appium:automationName` | `string` | The name of the Appium driver to use |
| `appium:udid` | `string` | The unique device identifier of a particular device to automate |
| `appium:app` | `string` | The path to an installable application |
Individual drivers and plugins can support other capabilities, so refer to their documentation
for lists of specific capability names. Some drivers may also not support all of these capabilities
All capabilities recognized by the Appium base driver (inherited by all drivers) can be found in the
[Capabilities Reference document](../reference/session/caps.md). While this common capability set
is fairly small, it can be greatly extended by Appium drivers and plugins, who can (and should)
define their own capabilities. Make sure to reference their documentation to learn more about the
capabilities they support. You can find a list of known drivers in the [Ecosystem Drivers](../ecosystem/drivers.md) document.
| <div style="width:12em">Capability</div> | Type | Required? | Description |
|--------------------------------------------|-----------|-----------|----------------------------|
| `platformName` | `string` | yes | The type of platform hosting the app or browser |
| `appium:automationName` | `string` | yes | The name of the Appium driver to use |
| `browserName` | `string` | no | The name of the browser to launch and automate, if the driver supports web browsers as a special case |
| `appium:app` | `string` | no | The path to an installable application |
| `appium:deviceName` | `string` | no | The name of a particular device to automate, e.g., `iPhone 14` (currently only actually useful for specifying iOS simulators, since in other situations it's typically recommended to use a specific device id via the `appium:udid` capability). |
| `appium:platformVersion` | `string` | no | The version of a platform, e.g., for iOS, `16.0` |
| `appium:newCommandTimeout` | `number` | no | The number of seconds the Appium server should wait for clients to send commands before deciding that the client has gone away and the session should shut down. `60` seconds by default. Setting it to zero disables the timer. |
| `appium:noReset` | `boolean` | no | If true, instruct an Appium driver to avoid its usual reset logic during session start and cleanup (default `false`) |
| `appium:fullReset` | `boolean` | no | If true, instruct an Appium driver to augment its usual reset logic with additional steps to ensure maximum environmental reproducibility (default `false`) |
| `appium:eventTimings` | `boolean` | no | If true, instruct an Appium driver to collect [Event Timings](./event-timing.md) (default `false`) |
| `appium:printPageSourceOnFindFailure` | `boolean` | no | If true, collect the page source and print it to the Appium log whenever a request to find an element fails (default `false`) |
Drivers are also able to place more complex constraints on capabilities as a group. For example,
the XCUITest driver recommends that at least one of `browserName`, `appium:app`, or `appium:bundleId`
is included in the capabilities, otherwise it will not be able to auto-install or auto-launch any
application. Each driver will document how it interprets these capabilities and any other
platform-specific requirements.
Some drivers place more complex constraints on capabilities as a group. For example, while the
`appium:app` and `browserName` capabilities are listed above as optional, if you want to launch
a session with a specific app, the XCUITest driver requires that at least one of `appium:app`,
`browserName`, or `appium:bundleId` are included in the capabilities (otherwise it will not know
what app to install and/or launch and will simply open a session on the home screen). Each driver
will document how it interprets these capabilities and any other platform-specific requirements.
The way to construct capabilities and start a session will likely differ depending on your Appium
client. For examples of doing this in each client library, head to the [Ecosystem Clients](../ecosystem/clients.md)
page and click through to the appropriate client documentation.
!!! note
Capabilities are like parameters used when starting a session. After the capabilities are sent
and the session is started, they cannot be changed. If a driver supports updating aspects of
its behaviour in the course of a session, it will provide a [Setting](./settings.md) for this
purpose instead of, or in addition to, a capability.
Each Appium client has its own way of constructing capabilities and starting a session. For
examples of doing this in each client library, head to the [Ecosystem](../ecosystem/index.md) page
and click through to the appropriate client documentation.
Once your capabilities are sent to the server and the session is started, they cannot be
changed. If a driver supports updating its behaviour during a session, it will use the
[Settings API](./settings.md) for this purpose.
## BiDi Protocol Support
Appium supports [WebDriver BiDi](https://w3c.github.io/webdriver-bidi/) protocol since base–driver 9.5.0.
The actual behavior depends on individual drivers while the Appium and the baseーdriver support the protocol.
Please make sure if a driver supports the protocol and what kind of commands/events it supports in the documentation.
In addition to the standard WebDriver protocol (now known as WebDriver Classic), Appium supports the
[WebDriver BiDi](https://w3c.github.io/webdriver-bidi/) protocol. Support for this protocol is
opt-in, and requires the use of the standard `webSocketUrl` capability.
| Capability Name | Type | Description |
|-----------------|-----------|-----------------------------------------|
| `webSocketUrl` | `boolean` | To enable BiDi protocol in the session. |
| Capability Name | Type | Description |
|-----------------|-----------|--------------------------------------------------|
| `webSocketUrl` | `boolean` | Whether BiDi protocol is enabled in the session |
All BiDi commands supported by the Appium base driver (inherited by all drivers) can be found in the
[BiDi Protocol API Reference document](../reference/api/bidi.md). Similarly to WebDriver Classic
commands, individual Appium drivers and plugins can define their own supported standard and custom
BiDi commands, so make sure to reference their documentation.
## Using `appium:options` to Group Capabilities
@@ -118,8 +115,7 @@ creates in response to a new session request. This is through the concept of "al
!!! note
Check out the [spec itself](https://w3c.github.io/webdriver/#processing-capabilities) or
a [summarized version](https://github.com/jlipps/simple-wd-spec#processing-capabilities) for
Check out the [spec itself](https://w3c.github.io/webdriver/#processing-capabilities) for
a more in-depth description of how capabilities are processed.
In practice, use of first-match capabilities is not necessary or recommended for use with Appium.
+24 -32
View File
@@ -3,27 +3,27 @@ title: Appium Server Security
---
The Appium team makes every effort to ensure the security of the Appium server. This is especially
important when Appium is run in a multitenant environment, or when multiple users are running
sessions on the same Appium server. In general, you can only safely enable all of Appium's features if
all the following are true:
important when Appium is run in a multi-tenant environment, or when multiple users are running
sessions on the same Appium server. To ensure a safe environment for Appium's purposes, all of the
following should be true:
- You're running your own Appium server locally or within a protected internal network
- You're not sharing it with any untrusted parties
- You don't expose Appium's port(s) to the wider internet
But because many Appium users might not be able to guarantee such a safe environment, the Appium
team puts many features behind a security protection mechanism, which forces system admins (the
people who are in charge of starting the Appium server) to _explicitly opt-in_ to these features.
(Third-party driver and plugin authors can also [hide behaviour behind security
flags](../developing/build-drivers.md).)
But because not all Appium hosts can guarantee such a safe environment, certain insecure Appium
features are disabled by default, and require explicit opt-in in order to enable them. Most
importantly, this can _only_ be done by the Appium server _host_, and Appium _client_ sessions are
not allowed to change this.
For security reasons, Appium client sessions can _not_ request feature enablement via capabilities.
This is the responsibility of the server admin who configures and launches the Appium server.
While it is possible for an Appium host to simply enable all insecure features at once, each
feature also has a unique name, which can be used for granular control over the server state.
## Security Server Args
The [Server CLI](../reference/cli/server.md) doc outlines three relevant arguments which may be passed to
Appium, when starting it from the command line:
Enabling or disabling insecure features is done via [Appium server launch arguments](../reference/cli/server.md)
or [configuration file](./config.md). The former document outlines three relevant arguments for
achieving this:
|<div style="width:10em">Parameter</div>|Description|
|---------------------------------------|-----------|
@@ -31,36 +31,28 @@ Appium, when starting it from the command line:
|`--allow-insecure`|Turns on _only_ specified features, except those blocked by `--deny-insecure`. Has no effect when used in combination with `--relaxed-security`|
|`--deny-insecure`|Explicitly turns _off_ specified features, overriding `--relaxed-security` and `--allow-insecure`|
All of the above arguments can also be specified in the [Appium Configuration file](./config.md).
Features passed to `--allow-insecure`/`--deny-insecure` must be specified as a comma-separated list,
and each feature in the list must additionally include a prefix, indicating the driver to which the
feature should apply. The prefix can be either the driver's `automationName`, or the wildcard (`*`)
symbol, if the feature should be applied to all drivers. The prefix and feature name are separated
using the colon character (`:`).
and each feature in the list must additionally include a prefix, indicating the driver to whose
sessions the feature should apply. The prefix can be either the driver's `automationName`, or the
wildcard (`*`) symbol, if the feature should be applied to all drivers. The prefix and feature name
are separated using the colon character (`:`).
For example, `first:foo` refers to the `foo` feature for the `first` driver, whereas `*:bar` refers
to the `bar` feature for all drivers.
## Insecure Features
Each Appium driver is responsible for its own security, and can create its own feature names. Thus,
you should read through the documentation for a particular driver to know which feature names it
might use. Here is an incomplete list of examples from some of Appium's official drivers:
Almost all insecure features are defined on a per-driver or plugin basis, so make sure to read the
documentation for a particular driver/plugin to know which feature names it might use.
|<div style="width:12em">Feature Name</div>|Description|Supported Extension(s)|
|------------|-----------|-------|
|`get_server_logs`|Allows retrieving of Appium server logs via the Webdriver log interface|IOS, XCUITest, Android, UiAutomator2, Espresso|
|`adb_shell`|Allows execution of arbitrary shell commands via ADB, using the `mobile: shell` command|Android, UiAutomator2, Espresso|
|`record_audio`|Allow recording of host machine audio inputs|XCUITest|
|`execute_driver_script`| Allows sending a request that has multiple Appium commands.|Execute Driver Plugin|
Certain insecure features are also defined on the Appium server itself. For a list of these
features, as well as the features defined in official plugins, see
[the Insecure Features CLI Reference](../reference/cli/insecure-features.md) doc.
Some insecure features operate on the server level and do not require a driver session. Enabling
these features require using the wildcard prefix:
!!! note
|<div style="width:12em">Feature Name</div>|Description|
|------------|-----------|
|`session_discovery`|Allows retrieving the list of active server sessions via `GET /appium/sessions`|
If you are a driver or plugin author and want to implement insecure features of your own, check
out the [Building Drivers documentation](../developing/build-drivers.md#understand-server-assigned-driver-properties-and-security-flags).
## Examples
+3 -3
View File
@@ -34,9 +34,9 @@ Android TV, Samsung), and more!
</a>
</div>
<div class="homepageSponsor">
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
<img src="assets/images/sponsor-logo-lambdatest-dark.png#only-dark" style="width: 220px;" />
<img src="assets/images/sponsor-logo-lambdatest-light.png#only-light" style="width: 220px;" />
<a href="https://www.testmuai.com">
<img src="assets/images/sponsor-logo-testmuai-dark.png#only-dark" style="width: 220px;" />
<img src="assets/images/sponsor-logo-testmuai-light.png#only-light" style="width: 220px;" />
</a>
</div>
</div>
@@ -396,6 +396,45 @@ Deletes the virtual sensor with the type identified by `:sensorType`.
`null`
## Global Privacy Control Protocol
The [Global Privacy Control protocol](https://www.w3.org/TR/gpc) (GPC) is an extension of the W3C
WebDriver protocol.
### setGlobalPrivacyControl
```
POST /session/:sessionId/privacy
```
> GPC documentation: [Set Global Privacy Control](https://www.w3.org/TR/gpc/#set-global-privacy-control)
Sets the value of the do-not-sell-or-share preference for the current session.
#### Parameters
|Name|Description|Type|
|--|--|--|
|`gpc`|Whether the browser should perform do-not-sell-or-share interactions|boolean|
#### Response
`null`
### getGlobalPrivacyControl
```
GET /session/:sessionId/privacy
```
> GPC documentation: [Get Global Privacy Control](https://www.w3.org/TR/gpc/#get-global-privacy-control)
Retrieves the value of the do-not-sell-or-share preference for the current session.
#### Response
`boolean` - the preference value
## Permissions Protocol
The [Permissions protocol](https://www.w3.org/TR/permissions/) is an extension of the W3C WebDriver
@@ -523,6 +562,32 @@ Retrieves the available log types that can be used to call the [`getLog`](#getlo
`string[]` - an array of log types
## Storage Access Protocol
The [Storage Access protocol](https://privacycg.github.io/storage-access/) is an extension of the
W3C WebDriver protocol.
### setStorageAccess
```
POST /session/:sessionId/storageaccess
```
> Storage Access documentation: [Set Storage Access](https://privacycg.github.io/storage-access/#set-storage-access-command)
Sets the storage access policy of the current browsing context.
#### Parameters
|Name|Description|Type|
|--|--|--|
|`blocked`|Whether storage access should be blocked (`true`) or allowed (`false`)|boolean|
|`origin`|The origin to which the policy should be applied. Must be either a valid URL, or an asterisk (`*`) if the policy should apply to all origins.|string|
#### Response
`null`
## Web Authentication Protocol
The [Web Authentication protocol](https://w3c.github.io/webauthn/) (WebAuthn) is an extension of
@@ -222,7 +222,7 @@ Deletes a file in the storage.
#### Response
`boolean` - `true` upon successful file deletion, or `false` if the file does not exist in
the storage
the storage, or if the delete request is invalid.
### listStorageItems
@@ -117,6 +117,12 @@ appium {driver|plugin} install <install-spec>
appium driver install git://github.com/appium/appium-xcuitest-driver.git --source=git --package=appium-xcuitest-driver
```
- Install a branch of XCUITest driver repository using a Git URL:
```
appium driver install git://github.com/appium/appium-xcuitest-driver.git#specific-branch --source=git --package=appium-xcuitest-driver
```
## `list`
Lists all installed extensions, plus all official extensions that are not installed.
@@ -134,6 +140,7 @@ appium {driver|plugin} list
|`--installed`|Only list all installed extensions|boolean|
|`--json`|Return the result in JSON format|boolean|
|`--updates`|List all extensions along with information on whether newer versions are available. Only supported for extensions installed via `npm`.|boolean|
|`--verbose`|Show additional details for each extension|boolean|
#### Example
@@ -31,5 +31,6 @@ The executable has four main subcommands: `server`, `driver`, `plugin`, and `set
</div>
Appium also recognizes several [environment variables](./env-vars.md), which may be used for
advanced configuration.
The Appium server also recognizes several [environment variables](./env-vars.md) and
[insecure feature names](./insecure-features.md), though drivers and plugins can also define
variables and features of their own.
@@ -0,0 +1,24 @@
---
hide:
- toc
title: Insecure Features
---
The Appium server implements [a security protection mechanism](../../guides/security.md) that
allows the management of various insecure features.
The following features are defined on the server level and can be used even without drivers, but
they can only be enabled using the wildcard (`*`) prefix:
| Feature Name | Description |
|-------------------|-------------------------------------------------------------------------------|
|`session_discovery`|Allows retrieving the list of active server sessions via `GET /appium/sessions`|
Of course, Appium drivers and plugins are free to define additional insecure features of their own.
The following features are defined by official plugins:
| Feature Name | Plugin | Description |
|-----------------------|----------------|----------------------------------------------------------|
|`execute_driver_script`|`execute_driver`|Allows sending a request that has multiple Appium commands|
@@ -29,6 +29,7 @@ appium
|`--address`, `-a`|IPv4/IPv6 address to listen on|string|`0.0.0.0`|
|`--allow-cors`|Allow web browser connections from any host|boolean|`false`|
|`--allow-insecure`|List of [insecure features](../../guides/security.md) that should be allowed in this server's sessions. Individual features can be overridden by `--deny-insecure`. Has no effect in combination with `--relaxed-security`.|array<string>|`[]`|
|`--allow-unknown-args`|Do not exit if unrecognized command-line arguments are passed to the server; ignore them instead. Useful when the Appium CLI is wrapped by external tooling that appends extra flags.|boolean|`false`|
|`--base-path`, `-pa`|Base path to use as the prefix for all webdriver routes running on the server|string|`""`|
|`--callback-address`, `-ca`|Callback IP address|string|`0.0.0.0`|
|`--callback-port`, `-cp`|Callback port|integer|`4723`|
@@ -48,6 +49,8 @@ appium
|`--log-no-colors`|Disable colors in the server log|boolean|`false`|
|`--log-timestamp`|Show timestamps in the server log|boolean|`false`|
|`--long-stacktrace`|Add long stack traces to log entries. Recommended for debugging only.|boolean|`false`|
|`--max-ipc-data-size`|Maximum byte size of IPC message objects.|integer|`1048576` (1MB)|
|`--max-ipc-topics`|Maximum number of IPC topics per session.|integer|`1000`|
|`--no-perms-check`|Skip various permission checks on the server startup|boolean|`false`|
|`--nodeconfig`|JSON configuration for registering Appium as a node with Selenium Grid 3|object||
|`--plugin`|Plugin-specific configuration. Keys should correspond to plugin package names|object||
+9 -3
View File
@@ -5,8 +5,8 @@ hide:
title: Reference
---
This section of the Appium documentation provides a reference to the two main interfaces within the
Appium server: the command-line executable, and the supported API endpoints.
This section of the Appium documentation provides a reference to the core interfaces supported within the
Appium server:
<div class="grid cards" markdown>
@@ -16,10 +16,16 @@ Appium server: the command-line executable, and the supported API endpoints.
Learn how to use the Appium command-line executable
- :material-lan-connect: [__Session Properties__](./session/index.md)
---
See the values of global Appium session properties
- :material-cloud-braces: [__API Endpoints__](./api/index.md)
---
View endpoints supported by the Appium server
View endpoints supported by the core Appium server
</div>
@@ -0,0 +1,56 @@
---
hide:
- toc
title: Capabilities
---
The following [capabilities](../../guides/caps.md) are recognized by the Appium server/base driver,
and are therefore supported by all drivers as well. Some capabilities are directly handled by the
server/base driver, while others are only validated before being passed to the actual driver.
!!! note
Capabilities not listed here will _not_ be rejected by Appium: they will simply be forwarded
directly to the active driver/plugin.
### Required Capabilities
These capabilities are used in the Appium server/base driver, and are explicitly required in all
Appium sessions.
| Capability | Description | Type |
|-------------------------|---------------------------------------------|-----------|
| `platformName` | Type of platform hosting the app or browser | `string` |
| `appium:automationName` | Name of the Appium driver to use | `string` |
### Optional Capabilities
These capabilities are used in the Appium server/base driver, but are optional, and may have a
default value.
| <div style="width:19em">Capability</div> | Description | Type | Default |
|--|--|--|--|
| `webSocketUrl` | Toggle support of the WebDriver BiDi protocol | `boolean` ||
| `appium:eventTimings` (deprecated) | Toggle collection of [Event Timings](../../guides/event-timing.md). This capability is deprecated - please use the [`getLogEvents`](../api/appium.md#getlogevents) endpoint instead. | `boolean` ||
| `appium:newCommandTimeout` | Number of seconds the Appium server should wait for clients to send commands before stopping the session. A value of `0` disables the timeout. | `number` | `60` |
| `appium:printPageSourceOnFindFailure` | Toggle retrieval of the the page source and its printing to the Appium log, whenever a request to find an element fails | `boolean` ||
### Validated Capabilities
These capabilities are not directly used in the Appium server/base driver, but are still subject to
validation checks due to their relevance in other drivers. The actual handling of these
capabilities is optional and entirely driver-dependent.
| Capability | Validation |
|-----------------------------------|---------------------------------------------------------------|
| `platformVersion` | Must be `string` |
| `appium:app` | Must be `string`; empty values are ignored |
| `appium:autoLaunch` (deprecated) | Must be `boolean` |
| `appium:autoWebview` | Must be `boolean` |
| `appium:fullReset` | Must be `boolean`; mutually exclusive with `appium:noReset` |
| `appium:language` | Must be `string` |
| `appium:locale` | Must be `string` |
| `appium:orientation` | Must be either `LANDSCAPE` or `PORTRAIT` |
| `appium:noReset` | Must be `boolean`; mutually exclusive with `appium:fullReset` |
| `appium:udid` | Must be `string` |
@@ -0,0 +1,23 @@
---
hide:
- toc
title: Session Properties
---
An Appium session has several key properties, each with its own set of supported values:
capabilities, execute methods, settings, locator strategies, and others. The supported values for
each property are primarily defined by the active driver and plugins, but some properties also have
common values provided by the Appium server and its base driver:
<div class="grid cards" markdown>
- [__Capabilities__](./caps.md)
A small set of basic capabilities
- [__Command Endpoints__](../api/index.md)
The core set of API endpoints
</div>
+1 -5
View File
@@ -8,11 +8,6 @@ title: Additional Resources
Here you can find links to additional Appium resources around the web:
## Websites
- [Appium Pro](https://appiumpro.com) - a blog and newsletter written by one of Appium's
maintainers, Jonathan Lipps, with lots of useful guides
## Online Courses
- [Appium and Selenium Fundamentals](https://ui.headspin.io/university/learn/appium-selenium-fundamentals-2020) - a comprehensive video course on learning Python, Selenium, and Appium by Jonathan Lipps
@@ -26,3 +21,4 @@ maintainers, Jonathan Lipps, with lots of useful guides
- [AppiumConf 2021](https://www.youtube.com/playlist?list=PL9Z-JgiTsOYRCcJhDfmKAah9XmAp2b903)
- [AppiumConf 2024](https://www.youtube.com/playlist?list=PL9Z-JgiTsOYQaU5i5LJtAWlh5WVZPi3If)
- [SeleniumConf & AppiumConf 2025](https://www.youtube.com/playlist?list=PLRdSclUtJDYV2R92TLbmwxws6clruuTjH)
- [SeleniumConf & AppiumConf 2026](https://www.youtube.com/playlist?list=PLRdSclUtJDYVgVqdKnSyBLBmFdA0KE_Dk)
+8 -3
View File
@@ -22,6 +22,11 @@ Hub](https://opencollective.com/appium).
We are very grateful for the support of our Development Partners, who donate Appium development and
maintenance as part of their employees' core job duties!
<a href="https://www.testmuai.com">
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-dark.png#only-dark" width="250" alt="TestMu AI (formerly LambdaTest)" />
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-light.png#only-light" width="250" alt="TestMu AI (formerly LambdaTest)" />
</a>
## Strategic Partners
We are very grateful for the financial and marketing support of our exclusive Strategic Partners,
@@ -33,9 +38,9 @@ contributors!
<img src="/docs/en/latest/assets/images/sponsor-logo-browserstack-light.png#only-light" width="250" alt="BrowserStack" />
</a>
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
<img src="/docs/en/latest/assets/images/sponsor-logo-lambdatest-dark.png#only-dark" width="250" alt="LambdaTest" />
<img src="/docs/en/latest/assets/images/sponsor-logo-lambdatest-light.png#only-light" width="250" alt="LambdaTest" />
<a href="https://www.testmuai.com">
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-dark.png#only-dark" width="250" alt="TestMu AI (formerly LambdaTest)" />
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-light.png#only-light" width="250" alt="TestMu AI (formerly LambdaTest)" />
</a>
## Gold Sponsors
@@ -10,7 +10,7 @@ maintenance, and support from companies and volunteers. As such, we welcome cont
There are a lot of different ways to help the project - see below for everything you can do and the
processes to follow for each contribution method. Note that no matter how you contribute, your
participation is governed by our [Code of Conduct](https://github.com/appium/appium/blob/master/CONDUCT.md).
participation is governed by our [Code of Conduct](https://github.com/appium/.github/blob/master/CODE_OF_CONDUCT.md).
## Join the Discussion Forum
@@ -570,6 +570,33 @@ capability), and then to set an internal field to that value, so that it can be
bidiProxyUrl`. Once all this is in place, Appium will proxy BiDi commands from the client straight
to the upstream connection.
### Understand server-assigned driver properties and security flags
When your driver is running under the main Appium server, Appium assigns a small set of
server-related properties on your driver instance when a session is created:
- `cliArgs`: Driver-specific configuration derived from the Appium server’s CLI flags and/or
configuration files (for example via the `server.driver.<your-driver-name>` section). These
options are **not** user capabilities and cannot be influenced directly by test code.
- `server`, `serverHost`, `serverPort`, `serverPath`: Information about the HTTP server that is
hosting your driver. These values reflect how the Appium server was started (for example the
`--address`, `--port`, and `--base-path` flags) and are useful when your driver needs to construct
URLs that point back to the Appium server itself (for example when setting up proxies, webhooks,
or other callbacks).
`BaseDriver` and `AppiumDriver` also cooperate to expose security-related flags on your driver
instance:
- `relaxedSecurityEnabled`: Indicates whether the server is running with relaxed security enabled
(for example via `--relaxed-security`).
- `allowInsecure`: A list of insecure features which are explicitly allowed for this driver (derived
from server-level options like `--allow-insecure`).
- `denyInsecure`: A list of insecure features which are explicitly disabled for this driver (derived
from server-level options like `--deny-insecure`).
See [Hide behaviour behind security flags](#hide-behaviour-behind-security-flags) for how to use
these flags in your driver (e.g. via `isFeatureEnabled` and `assertFeatureEnabled`).
### Extend the existing protocol with new commands
You may find that the existing commands don't cut it for your driver. If you want to expose
@@ -579,7 +606,7 @@ three ways:
1. Extending the classic WebDriver protocol and creating client-side plugins to access the extensions via the classic HTTP interface
2. Extending the WebDriver BiDi protocol with new modules and methods, accessed from a client via the BiDi interface
3. Overloading the Execute Script command by defining Execute
Methods
Methods
If you want to follow the first path, you can direct Appium to recognize new methods and add them
to its set of allowed HTTP routes and command names. You do this by assigning the `newMethodMap`
@@ -685,17 +712,17 @@ async execute(script, args) {
A couple notes about this system:
1. The arguments array sent via the call to Execute Script must contain only zero or one element(s). The
first item in the list is considered to be the parameters object for your method. These parameters
will be parsed, validated, and then applied to your overload method in the order specified in
`executeMethodMap` (the order specified in the `required` parameters list, followed by the
`optional` parameters list). I.e., this framework assumes only a single actual argument sent in via
Execute Script (and this argument should be an object with keys/values representing the
parameters your execute method expects).
first item in the list is considered to be the parameters object for your method. These parameters
will be parsed, validated, and then applied to your overload method in the order specified in
`executeMethodMap` (the order specified in the `required` parameters list, followed by the
`optional` parameters list). I.e., this framework assumes only a single actual argument sent in via
Execute Script (and this argument should be an object with keys/values representing the
parameters your execute method expects).
2. Appium does not automatically implement `execute` (the Execute Script handler) for you. You may
wish, for example, to only call the `executeMethod` helper function when you're not in proxy
mode!
wish, for example, to only call the `executeMethod` helper function when you're not in proxy
mode!
3. The `executeMethod` helper will reject with an error if a script name doesn't match one of the
script names defined as a command in `executeMethodMap`, or if there are missing parameters.
script names defined as a command in `executeMethodMap`, or if there are missing parameters.
One of the nice things about the Execute Method strategy is that methods implemented in this way
will be available via the classic or BiDi interfaces (since they will result in the same Appium
@@ -770,7 +797,7 @@ that multiple simultaneous sessions don't use the same resources:
1. Have your users specify resource IDs via capabilities (`appium:driverPort` etc)
2. Just always use free resources (find a new random port for each session)
3. Have each driver express what resources it is using, then examine currently-used resources from
other drivers when a new session begins.
other drivers when a new session begins.
To support this third strategy, you can implement `get driverData` in your driver to return what
sorts of resources your driver is currently using, for example:
@@ -864,3 +891,120 @@ this.onUnexpectedShutdown(handler)
`handler` should be a function which receives an error object (representing the reason for the
unexpected shutdown).
### Send messages to plugins running on the same session
Appium's driver and plugin architecture means that a single driver and any number of plugins can be
running together for a current session. The driver and plugins don't really know anything about
each other though, which can make coordination potentially difficult. Without creating any kind of
tight coupling between drivers or plugins, it's possible for drivers and plugins to communicate
along a pub/sub style message bus. With Appium's IPC feature, "message" means a combination of
"data" (the data intended to be published or received), and metadata (timestamp, the name of the
publisher, etc...).
Drivers and plugins can implement an instance method called `async onIpcInit`, in which they will
know that the IPC channel for the session is now active. At this point, they have access to the
following methods:
#### `ipcSubscribe<T>(topic: string): IIpcSubscription`
This method allows a driver or plugin to subscribe to a topic on the IPC channel for the session.
Topics are simply strings. To coordinate effectively, drivers or plugins would use the same topic
string (so this would be something advertised in the driver/plugin documentation).
The result of this call is an `IpcSubscription` object that allows:
- Looping through messages on the topic via an async generator
- Hooking up an event handler for new messages
- Getting the last message sent on the topic
- Publishing a message to the topic
- Unsubscribing from the topic
#### `IpcSubscription` object
Here is an example of how subscribing and use of these subscription methods might work:
```ts
async onIpcInit() {
// we know at this point in our driver/plugin lifecycle that we can use IPC methods
type MyMessageData = {myData: string}; // let's say the message data for this channel has this shape
const subscription = this.ipcSubscribe<MyMessageData>('coolTopic');
// listen for new messages on topic
subscription.on('message', (message) => {
console.log(message.data); // {myData: 'something'}
});
// publish data to the topic; might throw if the data is larger than configured max size, or we
// are no longer subscribed
await subscription.publish({myData: 'hi'});
// get last message sent to topic
const {data} = subscription.getMessage() ?? {data: null};
// data = {myData: 'hi'}
// unsubscribe
subscription.unsubscribe(); // returns true if we unsubscribed and false if no subscription existed
}
```
With a subscription object, we can also iterate async over it to receive new messages:
```ts
for await (const message of subscription) {
// here we have a message and can unwrap its data
}
```
Note that the iteration will stop when the subscription ends (i.e., when `unsubscribe` is called).
You can also check whether the subscription is still active (if your subscribe and unsubscribe
logic is not locally connected):
```ts
if (subscription.isActive) {
// we know we have not yet unsubscribed
}
```
If the subscription is not active, attempts to call `subscription.publish` will throw an error.
#### `IpcMessage` object
When you get a message on a topic, it has the following shape:
```ts
export type IpcMessage<T> = {
publisher: string, // the id of the publishing object (typically of the form <ClassName>@<uniqueObjectId>)
timestampMs: number, // when the message was published, in ms since epoch
topic: string, // the topic the message was published on
data: T, // the arbitrary message data. Must be serializable and a valid argument to 'structuredClone()'
};
```
#### IPC Notes
There are some important things to keep in mind when using Appium's IPC feature:
- IPC is only available once `onIpcInit` has been called, at the end of the `createSession` flow.
It cannot be used statically or in `createSession` hooks
- In sum, IPC is only for use during a session (this is also to prevent drivers/plugins from
accessing or reading data sent on IPC channels in other sessions.)
- The default max size of an IPC message is 1MB. This can be configured by the server-admin by
using the `--max-ipc-data-size` arg (value is a number in bytes).
- If a message exceeds the configured size, any call to `publish` methods will throw, so be
sure to cover this case in your error handling.
- The default max number of IPC topics per session is 1000. This can be configured by the
server-admin using the `--max-ipc-topics` arg.
- If the topic limit is reached, calls to `subscribe` or `publish` on a new topic will throw, so
be sure to cover this case in your error handling.
- Topic names exist within a global namespace per session. So if you don't want to clash with other
drivers or plugins, make sure you prefix your topic names with something unique, akin to vendor
prefixes in the WebDriver standard (for example: `fake-driver:some-topic`). We recommend the
format `<namespace>:<topic>`.
To see examples of IPC in action, check out Appium's own
[FakeDriver](https://github.com/appium/appium/blob/master/packages/fake-driver/lib/driver.ts) and
[FakePlugin](https://github.com/appium/appium/blob/master/packages/fake-plugin/lib/plugin.ts)
extensions, which showcase several ways of using IPC messages.
@@ -236,13 +236,13 @@ upstream server. In this case, we might run into a problem, because the plugin n
handle that command! The way Appium handles this is as follows:
1. When a command comes in, before deciding whether to proxy the command, the main protocol handler
checks to see whether a plugin would handle the command.
checks to see whether a plugin would handle the command.
2. If a plugin would _not_ handle the command--all proceeds as normal, and the request is either
proxied or not, based on the driver's proxy mode.
proxied or not, based on the driver's proxy mode.
3. If a plugin _would_ handle the command, then the proxy behavior is skipped for the time being,
and wrapped up as the `next` function sent to the plugin. So if you have a command handler in
your plugin, and you want to be sure that the default driver proxying _does_ take place, then
simply `await next()` instead of (or in addition to) whatever your plugin handler is doing.
and wrapped up as the `next` function sent to the plugin. So if you have a command handler in
your plugin, and you want to be sure that the default driver proxying _does_ take place, then
simply `await next()` instead of (or in addition to) whatever your plugin handler is doing.
### Throw WebDriver-specific errors
@@ -331,7 +331,7 @@ drivers, you can create new commands in one of two ways, just as is possible for
1. Extending the WebDriver protocol and creating client-side plugins to access the extensions
2. Extending the WebDriver BiDi protocol with new modules and methods, accessed from a client via the BiDi interface
3. Overloading the Execute Script command by defining Execute
Methods
Methods
#### Extending the HTTP Protocol
@@ -458,10 +458,10 @@ inside the plugin class:
1. The `executeMethodMap`, defined in just the same way as for drivers
2. The implementation of the command method as defined in `executeMethodMap` (in this case,
`plugMeIn`)
`plugMeIn`)
3. The overriding/handling of the `execute` command. Just like any plugin command handlers, the
first two arguments are `next` and `driver`, followed by the script name and args. `BasePlugin`
implements a helper method which we can simply call with all of these arguments.
first two arguments are `next` and `driver`, followed by the script name and args. `BasePlugin`
implements a helper method which we can simply call with all of these arguments.
Overriding Execute Methods from drivers works as you'd expect: if your plugin defines an Execute
Method with the same name as that of a driver, your command (in this case `plugMeIn`) will be
@@ -518,3 +518,12 @@ async onUnexpectedShutdown(driver, cause) {
}
}
```
### Send messages to the driver or other plugins running on the same session
Even though drivers and plugins don't know anything about each other, it's possible for them to
send messages that other drivers or plugins can listen for, within the context of the same session,
using an IPC channel. Given that the developer instructions for this feature are the same for
drivers and plugins, please head over to the IPC development docs for
drivers at the driver
development guide.
@@ -29,7 +29,7 @@ In lieu of a separate file, configuration can be embedded in a project's `packag
```
When an Appium server is started via the `appium` executable, the `init` function in `lib/main.js`
will call into `lib/config-file.js` to load and/or search for a configuration file and in
will call into `lib/bootstrap/config-file.js` to load and/or search for a configuration file and in
`package.json`.
!!! note
@@ -72,7 +72,7 @@ It is more straightforward to explain how config files are validated, so we'll s
### Validating Config Files
When a config file is found (`lib/config-file.js`), it will call the `validate` function exported
When a config file is found (`lib/bootstrap/config-file.js`), it will call the `validate` function exported
from `lib/schema/schema.js` with the contents of the config file. In turn, this asks `ajv` to
validate the data against the schema that Appium has provided it.
+55 -27
View File
@@ -21,6 +21,48 @@ Appium has a graphical client which can be used to inspect application screensho
application hierarchy, search for elements, run Appium commands, record app interactions, and more.
It can be very useful for Appium test development.
\=== "Install as an Appium Plugin"
````
```bash
appium plugin install inspector
```
````
\=== "Install Standalone"
```
Download the app from the Appium Inspector repo's [GitHub Releases section](https://github.com/appium/appium-inspector/releases).
```
### [Appium MCP](https://github.com/appium/appium-mcp)
Appium MCP is a Model Context Protocol (MCP) server that provides mobile test development and
automation capabilities using Appium.
```json title="Install This Tool"
// Add the following to your MCP client configuration
{
"appium-mcp": {
"disabled": false,
"timeout": 100,
"type": "stdio",
"command": "npx",
"args": ["appium-mcp@latest"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
```
### [Skills](https://github.com/appium/skills)
A set of AI Agent skills to support Appium automation, for example:
- Help preparing Appium test environment from scratch, including common driver setup
- Help preparing XCUITest driver and WebDriverAgent for real device automation
## Extension Tools
Appium driver or plugin developers can choose to include these tools in their driver/plugin:
@@ -35,7 +77,7 @@ details needed for the driver/plugin have been set up correctly. The tool can be
appium {driver|plugin} doctor <extension-name>
```
It shows no results if the driver/plugin author did not implement Doctor support.
It shows no results if the driver/plugin does not have such validation checks.
!!! note
@@ -48,6 +90,18 @@ out the documentation on [Building Doctor Checks](../developing/build-doctor-che
These tools are not maintained by the Appium team:
### [AppClaw](https://github.com/AppiumTestDistribution/AppClaw)
AppClaw is a CLI-based agentic AI layer for mobile automation, powered by [Appium MCP](#appium-mcp).
Agent instructions can be passed directly via CLI, or defined as YAML flows in either structured
or natural language syntax.
Supported by: `@AppiumTestDistribution`
```sh title="Install This Tool"
npm install -g appclaw
```
### [Appium Installer](https://github.com/AppiumTestDistribution/appium-installer)
Appium Installer is a command-line tool for simplifying setups of new Appium test environments.
@@ -59,29 +113,3 @@ Supported by: `@AppiumTestDistribution`
```sh title="Install This Tool"
npm install -g appium-installer
```
### [Jarvis Appium](https://github.com/AppiumTestDistribution/mcp-appium)
Jarvis Appium is a Model Context Protocol (MCP) server that provides mobile test development and
automation capabilities using Appium.
Supported by: `@AppiumTestDistribution`
```json title="Install This Tool"
// Add the following to your MCP client configuration
{
"mcpServers": {
"jarvis-appium": {
"disabled": false,
"timeout": 100,
"type": "stdio",
"command": "npx",
"args": ["jarvis-appium"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk",
"CAPABILITIES_CONFIG": "/path/to/your/capabilities.json"
}
}
}
}
```
+50 -33
View File
@@ -2,9 +2,14 @@
title: Session Capabilities
---
「Capabilities」は、Appiumセッションを開始するために使用されるパラメータセットに付けられた名前です。 セット内の情報は、セッションにどのような「Capabilities」を持たせたいかを表します。たとえば、特定のモバイルオペレーティングシステムや特定のデバイスバージョンなどです。 Capabilities はキーと値のペアとして表され、値には他のオブジェクトを含む任意の有効な JSON 型を使用できます。
Capabilities are the core parameters used to start an Appium session. They describe various
features that you want your session to have, for example, a certain mobile operating system or a
certain version of a device. Capabilities are represented as key-value pairs, with values allowed
to be any valid JSON type, including other objects. Most importantly, they cannot be changed
during the lifecycle of the session.
W3C WebDriver 仕様の [Capabilities に関するセクション](https://w3c.github.io/webdriver/#capabilities) では、以下の機能を含む 10 個の標準機能のセットが定義されています:
The capabilities used in Appium follow [the W3C WebDriver specification of the same name](https://w3c.github.io/webdriver/#capabilities).
The WebDriver spec defines a small set of standard capabilities, including the following:
| Capability 名 | 型 | 説明 |
| ---------------- | -------- | --------------------- |
@@ -12,51 +17,64 @@ W3C WebDriver 仕様の [Capabilities に関するセクション](https://w3c.g
| `browserVersion` | `string` | ブラウザのバージョン |
| `platformName` | `string` | ブラウザをホストするプラットフォームの種類 |
While the above capabilities are commonly used by Appium drivers, they are not sufficient for
describing Appium-specific features, such as the name of the driver to use, or the name of the app
to launch. In order to achieve this, Appium defines its own [extension capabilities](https://w3c.github.io/webdriver/#dfn-extension-capability).
## 一般的なAppiumのCapabilities
Appium はこれらのブラウザに焦点を当てた capabilities を理解しますが、いくつかの capabilities も追加導入しています。 WebDriver 仕様によれば、非標準の「拡張 capabilities」には、capabilities を導入したベンダーを示す名前空間となる接頭辞(末尾に「:」)を含める必要があります。 Appium の接頭辞は「appium:」であるため、Appium 固有の capabilities には必ずこの接頭辞を含める必要があります。 使用しているクライアントによっては接頭辞が自動的に追加される場合もあれば、特定のインターフェースと組み合わせて追加される場合もありますが、明確にするために明示的に追加することをお勧めします。
According to the WebDriver spec, extension capabilities must include a namespace prefix (signifying
the vendor introducing the capability), and the namespace must end a colon (`:`). Appium's vendor
prefix is `appium:`, and so any Appium-specific capabilities must include this prefix. Depending on
your Appium client, the prefix may be added automatically or in conjunction with certain interfaces,
but it is always a good practice to explicitly include it for clarity.
以下は様々なドライバーで認識される Appium の capabilities の一覧です:
Here are a few commonly (but not universally!) used Appium-specific capabilities:
!!! info
| Capability 名 | 型 | Description |
| ----------------------- | -------- | --------------------------------------------------------------- |
| `appium:automationName` | `string` | 使用するAppiumドライバの名前 |
| `appium:udid` | `string` | The unique device identifier of a particular device to automate |
| `appium:app` | `string` | インストール可能なアプリケーションへのパス |
```
個々のドライバやプラグインは独自の capabilities をサポートしている場合があるため、具体的な capability 名のリストについては、それぞれのドキュメントを参照してください。また、一部のドライバはこれらの capabilities をすべてサポートしていない場合があります
```
All capabilities recognized by the Appium base driver (inherited by all drivers) can be found in the
[Capabilities Reference document](../reference/session/caps.md). While this common capability set
is fairly small, it can be greatly extended by Appium drivers and plugins, who can (and should)
define their own capabilities. Make sure to reference their documentation to learn more about the
capabilities they support. You can find a list of known drivers in the [Ecosystem Drivers](../ecosystem/drivers.md) document.
| <div style="width:12em">Capability 名</div> | 型 | 必須か | 説明 |
| ------------------------------------------ | --------- | --- | ------------------------------------------------------------------------------------------------------------------------- |
| `platformName` | `string` | はい | アプリまたはブラウザをホストするプラットフォームの種類 |
| `appium:automationName` | `string` | はい | 使用するAppiumドライバの名前 |
| `browserName` | `string` | いいえ | ドライバーが特別なケースとしてWebブラウザーをサポートしている場合、起動して自動化するブラウザーの名前 |
| `appium:app` | `string` | いいえ | インストール可能なアプリケーションへのパス |
| `appium:deviceName` | `string` | いいえ | 自動化する特定のデバイスの名前、例:`iPhone 14`(現在のところ、iOS シミュレーターを指定する場合にのみ役立ちます。他の状況では通常、`appium:udid` 機能を使用して特定のデバイス Id を使用することをお勧めします)。 |
| `appium:platformVersion` | `string` | いいえ | プラットフォームのバージョン(例:iOS の場合は `16.0`) |
| `appium:newCommandTimeout` | `number` | いいえ | クライアントがこれ以上コマンドを送信してこないと判断しセッションを終了する前に、Appium サーバーがクライアントからのコマンド送信を待機する秒数。 デフォルトは `60` 秒。 ゼロに設定するとタイマーが無効になります。 |
| `appium:noReset` | `boolean` | いいえ | true の場合、セッションの開始とクリーンアップ中に通常のリセット処理を回避するように Appium ドライバーに指示します (デフォルトは `false`) |
| `appium:fullReset` | `boolean` | いいえ | true の場合、Appium ドライバーに通常のリセット処理に追加の手順を追加して、環境の再現性を最大限に高めるように指示します (デフォルトは `false`) |
| `appium:eventTimings` | `boolean` | いいえ | true の場合、Appium ドライバーに [Event Timings](./event-timing.md) を収集するように指示します (デフォルトは `false`) |
| `appium:printPageSourceOnFindFailure` | `boolean` | いいえ | true の場合、要素の検索リクエストが失敗するたびにページソースを収集し、Appium ログに出力します (デフォルトは `false`) |
Drivers are also able to place more complex constraints on capabilities as a group. For example,
the XCUITest driver recommends that at least one of `browserName`, `appium:app`, or `appium:bundleId`
is included in the capabilities, otherwise it will not be able to auto-install or auto-launch any
application. Each driver will document how it interprets these capabilities and any other
platform-specific requirements.
ドライバーの中には、capabilitiesのより複雑な制約をグループとして設定しているものもあります。 たとえば、`appium:app` および `browserName` capabilities は上記では必須ではないと記載していますが、特定のアプリでセッションを開始する場合、XCUITest ドライバーは、`appium:app`、`browserName`、または `appium:bundleId` の少なくとも1 つが capabilities に含まれていることが必要です (含まれていない場合、どのアプリをインストールまたは起動すればよいか判断できないため、ホーム画面からセッションが開かれます)。 各ドライバーは、これらの capabilities やその他のプラットフォーム固有の要件をどのように解釈するかを記述しています。
The way to construct capabilities and start a session will likely differ depending on your Appium
client. For examples of doing this in each client library, head to the [Ecosystem Clients](../ecosystem/clients.md)
page and click through to the appropriate client documentation.
!!! note
```
Capabilitiesは、セッション開始時に使用されるパラメータのようなものです。Capabilitiesが送信され、セッションが開始された後変更できません。ドライバーがセッション中に動作の一部を更新する場合、capabilitiesの代わりに、またはcapabilitiesに加えて、[Settings](./settings.md)も利用可能です。
Once your capabilities are sent to the server and the session is started, they cannot be
changed. If a driver supports updating its behaviour during a session, it will use the
[Settings API](./settings.md) for this purpose.
```
各 Appium クライアントには、capabilities を構築し、セッションを開始する独自の方法があります。 各クライアントライブラリでこれを行う例については、[エコシステム](../ecosystem/index.md) ページにアクセスし、適切なクライアントドキュメントをクリックしてください。
## BiDi プロトコルのサポート
Appiumは、base-driver 9.5.0以降で[WebDriver BiDi](https://w3c.github.io/webdriver-bidi/)プロトコルをサポートしています。
実際の動作は個々のドライバーによって異なりますが、Appium と base-driver はプロトコルをサポートしています。
ドライバーが BiDi プロトコルをサポートしているかどうか、また、どのようなコマンド/イベントをサポートしているかはドキュメントで確認してください。
In addition to the standard WebDriver protocol (now known as WebDriver Classic), Appium supports the
[WebDriver BiDi](https://w3c.github.io/webdriver-bidi/) protocol. Support for this protocol is
opt-in, and requires the use of the standard `webSocketUrl` capability.
| Capability 名 | 型 | 説明 |
| -------------- | --------- | ------------------------- |
| `webSocketUrl` | `boolean` | セッションで BiDi プロトコルを有効にします。 |
| Capability Name | 型 | 説明 |
| --------------- | --------- | ----------------------------------------------- |
| `webSocketUrl` | `boolean` | Whether BiDi protocol is enabled in the session |
All BiDi commands supported by the Appium base driver (inherited by all drivers) can be found in the
[BiDi Protocol API Reference document](../reference/api/bidi.md). Similarly to WebDriver Classic
commands, individual Appium drivers and plugins can define their own supported standard and custom
BiDi commands, so make sure to reference their documentation.
## `appium:options` を使用して機能をグループ化する
@@ -99,8 +117,7 @@ creates in response to a new session request. This is through the concept of "al
!!! note
```
Check out the [spec itself](https://w3c.github.io/webdriver/#processing-capabilities) or
a [summarized version](https://github.com/jlipps/simple-wd-spec#processing-capabilities) for
Check out the [spec itself](https://w3c.github.io/webdriver/#processing-capabilities) for
a more in-depth description of how capabilities are processed.
```
+26 -32
View File
@@ -3,27 +3,27 @@ title: Appium Server Security
---
The Appium team makes every effort to ensure the security of the Appium server. This is especially
important when Appium is run in a multitenant environment, or when multiple users are running
sessions on the same Appium server. In general, you can only safely enable all of Appium's features if
all the following are true:
important when Appium is run in a multi-tenant environment, or when multiple users are running
sessions on the same Appium server. To ensure a safe environment for Appium's purposes, all of the
following should be true:
- You're running your own Appium server locally or within a protected internal network
- You're not sharing it with any untrusted parties
- You don't expose Appium's port(s) to the wider internet
But because many Appium users might not be able to guarantee such a safe environment, the Appium
team puts many features behind a security protection mechanism, which forces system admins (the
people who are in charge of starting the Appium server) to _explicitly opt-in_ to these features.
(Third-party driver and plugin authors can also hide behaviour behind security
flags.)
But because not all Appium hosts can guarantee such a safe environment, certain insecure Appium
features are disabled by default, and require explicit opt-in in order to enable them. Most
importantly, this can _only_ be done by the Appium server _host_, and Appium _client_ sessions are
not allowed to change this.
For security reasons, Appium client sessions can _not_ request feature enablement via capabilities.
This is the responsibility of the server admin who configures and launches the Appium server.
While it is possible for an Appium host to simply enable all insecure features at once, each
feature also has a unique name, which can be used for granular control over the server state.
## Security Server Args
The [Server CLI](../reference/cli/server.md) doc outlines three relevant arguments which may be passed to
Appium, when starting it from the command line:
Enabling or disabling insecure features is done via [Appium server launch arguments](../reference/cli/server.md)
or [configuration file](./config.md). The former document outlines three relevant arguments for
achieving this:
| <div style="width:10em">Parameter</div> | Description |
| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -31,36 +31,30 @@ Appium, when starting it from the command line:
| `--allow-insecure` | Turns on _only_ specified features, except those blocked by `--deny-insecure`. Has no effect when used in combination with `--relaxed-security` |
| `--deny-insecure` | Explicitly turns _off_ specified features, overriding `--relaxed-security` and `--allow-insecure` |
All of the above arguments can also be specified in the [Appium Configuration file](./config.md).
Features passed to `--allow-insecure`/`--deny-insecure` must be specified as a comma-separated list,
and each feature in the list must additionally include a prefix, indicating the driver to which the
feature should apply. The prefix can be either the driver's `automationName`, or the wildcard (`*`)
symbol, if the feature should be applied to all drivers. The prefix and feature name are separated
using the colon character (`:`).
and each feature in the list must additionally include a prefix, indicating the driver to whose
sessions the feature should apply. The prefix can be either the driver's `automationName`, or the
wildcard (`*`) symbol, if the feature should be applied to all drivers. The prefix and feature name
are separated using the colon character (`:`).
For example, `first:foo` refers to the `foo` feature for the `first` driver, whereas `*:bar` refers
to the `bar` feature for all drivers.
## Insecure Features
Each Appium driver is responsible for its own security, and can create its own feature names. Thus,
you should read through the documentation for a particular driver to know which feature names it
might use. Here is an incomplete list of examples from some of Appium's official drivers:
Almost all insecure features are defined on a per-driver or plugin basis, so make sure to read the
documentation for a particular driver/plugin to know which feature names it might use.
| <div style="width:12em">Feature Name</div> | Description | Supported Extension(s) |
| ------------------------------------------ | --------------------------------------------------------------------------------------- | ---------------------------------------------- |
| `get_server_logs` | Allows retrieving of Appium server logs via the Webdriver log interface | IOS, XCUITest, Android, UiAutomator2, Espresso |
| `adb_shell` | Allows execution of arbitrary shell commands via ADB, using the `mobile: shell` command | Android, UiAutomator2, Espresso |
| `record_audio` | Allow recording of host machine audio inputs | XCUITest |
| `execute_driver_script` | Allows sending a request that has multiple Appium commands. | Execute Driver Plugin |
Certain insecure features are also defined on the Appium server itself. For a list of these
features, as well as the features defined in official plugins, see
[the Insecure Features CLI Reference](../reference/cli/insecure-features.md) doc.
Some insecure features operate on the server level and do not require a driver session. Enabling
these features require using the wildcard prefix:
!!! note
| <div style="width:12em">Feature Name</div> | Description |
| ------------------------------------------ | ------------------------------------------------------------------------------- |
| `session_discovery` | Allows retrieving the list of active server sessions via `GET /appium/sessions` |
```
If you are a driver or plugin author and want to implement insecure features of your own, check
out the [Building Drivers documentation](../developing/build-drivers.md#understand-server-assigned-driver-properties-and-security-flags).
```
## Examples
+3 -3
View File
@@ -30,9 +30,9 @@ Appiumのドキュメントにようこそ! Appiumはオープンソースプ
</a>
</div>
<div class="homepageSponsor">
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
<img src="assets/images/sponsor-logo-lambdatest-dark.png#only-dark" style="width: 220px;" />
<img src="assets/images/sponsor-logo-lambdatest-light.png#only-light" style="width: 220px;" />
<a href="https://www.testmuai.com">
<img src="assets/images/sponsor-logo-testmuai-dark.png#only-dark" style="width: 220px;" />
<img src="assets/images/sponsor-logo-testmuai-light.png#only-light" style="width: 220px;" />
</a>
</div>
</div>
@@ -397,6 +397,45 @@ Deletes the virtual sensor with the type identified by `:sensorType`.
`null`
## Global Privacy Control Protocol
The [Global Privacy Control protocol](https://www.w3.org/TR/gpc) (GPC) is an extension of the W3C
WebDriver protocol.
### setGlobalPrivacyControl
```
POST /session/:sessionId/privacy
```
> GPC documentation: [Set Global Privacy Control](https://www.w3.org/TR/gpc/#set-global-privacy-control)
Sets the value of the do-not-sell-or-share preference for the current session.
#### Parameters
| Name | Description | Type |
| ----- | -------------------------------------------------------------------- | ------- |
| `gpc` | Whether the browser should perform do-not-sell-or-share interactions | boolean |
#### Response
`null`
### getGlobalPrivacyControl
```
GET /session/:sessionId/privacy
```
> GPC documentation: [Get Global Privacy Control](https://www.w3.org/TR/gpc/#get-global-privacy-control)
Retrieves the value of the do-not-sell-or-share preference for the current session.
#### Response
`boolean` - the preference value
## Permissions Protocol
The [Permissions protocol](https://www.w3.org/TR/permissions/) is an extension of the W3C WebDriver
@@ -524,6 +563,32 @@ Retrieves the available log types that can be used to call the [`getLog`](#getlo
`string[]` - an array of log types
## Storage Access Protocol
The [Storage Access protocol](https://privacycg.github.io/storage-access/) is an extension of the
W3C WebDriver protocol.
### setStorageAccess
```
POST /session/:sessionId/storageaccess
```
> Storage Access documentation: [Set Storage Access](https://privacycg.github.io/storage-access/#set-storage-access-command)
Sets the storage access policy of the current browsing context.
#### Parameters
| Name | Description | Type |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
| `blocked` | Whether storage access should be blocked (`true`) or allowed (`false`) | boolean |
| `origin` | The origin to which the policy should be applied. Must be either a valid URL, or an asterisk (`*`) if the policy should apply to all origins. | string |
#### Response
`null`
## Web Authentication Protocol
The [Web Authentication protocol](https://w3c.github.io/webauthn/) (WebAuthn) is an extension of
@@ -224,7 +224,7 @@ Deletes a file in the storage.
#### Response
`boolean` - `true` upon successful file deletion, or `false` if the file does not exist in
the storage
the storage, or if the delete request is invalid.
### listStorageItems
@@ -118,6 +118,12 @@ appium {driver|plugin} install <install-spec>
appium driver install git://github.com/appium/appium-xcuitest-driver.git --source=git --package=appium-xcuitest-driver
```
- Install a branch of XCUITest driver repository using a Git URL:
```
appium driver install git://github.com/appium/appium-xcuitest-driver.git#specific-branch --source=git --package=appium-xcuitest-driver
```
## `list`
Lists all installed extensions, plus all official extensions that are not installed.
@@ -135,6 +141,7 @@ appium {driver|plugin} list
| `--installed` | Only list all installed extensions | boolean |
| `--json` | Return the result in JSON format | boolean |
| `--updates` | List all extensions along with information on whether newer versions are available. Only supported for extensions installed via `npm`. | boolean |
| `--verbose` | Show additional details for each extension | boolean |
#### Example
@@ -31,5 +31,6 @@ The executable has four main subcommands: `server`, `driver`, `plugin`, and `set
</div>
Appium also recognizes several [environment variables](./env-vars.md), which may be used for
advanced configuration.
The Appium server also recognizes several [environment variables](./env-vars.md) and
[insecure feature names](./insecure-features.md), though drivers and plugins can also define
variables and features of their own.
@@ -0,0 +1,23 @@
---
hide:
- toc
title: Insecure Features
---
The Appium server implements [a security protection mechanism](../../guides/security.md) that
allows the management of various insecure features.
The following features are defined on the server level and can be used even without drivers, but
they can only be enabled using the wildcard (`*`) prefix:
| Feature Name | Description |
| ------------------- | ------------------------------------------------------------------------------- |
| `session_discovery` | Allows retrieving the list of active server sessions via `GET /appium/sessions` |
Of course, Appium drivers and plugins are free to define additional insecure features of their own.
The following features are defined by official plugins:
| Feature Name | Plugin | Description |
| ----------------------- | ---------------- | ---------------------------------------------------------- |
| `execute_driver_script` | `execute_driver` | Allows sending a request that has multiple Appium commands |
@@ -29,6 +29,7 @@ appium
| `--address`, `-a` | IPv4/IPv6 address to listen on | string | `0.0.0.0` |
| `--allow-cors` | Allow web browser connections from any host | boolean | `false` |
| `--allow-insecure` | List of [insecure features](../../guides/security.md) that should be allowed in this server's sessions. Individual features can be overridden by `--deny-insecure`. Has no effect in combination with `--relaxed-security`. | array<string> | `[]` |
| `--allow-unknown-args` | Do not exit if unrecognized command-line arguments are passed to the server; ignore them instead. Useful when the Appium CLI is wrapped by external tooling that appends extra flags. | boolean | `false` |
| `--base-path`, `-pa` | Base path to use as the prefix for all webdriver routes running on the server | string | `""` |
| `--callback-address`, `-ca` | Callback IP address | string | `0.0.0.0` |
| `--callback-port`, `-cp` | Callback port | integer | `4723` |
@@ -48,6 +49,8 @@ appium
| `--log-no-colors` | Disable colors in the server log | boolean | `false` |
| `--log-timestamp` | Show timestamps in the server log | boolean | `false` |
| `--long-stacktrace` | Add long stack traces to log entries. Recommended for debugging only. | boolean | `false` |
| `--max-ipc-data-size` | Maximum byte size of IPC message objects. | integer | `1048576` (1MB) |
| `--max-ipc-topics` | Maximum number of IPC topics per session. | integer | `1000` |
| `--no-perms-check` | Skip various permission checks on the server startup | boolean | `false` |
| `--nodeconfig` | JSON configuration for registering Appium as a node with Selenium Grid 3 | object | |
| `--plugin` | Plugin-specific configuration. Keys should correspond to plugin package names | object | |
+9 -3
View File
@@ -5,8 +5,8 @@ hide:
title: Reference
---
This section of the Appium documentation provides a reference to the two main interfaces within the
Appium server: the command-line executable, and the supported API endpoints.
This section of the Appium documentation provides a reference to the core interfaces supported within the
Appium server:
<div class="grid cards" markdown>
@@ -16,10 +16,16 @@ Appium server: the command-line executable, and the supported API endpoints.
Learn how to use the Appium command-line executable
- :material-lan-connect: [**Session Properties**](./session/index.md)
---
See the values of global Appium session properties
- :material-cloud-braces: [**API Endpoints**](./api/index.md)
---
View endpoints supported by the Appium server
View endpoints supported by the core Appium server
</div>
@@ -0,0 +1,56 @@
---
hide:
- toc
title: Capabilities
---
The following [capabilities](../../guides/caps.md) are recognized by the Appium server/base driver,
and are therefore supported by all drivers as well. Some capabilities are directly handled by the
server/base driver, while others are only validated before being passed to the actual driver.
!!! note
Capabilities not listed here will _not_ be rejected by Appium: they will simply be forwarded
directly to the active driver/plugin.
### Required Capabilities
These capabilities are used in the Appium server/base driver, and are explicitly required in all
Appium sessions.
| Capability | Description | Type |
| ----------------------- | ------------------------------------------- | -------- |
| `platformName` | Type of platform hosting the app or browser | `string` |
| `appium:automationName` | Name of the Appium driver to use | `string` |
### Optional Capabilities
These capabilities are used in the Appium server/base driver, but are optional, and may have a
default value.
| <div style="width:19em">Capability</div> | Description | Type | Default |
| ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------- |
| `webSocketUrl` | Toggle support of the WebDriver BiDi protocol | `boolean` | |
| `appium:eventTimings` (deprecated) | Toggle collection of [Event Timings](../../guides/event-timing.md). This capability is deprecated - please use the [`getLogEvents`](../api/appium.md#getlogevents) endpoint instead. | `boolean` | |
| `appium:newCommandTimeout` | Number of seconds the Appium server should wait for clients to send commands before stopping the session. A value of `0` disables the timeout. | `number` | `60` |
| `appium:printPageSourceOnFindFailure` | Toggle retrieval of the the page source and its printing to the Appium log, whenever a request to find an element fails | `boolean` | |
### Validated Capabilities
These capabilities are not directly used in the Appium server/base driver, but are still subject to
validation checks due to their relevance in other drivers. The actual handling of these
capabilities is optional and entirely driver-dependent.
| Capability | Validation |
| --------------------------------------------------- | ------------------------------------------------------------- |
| `platformVersion` | Must be `string` |
| `appium:app` | Must be `string`; empty values are ignored |
| `appium:autoLaunch` (deprecated) | Must be `boolean` |
| `appium:autoWebview` | Must be `boolean` |
| `appium:fullReset` | Must be `boolean`; mutually exclusive with `appium:noReset` |
| `appium:language` | Must be `string` |
| `appium:locale` | Must be `string` |
| `appium:orientation` | Must be either `LANDSCAPE` or `PORTRAIT` |
| `appium:noReset` | Must be `boolean`; mutually exclusive with `appium:fullReset` |
| `appium:udid` | Must be `string` |
@@ -0,0 +1,23 @@
---
hide:
- toc
title: Session Properties
---
An Appium session has several key properties, each with its own set of supported values:
capabilities, execute methods, settings, locator strategies, and others. The supported values for
each property are primarily defined by the active driver and plugins, but some properties also have
common values provided by the Appium server and its base driver:
<div class="grid cards" markdown>
- [**Capabilities**](./caps.md)
A small set of basic capabilities
- [**Command Endpoints**](../api/index.md)
The core set of API endpoints
</div>
+1 -5
View File
@@ -8,11 +8,6 @@ title: Additional Resources
Here you can find links to additional Appium resources around the web:
## Websites
- [Appium Pro](https://appiumpro.com) - a blog and newsletter written by one of Appium's
maintainers, Jonathan Lipps, with lots of useful guides
## Online Courses
- [Appium and Selenium Fundamentals](https://ui.headspin.io/university/learn/appium-selenium-fundamentals-2020) - a comprehensive video course on learning Python, Selenium, and Appium by Jonathan Lipps
@@ -26,3 +21,4 @@ Here you can find links to additional Appium resources around the web:
- [AppiumConf 2021](https://www.youtube.com/playlist?list=PL9Z-JgiTsOYRCcJhDfmKAah9XmAp2b903)
- [AppiumConf 2024](https://www.youtube.com/playlist?list=PL9Z-JgiTsOYQaU5i5LJtAWlh5WVZPi3If)
- [SeleniumConf & AppiumConf 2025](https://www.youtube.com/playlist?list=PLRdSclUtJDYV2R92TLbmwxws6clruuTjH)
- [SeleniumConf & AppiumConf 2026](https://www.youtube.com/playlist?list=PLRdSclUtJDYVgVqdKnSyBLBmFdA0KE_Dk)
+8 -3
View File
@@ -22,6 +22,11 @@ Hub.
We are very grateful for the support of our Development Partners, who donate Appium development and
maintenance as part of their employees' core job duties!
<a href="https://www.testmuai.com">
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-dark.png#only-dark" width="250" alt="TestMu AI (formerly LambdaTest)" />
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-light.png#only-light" width="250" alt="TestMu AI (formerly LambdaTest)" />
</a>
## Strategic Partners
We are very grateful for the financial and marketing support of our exclusive Strategic Partners,
@@ -33,9 +38,9 @@ contributors!
<img src="/docs/en/latest/assets/images/sponsor-logo-browserstack-light.png#only-light" width="250" alt="BrowserStack" />
</a>
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
<img src="/docs/en/latest/assets/images/sponsor-logo-lambdatest-dark.png#only-dark" width="250" alt="LambdaTest" />
<img src="/docs/en/latest/assets/images/sponsor-logo-lambdatest-light.png#only-light" width="250" alt="LambdaTest" />
<a href="https://www.testmuai.com">
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-dark.png#only-dark" width="250" alt="TestMu AI (formerly LambdaTest)" />
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-light.png#only-light" width="250" alt="TestMu AI (formerly LambdaTest)" />
</a>
## Gold Sponsors
+4
View File
@@ -42,6 +42,10 @@ nav:
- reference/cli/extensions.md
- reference/cli/setup.md
- reference/cli/env-vars.md
- reference/cli/insecure-features.md
- Session Properties:
- reference/session/index.md
- reference/session/caps.md
- API Endpoints:
- reference/api/index.md
- reference/api/webdriver.md
+4
View File
@@ -42,6 +42,10 @@ nav:
- reference/cli/extensions.md
- reference/cli/setup.md
- reference/cli/env-vars.md
- reference/cli/insecure-features.md
- Session Properties:
- reference/session/index.md
- reference/session/caps.md
- API Endpoints:
- reference/api/index.md
- reference/api/webdriver.md
+21 -17
View File
@@ -9,40 +9,44 @@ theme:
nav:
- 欢迎使用: index.md
- 博客: blog/index.md
- 简介:
- 简介:
- intro/index.md
- 背景:
- 背景:
- intro/appium.md
- intro/drivers.md
- intro/clients.md
- intro/history.md
- 快速开始:
- 快速开始:
- quickstart/index.md
- quickstart/requirements.md
- quickstart/install.md
- quickstart/uiauto2-driver.md
- 写一个测试:
- 写一个测试:
- quickstart/test-js.md
- quickstart/test-py.md
- quickstart/test-java.md
- quickstart/test-rb.md
- quickstart/test-dotnet.md
- quickstart/next-steps.md
- 生态系统:
- 生态系统:
- ecosystem/index.md
- ecosystem/drivers.md
- ecosystem/clients.md
- ecosystem/plugins.md
- ecosystem/tools.md
- 参考:
- 参考:
- reference/index.md
- 命令行界面:
- 命令行界面:
- reference/cli/index.md
- reference/cli/server.md
- reference/cli/extensions.md
- reference/cli/setup.md
- reference/cli/env-vars.md
- API 端点:
- reference/cli/insecure-features.md
- Session Properties:
- reference/session/index.md
- reference/session/caps.md
- API 端点:
- reference/api/index.md
- reference/api/webdriver.md
- reference/api/bidi.md
@@ -51,11 +55,11 @@ nav:
- reference/api/appium.md
- reference/api/others.md
- reference/api/plugins.md
- 指南:
- 迁移:
- 指南:
- 迁移:
- guides/migrating-2-to-3.md
- guides/migrating-1-to-2.md
- 服务器/驱动程序配置:
- 服务器/驱动程序配置:
- guides/managing-exts.md
- guides/branch-testing.md
- guides/config.md
@@ -65,24 +69,24 @@ nav:
- guides/grid.md
- guides/caching.md
- guides/tls.md
- 会话配置:
- 会话配置:
- guides/caps.md
- guides/settings.md
- guides/execute-methods.md
- guides/context.md
- guides/event-timing.md
- 更多资源:
- 更多资源:
- resources/index.md
- 开发:
- 开发:
- developing/index.md
- developing/build-drivers.md
- developing/build-plugins.md
- developing/build-docs.md
- developing/build-doctor-checks.md
- developing/sensitive.md
- 开发者参考:
- 开发者参考:
- developing/config-system.md
- 贡献:
- 贡献:
- contributing/index.md
- 赞助者:
- 赞助者:
- sponsors/index.md
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -5,7 +5,7 @@
<img src="/docs/en/latest/assets/images/sponsor-logo-browserstack-dark.png" />
</a>
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
<img src="/docs/en/latest/assets/images/sponsor-logo-lambdatest-dark.png" />
<a href="https://www.testmuai.com">
<img src="/docs/en/latest/assets/images/sponsor-logo-testmuai-dark.png" />
</a>
</div>
+4 -1
View File
@@ -20,7 +20,7 @@ const {
DOCS_REMOTE,
LATEST_ALIAS,
} = require('./utils');
const path = require('path');
const path = require('node:path');
const semver = require('semver');
const {version} = require('../../package.json');
@@ -31,6 +31,9 @@ const preview = Boolean(process.env.APPIUM_DOCS_PREVIEW);
const push = Boolean(process.env.APPIUM_DOCS_PUBLISH);
/**
* Builds and optionally deploys docs for each supported language.
*/
async function main() {
log.info(`Building Appium docs and committing to ${DOCS_BRANCH}`);
@@ -3,7 +3,7 @@
/* eslint-disable promise/prefer-await-to-callbacks */
/* eslint-disable promise/prefer-await-to-then */
const path = require('path');
const path = require('node:path');
const {fs} = require('@appium/support');
const {AppiumConfigJsonSchema} = require('@appium/schema');
@@ -12,6 +12,9 @@ const DOC_PATH = path.resolve(__dirname, '..', 'en', 'cli', 'args.md');
const START_TAG = `<!-- AUTOGEN-START -->`;
const STOP_TAG = `<!-- AUTOGEN-STOP -->`;
/**
* Regenerates the CLI arguments table in docs.
*/
async function main() {
console.log(`Gathering current cli doc file contents...`);
const [preStart, postEnd] = await getDocParts();
+1 -1
View File
@@ -3,7 +3,7 @@
// for simplicity this file is not transpiled and is run directly via an npm script
//
const {logger} = require('@appium/support');
const path = require('path');
const path = require('node:path');
const log = logger.getLogger('Docs');
@@ -5,9 +5,9 @@ authors:
date: 2024-07-13
---
# Appium Conf 2024: Call for Proposals Now Open!
# Appium Conf 2024: 现在开始征集提案
We're thrilled to announce that Appium Conf is back and going online for 2024! This is the official Appium conference where you can learn all about what's new in Appium 2.0 and explore the latest in automating tests for devices, mobile apps, and desktop applications.
我们很兴奋地宣布,Appium Conf 已回归并在2024年上线! 这是官方的Appium会议,您可以在会上了解Appium 2中的所有新内容。 并探索设备自动化测试、移动应用程序和桌面应用程序的最新版本。
<!-- more -->
@@ -17,29 +17,29 @@ We're thrilled to announce that Appium Conf is back and going online for 2024! T
</a>
</div>
## Mark Your Calendars: September 13, 2024
## 标记您的日历:2024年9月13日
Join us on September 13, 2024, for a full day of inspiring and practical talks from the Appium team and the world's top mobile testing and automation experts. With Appium 2.0 now well-established, this is your opportunity to dive deep and learn how to maximize its potential.
2024年9月13日,请加入我们,参加Appium团队和世界顶级移动测试和自动化专家为期一天的鼓舞人心且实用的演讲。 随着Appium 2.0的成熟,这是您深入了解并学习如何最大限度地发挥其潜力的机会。
## Why Attend Appium Conf 2024?
## 为什么参加了2024年的Appium Conf ?
1. **Gain Insights**: Hear interesting insights and inspiring case studies from global experts and the core Appium team.
2. **Improve Your Strategy**: Gain valuable knowledge to enhance your own automation strategy.
3. **Network**: Make connections with Appium users from around the globe.
4. **Learn from Specialists**: Benefit from Appium specialists' expertise on a variety of topics.
1. **获得见解**:听取全球专家和核心Appium团队的有趣见解和鼓舞人心的案例研究。
2. **改进您的战略**:获得有价值的知识,以增强您自己的自动化战略。
3. **网络**:与来自全球的Appium用户建立联系。
4. **向专家学习**:从Appium专家在各种主题上的专业知识中受益。
## Call for Proposals: Share Your Knowledge!
## 征集提案:分享您的知识!
We're looking for a diverse range of speakers from around the globe who are eager to share innovative ideas and use-cases of mobile test automation. If you have experience with Appium and insights that could benefit the community of test practitioners, we want to hear from you!
我们正在寻找来自全球各地的各种演讲者,他们渴望分享移动测试自动化的创新想法和用例。 如果您有使用Appium的经验和见解,可以使测试从业者社区受益,我们想听听您的意见!
Don't miss this chance to contribute to the Appium community and showcase your expertise on a global stage.
不要错过这个机会,为Appium社区做出贡献,并在全球舞台上展示你的专业知识。
## How to Submit Your Proposal
## 如何提交您的提案
Visit our website at [https://appiumconf.com/](https://appiumconf.com/) and [Submit a Proposal](https://confengine.com/conferences/appium-conf-2024/proposals?utm_medium=referal&utm_source=appium.io&utm_campaign=launch). We're excited to see your innovative ideas and experiences with Appium!
访问我们的网站 [https://appiumconf.com/](https://appiumconf.com/) 并[提交提案](https://confengine.com/conferences/appium-conf-2024/proposals?utm_medium=referal&utm_source=appium.io&utm_campaign=launch)。 我们很高兴看到您在 Appium 中的创新想法和经验!
## Stay Tuned
## 敬请期待
Keep an eye on our website and social media channels for updates on the conference schedule, keynote speakers, and more exciting details about Appium Conf 2024.
关注我们的网站和社交媒体频道以了解会议日程安排的更新, 主旨演讲人和2024年Appium Conf 的更令人兴奋的细节。
Join us in shaping the future of mobile and device test automation. Submit your proposal today and be part of this exciting event!
加入我们来塑造移动设备测试自动化的未来。 立即提交您的提案,成为这一激动人心的活动的一部分!
@@ -7,7 +7,7 @@ title: 对Appium 的贡献
Appium项目离不开来自公司和志愿者的代码、文档、维护和支持的众多贡献。 因此,我们欢迎贡献!
有许多不同的方式可以帮助项目——请参阅下方了解您可以做的一切以及每个贡献方法的流程。 请注意,无论您如何贡献,您的参与都受我们的[行为准则](https://github.com/appium/appium/blob/master/CONDUCT.md)管辖。
有许多不同的方式可以帮助项目——请参阅下方了解您可以做的一切以及每个贡献方法的流程。 请注意,无论您如何贡献,您的参与都受我们的[行为准则](https://github.com/appium/.github/blob/master/CODE_OF_CONDUCT.md)管辖。
## 加入讨论论坛
@@ -1,84 +1,66 @@
---
title: Building Documentation
title: 构建文档
---
Once you've [built a driver](./build-drivers.md) or [built a plugin](./build-plugins.md) for Appium,
you will hopefully want to document how that extension works for your users. The most basic way of
doing this is to write up a quick `README.md` and keep it in the root of your project's repository.
However, this can involve a lot of effort.
一旦你为 Appium 构建了 [驱动](./build-drivers.md) 或 [插件](./build-plugins.md),通常也会希望为用户说明这个扩展是如何工作的。 最基础的方式就是编写一个简短的 `README.md`,并将它放在项目仓库的根目录中。
不过,这样做可能会耗费不少精力。
The Appium project has built tools to help with this, and we've packaged up these tools so our
ecosystem developers building drivers and plugins can _also_ use them. The best way to get going
with these tools is probably to look at an existing Appium driver repo to see how it's done, for
example the [XCUITest driver repo](https://github.com/appium/appium-xcuitest-driver). But this guide
will outline the basic approach.
Appium 项目已经提供了辅助工具,并且我们把这些工具打包好了,以便生态系统中的驱动和插件开发者也能使用。 这些工具最好的入门方式是查看一个现有的 Appium 驱动仓库,看看它是如何组织文档的,例如 [XCUITest 驱动仓库](https://github.com/appium/appium-xcuitest-driver)。 不过,本指南会先介绍基本的实现思路。
### Conceptual architecture
### 概念架构
Appium settled on [MkDocs](https://www.mkdocs.org/) as a Markdown-based documentation site
generator. It uses a Python toolchain (and not Node.js), but it turned out to be the best option
for our purposes. You can adjust this, but by default Appium's utilities also assume that you'll be
using the [mkdocs-material](https://squidfunk.github.io/mkdocs-material/) theme/extension for
MkDocs.
Appium 采用 [MkDocs](https://www.mkdocs.org/) 作为基于 Markdown 的文档站点的生成工具。 它使用 Python 工具链(而不是 Node.js),但这恰好是我们当前需求下最合适的选择。 你可以自行调整,不过默认情况下,Appium 的工具链也会假设你使用 [mkdocs-material](https://squidfunk.github.io/mkdocs-material/) 主题与扩展来搭建 MkDocs。
In order to make different versions of your docs available (one for each minor release of your
extension, typically), we also bundle [Mike](https://github.com/jimporter/mike).
为了让你的文档能够支持不同版本(通常是每个小版本一个),我们还会捆绑 [Mike](https://github.com/jimporter/mike)。
From here, building a basic docs site is as easy as collecting your Markdown files together and
defining how you want them to be organized.
从这里开始,构建一个基础文档站点其实很简单:把 Markdown 文件收集起来,再定义你希望它们如何组织即可。
### Prerequisites
### 前置条件
To take advantage of Appium's documentation utilities, you'll need to install:
要使用 Appium 的文档工具,你需要安装以下内容:
- [Python v3+](https://www.python.org/downloads/)
- [pip](https://pip.pypa.io/en/stable/installation/) (this may be installed automatically with Python)
- The `@appium/docutils` package:
- [pip](https://pip.pypa.io/en/stable/installation/)(通常 Python 会自动附带安装)
- `@appium/docutils` 包:
```bash
npm install --save-dev @appium/docutils
```
### Initializing an Extension for Building Docs
### 初始化用于构建文档的扩展
To prepare your extension for generating documentation, run the following command:
要为你的扩展准备文档生成环境,请运行下面的命令:
```bash
npx appium-docs init
```
This will:
这一步会:
1. Create a `tsconfig.json` if one does not already exist. This is necessary even if your extension
is not written in TypeScript.
2. Create a `mkdocs.yml` with the necessary configuration for MkDocs.
1. 创建一个 `tsconfig.json`(如果当前还没有的话)。 即使你的扩展并不是 TypeScript 编写的,这也是必需的。
2. 创建一个 `mkdocs.yml`,其中包含 MkDocs 所需的配置。
### Documenting Your Extension
### 为你的扩展编写文档
At this point, you can begin documenting your extension. By default, MkDocs will look for Markdown
files in the `docs` directory. You can therefore create your Markdown documentation files, place
them in `docs`, and add links to these files in `mkdocs.yml`.
此时你就可以开始为扩展编写文档了。 默认情况下,MkDocs 会在 `docs` 目录中查找 Markdown 文件。 因此,你可以创建文档文件并放入 `docs`,然后在 `mkdocs.yml` 里添加相应链接。
Refer to the [MkDocs documentation](https://www.mkdocs.org/user-guide/writing-your-docs/) for
information on how to organize and structure your documentation.
请参考 [MkDocs 文档](https://www.mkdocs.org/user-guide/writing-your-docs/) 来了解如何组织与构建你的文档结构。
### Building the Docs
### 构建文档
At this point, you can use the `appium-docs` CLI tool. Run this tool with no arguments to get the
full help output and see all the available subcommands and parameters. Here are a few usage
examples:
在这个阶段,你可以使用 `appium-docs` CLI 工具。 运行这个工具时不传任何参数,可以看到完整的帮助信息,以及所有可用的子命令与参数。 下面是几个常见用法示例:
```bash
# Generate reference and build the mkdocs site into the site dir
# 生成参考文档并将 mkdocs 站点构建到 site 目录
npx appium-docs build
# Same as build, but host the docs on a local dev server
# and watch for changes and rebuild when files change
# 与 build 相同,但会在本地启动开发服务器
# 并监听文件变化,在内容变更时自动重建
npx appium-docs build --serve
# Build the docs and deploy them with mike versioning to the docs-site branch
# using the included commit message.
# This is particularly useful for pushing content to a GitHub pages branch!
# 构建文档并使用 mike 进行版本化部署到 docs-site 分支
# 其中包含内置提交信息。
# 这对于把内容推送到 GitHub Pages 分支特别有用!
npx appium-docs build \
--deploy \
-b docs-site \
@@ -1,45 +1,33 @@
---
title: Building Doctor Checks
title: 构建 Doctor Checks
---
The idea of Appium Doctor is to assist users with driver or plugin preconditions setup. Sometimes such
preconditions might be quite complicated and require non-trivial technical knowledge. Doctor checks,
which are vanilla Node.js class instances written by extension authors, simplify
the setup process by automating diagnostics and possible fixes for the found issues. These checks
might also be interactive to ensure better usage experience.
Appium Doctor 的目标,是帮助用户完成驱动或插件的前置条件配置。 有时这些前置条件可能相当复杂,需要一定的技术知识。 Doctor checks是由扩展作者编写的普通 Node.js 类实例,它可以自动完成诊断并尝试修复发现的问题。 为了提供更好的使用体验,这些检查项有时也会是交互式的。
This tutorial is supposed to be used by plugin or driver authors that would like to help their users
to deal with complicated setup or configuration steps.
本教程适用于希望帮助用户处理复杂配置或设置步骤的插件或驱动作者。
## Adding Doctor Checks
## 添加 Doctor Checks
### Typing Requirements
### 类型要求
The term `Doctor Check` literally describes a single javascript class instance that implements the
[IDoctorCheck interface](https://github.com/appium/appium/blob/master/packages/types/lib/doctor.ts).
The interface defines the following methods and properties:
术语 `Doctor Check` 的字面含义,是指一个实现了 [IDoctorCheck 接口](https://github.com/appium/appium/blob/master/packages/types/lib/doctor.ts) 的 JavaScript 类实例。
这个接口定义了以下方法和属性:
- `diagnose(): Promise<DoctorCheckResult>`: Contains the code to diagnose a possible issue
- `fix(): Promise<string|null>`: Either fixes the actual problem if `hasAutofix()` returns true or
returns a string description for possible manual fixes. If this method throws an exception named
`FixSkippedError` and `hasAutofix()` returns true then the result of the method invocation
is going to be ignored.
- `hasAutofix(): boolean`: Whether calling `fix()` would resolve the found issue
- `isOptional(): boolean`: Whether the found issue can be ignored and is not a showstopper
- `log: AppiumLogger`: May be used for logging. This property may be assigned
by the instance itself or by the Appium server if it is left unassigned.
- `diagnose(): Promise<DoctorCheckResult>`:包含诊断某个问题的代码
- `fix(): Promise<string|null>`:如果 `hasAutofix()` 返回 true,则修复实际问题;否则返回一段手动修复的说明。 如果此方法抛出名为 `FixSkippedError` 的异常,并且 `hasAutofix()` 返回 true,那么该调用结果将被忽略。
- `hasAutofix(): boolean`:表示调用 `fix()` 是否能解决发现的问题
- `isOptional(): boolean`:表示发现的问题是否可以被忽略且不是阻塞性问题
- `log: AppiumLogger`:可用于日志输出。 这个属性可以由实例自行赋值,也可以由 Appium 服务在未赋值时自动提供。
The `DoctorCheckResult` object returned by the `diagnose()` method must contain the following properties:
`diagnose()` 方法返回的 `DoctorCheckResult` 对象必须包含以下属性:
- `ok: boolean`: Whether the diagnosis found no issues
- `optional: boolean`: Whether the diagnosed issue is safe to ignore
- `message: string`: The text message describing the diagnostic result
- `ok: boolean`:诊断是否未发现任何问题。
- `optional: boolean`:诊断出的问题是否可以安全忽略。
- `message: string`:描述诊断结果的文本信息。
### Manifest Requirements
### 清单要求
A single extension may export multiple Doctor checks to Appium. In order for these checks to be properly
picked up by the server CLI after the corresponding extension is installed they might be listed in the
package .json manifest under the `appium.doctor.checks` section similar to the definition below:
一个扩展可以向 Appium 导出多个 Doctor checks。 为了让这些检查项在对应扩展安装后能够被服务端 CLI 正确识别,它们需要在package .json 清单文件中列在 `appium.doctor.checks` 部分,格式类似下面这样:
```json
// ...
@@ -67,12 +55,11 @@ package .json manifest under the `appium.doctor.checks` section similar to the d
// ...
```
Also, it makes sense to include the [@appium/types](https://www.npmjs.com/package/@appium/types) import
to the package dev dependencies.
此外,建议将 [@appium/types](https://www.npmjs.com/package/@appium/types) 加入包的开发依赖中。
### Implementation Example
### 实现示例
The below example is a "raw" Node.JS implementation that does not use any transpilation:
下面是一个“原生”的 Node.js 实现示例,没有使用任何转译工具:
```js
const {fs, doctor} = require('@appium/support');
@@ -123,8 +110,7 @@ module.exports = {androidHomeCheck};
*/
```
This file could be saved as `doctor/android-home-check.js` and then added to the package.json manifest
as
这个文件可以保存为 `doctor/android-home-check.js`,然后再将其加入到 package.json 清单中,例如:
```json
// ...
@@ -570,6 +570,33 @@ capability), and then to set an internal field to that value, so that it can be
bidiProxyUrl`. Once all this is in place, Appium will proxy BiDi commands from the client straight
to the upstream connection.
### Understand server-assigned driver properties and security flags
When your driver is running under the main Appium server, Appium assigns a small set of
server-related properties on your driver instance when a session is created:
- `cliArgs`: Driver-specific configuration derived from the Appium server’s CLI flags and/or
configuration files (for example via the `server.driver.<your-driver-name>` section). These
options are **not** user capabilities and cannot be influenced directly by test code.
- `server`, `serverHost`, `serverPort`, `serverPath`: Information about the HTTP server that is
hosting your driver. These values reflect how the Appium server was started (for example the
`--address`, `--port`, and `--base-path` flags) and are useful when your driver needs to construct
URLs that point back to the Appium server itself (for example when setting up proxies, webhooks,
or other callbacks).
`BaseDriver` and `AppiumDriver` also cooperate to expose security-related flags on your driver
instance:
- `relaxedSecurityEnabled`: Indicates whether the server is running with relaxed security enabled
(for example via `--relaxed-security`).
- `allowInsecure`: A list of insecure features which are explicitly allowed for this driver (derived
from server-level options like `--allow-insecure`).
- `denyInsecure`: A list of insecure features which are explicitly disabled for this driver (derived
from server-level options like `--deny-insecure`).
See [Hide behaviour behind security flags](#hide-behaviour-behind-security-flags) for how to use
these flags in your driver (e.g. via `isFeatureEnabled` and `assertFeatureEnabled`).
### Extend the existing protocol with new commands
You may find that the existing commands don't cut it for your driver. If you want to expose
@@ -864,3 +891,120 @@ this.onUnexpectedShutdown(handler)
`handler` should be a function which receives an error object (representing the reason for the
unexpected shutdown).
### Send messages to plugins running on the same session
Appium's driver and plugin architecture means that a single driver and any number of plugins can be
running together for a current session. The driver and plugins don't really know anything about
each other though, which can make coordination potentially difficult. Without creating any kind of
tight coupling between drivers or plugins, it's possible for drivers and plugins to communicate
along a pub/sub style message bus. With Appium's IPC feature, "message" means a combination of
"data" (the data intended to be published or received), and metadata (timestamp, the name of the
publisher, etc...).
Drivers and plugins can implement an instance method called `async onIpcInit`, in which they will
know that the IPC channel for the session is now active. At this point, they have access to the
following methods:
#### `ipcSubscribe<T>(topic: string): IIpcSubscription`
This method allows a driver or plugin to subscribe to a topic on the IPC channel for the session.
Topics are simply strings. To coordinate effectively, drivers or plugins would use the same topic
string (so this would be something advertised in the driver/plugin documentation).
The result of this call is an `IpcSubscription` object that allows:
- Looping through messages on the topic via an async generator
- Hooking up an event handler for new messages
- Getting the last message sent on the topic
- Publishing a message to the topic
- Unsubscribing from the topic
#### `IpcSubscription` object
Here is an example of how subscribing and use of these subscription methods might work:
```ts
async onIpcInit() {
// we know at this point in our driver/plugin lifecycle that we can use IPC methods
type MyMessageData = {myData: string}; // let's say the message data for this channel has this shape
const subscription = this.ipcSubscribe<MyMessageData>('coolTopic');
// listen for new messages on topic
subscription.on('message', (message) => {
console.log(message.data); // {myData: 'something'}
});
// publish data to the topic; might throw if the data is larger than configured max size, or we
// are no longer subscribed
await subscription.publish({myData: 'hi'});
// get last message sent to topic
const {data} = subscription.getMessage() ?? {data: null};
// data = {myData: 'hi'}
// unsubscribe
subscription.unsubscribe(); // returns true if we unsubscribed and false if no subscription existed
}
```
With a subscription object, we can also iterate async over it to receive new messages:
```ts
for await (const message of subscription) {
// here we have a message and can unwrap its data
}
```
Note that the iteration will stop when the subscription ends (i.e., when `unsubscribe` is called).
You can also check whether the subscription is still active (if your subscribe and unsubscribe
logic is not locally connected):
```ts
if (subscription.isActive) {
// we know we have not yet unsubscribed
}
```
If the subscription is not active, attempts to call `subscription.publish` will throw an error.
#### `IpcMessage` object
When you get a message on a topic, it has the following shape:
```ts
export type IpcMessage<T> = {
publisher: string, // the id of the publishing object (typically of the form <ClassName>@<uniqueObjectId>)
timestampMs: number, // when the message was published, in ms since epoch
topic: string, // the topic the message was published on
data: T, // the arbitrary message data. Must be serializable and a valid argument to 'structuredClone()'
};
```
#### IPC Notes
There are some important things to keep in mind when using Appium's IPC feature:
- IPC is only available once `onIpcInit` has been called, at the end of the `createSession` flow.
It cannot be used statically or in `createSession` hooks
- In sum, IPC is only for use during a session (this is also to prevent drivers/plugins from
accessing or reading data sent on IPC channels in other sessions.)
- The default max size of an IPC message is 1MB. This can be configured by the server-admin by
using the `--max-ipc-data-size` arg (value is a number in bytes).
- If a message exceeds the configured size, any call to `publish` methods will throw, so be
sure to cover this case in your error handling.
- The default max number of IPC topics per session is 1000. This can be configured by the
server-admin using the `--max-ipc-topics` arg.
- If the topic limit is reached, calls to `subscribe` or `publish` on a new topic will throw, so
be sure to cover this case in your error handling.
- Topic names exist within a global namespace per session. So if you don't want to clash with other
drivers or plugins, make sure you prefix your topic names with something unique, akin to vendor
prefixes in the WebDriver standard (for example: `fake-driver:some-topic`). We recommend the
format `<namespace>:<topic>`.
To see examples of IPC in action, check out Appium's own
[FakeDriver](https://github.com/appium/appium/blob/master/packages/fake-driver/lib/driver.ts) and
[FakePlugin](https://github.com/appium/appium/blob/master/packages/fake-plugin/lib/plugin.ts)
extensions, which showcase several ways of using IPC messages.
@@ -518,3 +518,12 @@ async onUnexpectedShutdown(driver, cause) {
}
}
```
### Send messages to the driver or other plugins running on the same session
Even though drivers and plugins don't know anything about each other, it's possible for them to
send messages that other drivers or plugins can listen for, within the context of the same session,
using an IPC channel. Given that the developer instructions for this feature are the same for
drivers and plugins, please head over to the IPC development docs for
drivers at the driver
development guide.
@@ -29,7 +29,7 @@ In lieu of a separate file, configuration can be embedded in a project's `packag
```
When an Appium server is started via the `appium` executable, the `init` function in `lib/main.js`
will call into `lib/config-file.js` to load and/or search for a configuration file and in
will call into `lib/bootstrap/config-file.js` to load and/or search for a configuration file and in
`package.json`.
!!! note
@@ -72,7 +72,7 @@ It is more straightforward to explain how config files are validated, so we'll s
### Validating Config Files
When a config file is found (`lib/config-file.js`), it will call the `validate` function exported
When a config file is found (`lib/bootstrap/config-file.js`), it will call the `validate` function exported
from `lib/schema/schema.js` with the contents of the config file. In turn, this asks `ajv` to
validate the data against the schema that Appium has provided it.

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