12730 Commits
Author SHA1 Message Date
Edgars Eglītis 3d400bb6fb docs: port documentation changes to beta (#23117) 2026-10-28 19:21:47 +02:00
PointerL 971fa8b58c fix(support): preserve non-string values in safeJsonParse (#23110) 2026-10-28 17:34:07 +01:00
PointerL efb52173dd fix(support): handle circular arrays in getObjectSize (#23111) 2026-10-28 17:32:49 +01:00
PointerL 236e116871 test(support): exercise fs.mv cross-device fallback (#23112) 2026-10-28 17:32:14 +01:00
fizzbeom bb93a07c1c fix(universal-xml-plugin): report a malformed XPath as invalid selector (#23108) 2026-10-28 14:13:21 +01:00
Nacy Dev b36eb13709 docs(appium): document gestures using W3C Actions API (#23094)
* docs(appium): document gestures using W3C Actions API

* docs(appium): apply review suggestions in gestures guide
2026-10-28 11:46:34 +02:00
Nacy Dev 84ad4014ba fix(universal-xml-plugin): skip XML transformation when context is not NATIVE_APP (#23095) 2026-10-28 08:27:46 +01:00
Mohamed Mostafa e85fe990d5 fix(base-driver): reject a negative newCommandTimeout (#23103) 2026-10-27 19:55:42 +01:00
github-actions 5e87dc85d0 chore: publish
- appium@4.0.0-beta.6
 - @appium/base-driver@11.0.0-beta.5
 - @appium/base-plugin@4.0.0-beta.5
 - @appium/docutils@4.0.0-beta.5
 - @appium/driver-test-support@4.0.0-beta.5
 - @appium/execute-driver-plugin@8.0.0-beta.6
 - @appium/fake-driver@7.0.0-beta.6
 - @appium/fake-plugin@5.0.0-beta.6
 - @appium/http-server@1.0.0-beta.5
 - @appium/images-plugin@6.0.0-beta.6
 - @appium/opencv@6.0.0-beta.5
 - @appium/plugin-test-support@4.0.0-beta.6
 - @appium/relaxed-caps-plugin@4.0.0-beta.6
 - @appium/schema@2.0.0-beta.3
 - @appium/storage-plugin@3.0.0-beta.6
 - @appium/support@8.0.0-beta.5
 - @appium/types@2.0.0-beta.5
 - @appium/universal-xml-plugin@4.0.0-beta.6
@appium/base-driver@11.0.0-beta.5 @appium/base-plugin@4.0.0-beta.5 @appium/docutils@4.0.0-beta.5 @appium/driver-test-support@4.0.0-beta.5 @appium/execute-driver-plugin@8.0.0-beta.6 @appium/fake-driver@7.0.0-beta.6 @appium/fake-plugin@5.0.0-beta.6 @appium/http-server@1.0.0-beta.5 @appium/images-plugin@6.0.0-beta.6 @appium/opencv@6.0.0-beta.5 @appium/plugin-test-support@4.0.0-beta.6 @appium/relaxed-caps-plugin@4.0.0-beta.6 @appium/schema@2.0.0-beta.3 @appium/storage-plugin@3.0.0-beta.6 @appium/support@8.0.0-beta.5 @appium/types@2.0.0-beta.5 @appium/universal-xml-plugin@4.0.0-beta.6 appium@4.0.0-beta.6
2026-10-26 07:04:25 +00:00
Mohamed Mostafa 1db7aa9eb7 fix(execute-driver-plugin): return null when a script result refers to itself (#23085) 2026-10-26 07:57:05 +01:00
Mykola Mokhnach d91b92d037 ci: run e2e tests on Windows (#23092) 2026-10-26 07:51:05 +01:00
Mykola Mokhnach 0f1a76184b feat(support)!: Remove system unzip from extractAllTo (#23091)
BREAKING CHANGE: ExtractAllOptions.useSystemUnzip is removed.
BREAKING CHANGE: Non-UTF-8-flagged file names now default to utf8 instead of cp437, and cp437 decoding is no longer supported (modern archives use UTF-8). Such archives must be recreated or converted; fileNamesEncoding only accepts Node.js BufferEncodings.
2026-10-25 21:27:21 +01:00
Mohamed Mostafa 9ea7718f0a fix(http-server): reject invalid JSON only after the route is known (#23057) 2026-10-25 20:43:01 +01:00
Kazuaki Matsuo 75f35b828e Merge commit from fork 2026-10-26 04:17:30 +09:00
Mykola Mokhnach 77fab30f70 refactor(support): Move private helpers of public modules into the internal barrel (#23090) 2026-10-25 19:04:34 +01:00
Kazuaki Matsuo dd71f66e4a fix(appium): preserve npm arguments on Windows (#22957)
* fix(appium): preserve npm arguments on Windows

* test(appium): cover Windows npm argument preservation

* fix(appium): resolve project-local npm shims on Windows

* refactor(appium): extract Windows npm CLI resolution

* fix(appium): clarify npm lookup errors and share pending resolution

* fix(appium): respect the caller's Windows npm search path

* refactor(appium): simplify Windows npm lookup and test fixtures

* refactor(appium): use a plain error for missing npm shim

* fix(appium): preserve Windows npm shim runtime and prefix behavior

* refactor(appium): address Windows npm resolver review feedback

* refactor(appium): share npm resolution promises without AsyncLock

* fix(appium): avoid waiting for later Windows PATH lookups

* refactor(appium): clarify Windows npm resolver names

* refactor(appium): remove Windows npm resolution caching
2026-10-26 02:48:20 +09:00
Mykola Mokhnach c7e3b46f1a perf(support): Further optimize zip extraction (#23087) 2026-10-25 17:27:29 +01:00
pythonyx135793 3615d6df4c fix(appium)!: install local extensions without global npm links (#23086)
* fix(appium): install local extensions with live links

* docs(appium): explain local extension links in Appium 4
2026-10-26 00:59:13 +09:00
Mykola Mokhnach 52c92d6acd feat(support): Add zip streaming support (#23083) 2026-10-25 00:54:44 +02:00
Mykola Mokhnach 34e368e666 perf(support): Speed up zip extraction (#23078) 2026-10-24 22:34:38 +02:00
carrerasdarren-cellandcarrerasdarren-cell 6cc4095c59 fix(base-driver)!: preserve proxied command validation ordering (#23060)
* fix(base-driver): preserve proxied navigation error ordering

* fix(base-driver): address proxied validation review

* docs: explain proxied plugin validation migration

---------

Co-authored-by: carrerasdarren-cell <carrerasdarren-cell@users.noreply.github.com>
2026-10-25 01:41:26 +09:00
Mohamed Mostafa c62ffb7ddf fix(base-driver): reject an inherited name as a log type (#23082) 2026-10-24 16:07:18 +02:00
Mykola Mokhnach 17421ae61f fix(base-driver)!: use AsyncLock from asyncbox instead of async-lock (#23066)
BREAKING CHANGE: The protected BaseDriver#commandsQueueGuard beyond promise-based acquire(key, fn) - it is now an asyncbox AsyncLock, so callback-style acquire() and the internal queues field are gone (use getQueueLength() / isBusy()).
2026-10-24 09:39:04 +02:00
carrerasdarren-cellandcarrerasdarren-cell 531f482d87 fix(base-driver)!: validate every timeout capability candidate (#23062)
* fix(base-driver): validate every timeout capability candidate

* refactor(base-driver): address timeout validation review

---------

Co-authored-by: carrerasdarren-cell <carrerasdarren-cell@users.noreply.github.com>
2026-10-24 15:15:18 +09:00
Kazuaki Matsuo 8e42cbc82d fix(support): prevent zip extraction through symlink chains (#23002)
* fix(support): prevent zip extraction through symlink chains

* fix(support): address zip symlink review findings

* perf(support): revalidate only affected zip symlinks

* refactor(support): clarify zip symlink validation

* refactor(support): clarify symlink target traversal

* fix(appium): avoid npm audit during extension removal and e2e setup

* fix(support): normalize Unicode symlink dependency keys

* docs(support): shorten symlink validation comments
2026-10-24 01:05:25 +09:00
Mykola Mokhnach 16c84ea203 fix(appium)!: remove unused server arguments (#23063)
BREAKING CHANGE: removed the --callback-address (-ca) server argument and the server.callback-address config property
BREAKING CHANGE: removed the --callback-port (-cp) server argument and the server.callback-port config property
BREAKING CHANGE: removed the --debug-log-spacing server argument and the server.debug-log-spacing config property
BREAKING CHANGE: removed the --strict-caps server argument and the server.strict-caps config property
BREAKING CHANGE: removed the --trace-dir server argument and the server.trace-dir config property
2026-10-22 08:28:55 +02:00
Mohamed Mostafa 819905beb2 fix(appium): send log webhooks to ipv6 hosts (#23061) 2026-10-21 23:10:17 +02:00
Mohamed Mostafa 8f30c8abc7 fix(http-server): return unknown method for a known command url (#22991) 2026-10-21 12:56:57 +02:00
Mohamed Mostafa 39e9512b4a fix(base-driver)!: reject command POST bodies that are not JSON objects (#23007)
BREAKING CHANGE: POST body has to be a JSON object, otherwise the server returns invalid argument error.
2026-10-21 08:40:34 +02:00
Qingyuan Wang 2dd05e12d3 fix(docs): correct stale instructions in .NET quickstart (#23049) 2026-10-21 12:51:38 +09:00
Qingyuan Wang 2cf7f4e6b2 fix(docs): X-Appium-Is-Sensitive also accepts the value 'yes' (#23051) 2026-10-21 12:49:44 +09:00
Qingyuan Wang 7bff30ba65 fix(schema): correct tmp dir default description to match os.tmpdir() (#23046) 2026-10-21 12:41:16 +09:00
Qingyuan Wang dbc2125d82 docs: fix stale @see paths (#23042)
* docs: fix broken license links and stale @see paths on appium4

packages/appium/README.md links to ./LICENSE and ./packages/logger/LICENSE, neither of which resolves from the packages/appium directory (no LICENSE file exists there; the root LICENSE and packages/logger/LICENSE are the real files). This matches the fix already applied to master in #23001.

The @see ../../test/unit/command-timeout.spec.ts comments in fake-driver/fake-plugin resolve one level too high (packages/test/...); the specs live at ../test/unit/command-timeout.spec.ts relative to lib/.

* docs: exclude README changes from this PR

The Appium README will be fixed on `appium4` by porting the changes from `master`, per @eglitise.

Signed-off-by: NUAAwqy <146524024+NUAAwqy@users.noreply.github.com>

---------

Signed-off-by: NUAAwqy <146524024+NUAAwqy@users.noreply.github.com>
2026-10-20 14:56:04 +03:00
Qingyuan Wang 9e0349f398 chore: remove broken docs build scripts (#23026)
Signed-off-by: NUAAwqy <146524024+NUAAwqy@users.noreply.github.com>
2026-10-19 16:34:02 +03:00
Qingyuan Wang 589611f13e chore(base-driver): fix "misclassified" typo in comment (#23025)
Signed-off-by: NUAAwqy <146524024+NUAAwqy@users.noreply.github.com>
2026-10-19 16:32:00 +03:00
Qingyuan Wang 6575e29fba chore(appium): use consistent "writable" spelling (#23024)
Signed-off-by: NUAAwqy <146524024+NUAAwqy@users.noreply.github.com>
2026-10-19 16:31:40 +03:00
github-actions eed4a27fd5 chore: publish
- appium@4.0.0-beta.5
 - @appium/base-driver@11.0.0-beta.4
 - @appium/base-plugin@4.0.0-beta.4
 - @appium/docutils@4.0.0-beta.4
 - @appium/driver-test-support@4.0.0-beta.4
 - @appium/execute-driver-plugin@8.0.0-beta.5
 - @appium/fake-driver@7.0.0-beta.5
 - @appium/fake-plugin@5.0.0-beta.5
 - @appium/http-server@1.0.0-beta.4
 - @appium/images-plugin@6.0.0-beta.5
 - @appium/opencv@6.0.0-beta.4
 - @appium/plugin-test-support@4.0.0-beta.5
 - @appium/relaxed-caps-plugin@4.0.0-beta.5
 - @appium/storage-plugin@3.0.0-beta.5
 - @appium/support@8.0.0-beta.4
 - @appium/types@2.0.0-beta.4
 - @appium/universal-xml-plugin@4.0.0-beta.5
@appium/base-driver@11.0.0-beta.4 @appium/base-plugin@4.0.0-beta.4 @appium/docutils@4.0.0-beta.4 @appium/driver-test-support@4.0.0-beta.4 @appium/execute-driver-plugin@8.0.0-beta.5 @appium/fake-driver@7.0.0-beta.5 @appium/fake-plugin@5.0.0-beta.5 @appium/http-server@1.0.0-beta.4 @appium/images-plugin@6.0.0-beta.5 @appium/opencv@6.0.0-beta.4 @appium/plugin-test-support@4.0.0-beta.5 @appium/relaxed-caps-plugin@4.0.0-beta.5 @appium/storage-plugin@3.0.0-beta.5 @appium/support@8.0.0-beta.4 @appium/types@2.0.0-beta.4 @appium/universal-xml-plugin@4.0.0-beta.5 appium@4.0.0-beta.5
2026-10-18 22:48:48 +00:00
Kazuaki Matsuo 900f6d338d docs(appium): update recent changes in the migration guide (#22972)
* docs: update recent changes in the migration guide

* simplify a bit

* docs: reflect recent WebDriver fixes in migration guide

Document strict standard timeout inputs and null readback, capability key casing/null omission/error classification, optional error data, and BiDi idle-timeout tracking.

Refs #22961, #22974, #22975, #22976, #22977, #22947, and #22966.

* docs: shorten recent migration notes

Condense the timeout, capability, error-data, and command-activity notes while retaining migration actions and PR references.

* docs: track capability candidate and initial timeout follow-ups

Link pending #22982 and #22983 without presenting them as merged. Refs #22966.

* docs: correct directory walk error guidance

Describe the merged #22956 behavior: log and skip non-ENOENT walker errors, continue traversal, and retain ENOENT rejection. Clarify that completion does not guarantee every entry was visited.

Addresses review r4267074238. Verified against appium4 implementation and checked the documentation diff.

* docs: refresh migration notes and restore timeout details
2026-10-18 20:54:47 +08:00
Kazuaki Matsuo a090505184 fix(base-driver): reject implicit HEAD command routing (#22992) 2026-10-15 18:57:15 -07:00
Kazuaki Matsuo aba33a2d17 fix(base-driver): validate and merge all capability candidates (#22982) 2026-10-15 10:19:35 -07:00
Mykola Mokhnach 2bbb1d3a49 fix(http-server)!: reject browser-origin requests unless CORS is enabled (#22990)
BREAKING CHANGE: clients that send an Origin header must enable the CORS feature (--allow-insecure=*:cors).
BREAKING CHANGE: Library callers that depended on the implicit CORS default must now pass allowCors: true
2026-10-15 18:15:36 +02:00
Kazuaki Matsuo d05423e77d fix(base-driver): apply initial session timeouts (#22983)
* refactor(base-driver): share standard timeout value validation

Refs #22966 (F21).

* fix(base-driver): apply initial session timeouts

Refs #22966 (F21). Initialize local timeout state before driver backend startup.

* test(base-driver): cover initial session timeout state

Refs #22966 (F21). Covers nulls, bounds, invalid inputs, readback, defaults, and backend setter overrides.

* refactor(types): export the existing Timeouts type

* refactor(base-driver): reuse the shared Timeouts type

Use Partial<Timeouts> for initial session timeout state.

Validation: TypeScript build, base-driver type tests, and targeted lint/format checks passed.

* refactor(base-driver): share timeout mapping across initialization loops

* refactor(base-driver): normalize reset options in a loop

* refactor(base-driver): extract session preparation helpers

* fix(base-driver): identify timeout type in validation errors

* fix(base-driver): show invalid timeout values in errors

* refactor(base-driver): simplify timeout update mapping

* refactor(base-driver): centralize timeout metadata in timeout module

Share standard timeout names, local fields, and setters with session initialization. Reuse keyof Timeouts for validation. Refs #22966.

* refactor(base-driver): reuse timeout metadata for initial session state

Remove the duplicate timeout mapping from driver.ts. Preserve direct field initialization before backend startup. Validation: 578 base-driver tests, TypeScript build, type tests, and targeted lint/format checks passed.

* fix(types): allow partial initial timeout capabilities
2026-10-15 09:16:57 +09:00
Mohamed Mostafa f820e04000 fix(appium): apply default capabilities to every firstMatch candidate (#22988)
* fix(appium): apply default capabilities to every firstMatch candidate

* docs(appium): explain how default capabilities apply to firstMatch candidates
2026-10-15 09:16:28 +09:00
Mohamed Mostafa 814357aa7f fix(base-driver): reject an unsupported log type with InvalidArgumentError (#22986) 2026-10-14 17:48:34 +02:00
Mohamed Mostafa a9d1b1212d fix(base-driver): reject an unknown timeout type with InvalidArgumentError (#22987) 2026-10-14 18:43:50 +03:00
Kazuaki Matsuo f3edfc5e03 fix(base-driver)!: match standard capability names case-sensitively (#22976)
* Update migration guide for Appium 3 to 4

Refs #22966 (F12).

* Refactor capability imports and standard cap check

Refs #22966 (F12).

* Add test for insertAppiumPrefixes function

Refs #22966 (F12).

* Update isStandardCap to use exact matches

Refs #22966 (F12).

* Enhance capability tests for standard names

Refs #22966 (F12).

* Update error message in capability.spec.ts

Refs #22966 (F12).
2026-10-14 12:20:43 +09:00
Kazuaki Matsuo 07d324b488 fix(base-driver): preserve optional WebDriver error data (#22974)
* fix(base-driver): preserve optional WebDriver error data

Preserve supplied Classic WebDriver error data. Refs #22966 (F09).

* fix(base-driver): retain data in returned driver errors

* Add data handling to errorFromW3CJsonCode

Refs #22966 (F09).

* Add tests for error handling in ProxyRequestError

Refs #22966 (F09).

* Enhance proxy tests with error handling case

Refs #22966 (F09).

* test(http-server): cover returned driver error data
2026-10-14 12:09:48 +09:00
Kazuaki Matsuo b452a5eade fix(base-driver): preserve capability invalid argument errors (#22977)
* Change error type for non-W3C capabilities

Refs #22966 (F10).

* fix(base-driver): preserve capability invalid argument errors

Refs #22966 (F10).

* fix(base-driver): preserve capability invalid argument errors

Refs #22966 (F10).

* fix(base-driver): preserve capability invalid argument errors

Refs #22966 (F10).

* fix(base-driver): preserve capability invalid argument errors

Refs #22966 (F10).

* test(fake-driver): expect invalid argument for legacy capabilities
2026-10-14 12:07:37 +09:00
Kazuaki Matsuo f1cf93e368 fix(base-driver): omit null capabilities before merging (#22975)
* Implement omitNullCapabilities function

Refs #22966 (F13).

* Add tests for null capability values handling

Refs #22966 (F13).

* refactor(base-driver): avoid reassigning capability argument

Use a normalizedCaps local for validation and the return value, preserving null-omission behavior. Refs #22966 (F13).
2026-10-14 12:07:08 +09:00
Kazuaki Matsuo eef8246f8a fix(base-driver): validate standard timeouts and preserve null values (#22961)
* fix(base-driver): validate timeouts before applying changes

* test(base-driver): preserve timeouts on invalid updates

* fix(base-driver): preserve null script timeouts

* fix(base-driver): allow nullable script timeout state

* fix(types): accept null script timeouts

* test(base-driver): cover null script timeout updates

* docs(appium): document null script timeouts

* refactor(base-driver): loop over validated timeout updates

* fix(base-driver): validate standard timeouts and preserve null values

* refactor(types): introduce shared TimeoutValue type

Refactor Timeouts type to use TimeoutValue for better clarity.

* refactor(types): export TimeoutValue

* refactor(types): use TimeoutValue for driver timeout state

* refactor(types): use TimeoutValue in timeout command signatures

* refactor(base-driver): use shared type for timeout state

* refactor(base-driver): use TimeoutValue in timeout commands

* docs: simplify timeout API descriptions
2026-10-13 05:21:57 +09:00