Skip to content

Rebase QA Wolf customizations onto upstream WebDriverAgent v15.0.0 (GEN-2002)#17

Open
Elton Carreiro (EltonCarreiro) wants to merge 56 commits into
masterfrom
gen-2002-update-wda-v11-to-v15
Open

Rebase QA Wolf customizations onto upstream WebDriverAgent v15.0.0 (GEN-2002)#17
Elton Carreiro (EltonCarreiro) wants to merge 56 commits into
masterfrom
gen-2002-update-wda-v11-to-v15

Conversation

@EltonCarreiro

Copy link
Copy Markdown

Overview

Rebases the QA Wolf WebDriverAgent fork's customizations (previously based on upstream v11.4.1) onto upstream appium/WebDriverAgent v15.0.0 (latest tag). Part of GEN-2002 / the "Migrate to Appium v3" project.

The branch is v15.0.0 + a single squashed commit containing only our customizations (the WebDriverAgentLib/QAWolf/ dir, our edits to a handful of upstream files, and the SPM scaffolding). Keeping the fork a clean delta on top of upstream makes the next rebase trivial.

Conflict resolutions (only 2 files conflicted)

  • FBSessionCommands.m — v15 extracted settings get/set into a new FBSettingsHandler. Took v15's version and re-applied our preWarmPageSource setting in FBSettingsHandler's set/get block-maps.
  • FBXPath.m / FBXPath.h — kept our "attribute @interface decls moved to the header" change; ported v15's new FBNativeAccessibilityElementAttribute interface into FBXPath.h so v15's @implementation resolves.

Everything else auto-merged: the FBResponseJSONPayload.dictionary re-exposure, the FBRouteRequest session constructor, the exposed FB*Commands handler headers, FBConfiguration/FBSettings visibility-cache settings, and the umbrella header.

Headers / version

  • Regenerated SPM public-header symlinks via headers.sh: added v15's XCUIDevice+FBVoiceOver.h; preserved the deliberately-exposed XCUIElement+FBCustomActions.h.
  • package.json inherits upstream's 15.0.0 (we never pinned a fork version).

Verification

Standalone xcodebuild -scheme WebDriverAgentLib framework build fails identically on this branch and on the current production v11 fork (same errors) — a pre-existing limitation where the standalone framework build doesn't honor the fork's publicHeadersPath exposure of our added public headers. So the rebase introduces no regression. The authoritative compile gate is the ios-agent SPM integration build, which compiles WolfDriver against this fork.

Consumed by

ios-agent pins this fork via SPM. A follow-up ios-agent PR will bump the project.pbxproj / Package.resolved revision to this branch's head commit.

🤖 Generated with Claude Code

dependabot Bot and others added 30 commits March 24, 2026 22:45
Bumps [nick-fields/retry](https://github.com/nick-fields/retry) from 3 to 4.
- [Release notes](https://github.com/nick-fields/retry/releases)
- [Commits](nick-fields/retry@v3...v4)

---
updated-dependencies:
- dependency-name: nick-fields/retry
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## [11.4.2](appium/WebDriverAgent@v11.4.1...v11.4.2) (2026-04-12)

### Bug Fixes

* Avoid keeping strong reference to self instance in delegates ([appium#1123](appium#1123)) ([dd15f48](appium@dd15f48))
* chore(deps-dev): bump typescript from 5.9.3 to 6.0.2

Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.9.3 to 6.0.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](microsoft/TypeScript@v5.9.3...v6.0.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 6.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* moar

* format

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mykola Mokhnach <mokhnach@gmail.com>
## [11.4.3](appium/WebDriverAgent@v11.4.2...v11.4.3) (2026-04-12)

### Miscellaneous Chores

* **deps-dev:** bump typescript from 5.9.3 to 6.0.2 ([appium#1121](appium#1121)) ([046b080](appium@046b080))
…ppium#1124)

BREAKING CHANGE: remove idb from AppleDevice; clients must stop passing device.idb.
BREAKING CHANGE: remove includeNonModalElements WDA setting; clients must stop sending this setting in /settings.
BREAKING CHANGE: remove shouldUseTestManagerForVisibilityDetection capability; clients must stop sending this desired capability.
## [12.0.0](appium/WebDriverAgent@v11.4.3...v12.0.0) (2026-04-14)

### ⚠ BREAKING CHANGES

* remove idb from AppleDevice; clients must stop passing device.idb.
* remove includeNonModalElements WDA setting; clients must stop sending this setting in /settings.
* remove shouldUseTestManagerForVisibilityDetection capability; clients must stop sending this desired capability.

### Code Refactoring

* remove deprecated WDA settings/capabilities and idb typing ([appium#1124](appium#1124)) ([5072e25](appium@5072e25))
Signed-off-by: Muvaffak Onus <me@muvaf.com>
## [12.1.0](appium/WebDriverAgent@v12.0.0...v12.1.0) (2026-04-24)

### Features

* **client:** add ability to set headers on requests ([appium#1127](appium#1127)) ([a8889cd](appium@a8889cd))
## [12.1.1](appium/WebDriverAgent@v12.1.0...v12.1.1) (2026-04-27)

### Miscellaneous Chores

* **compile:** fix compilation ([appium#1129](appium#1129)) ([76d59e8](appium@76d59e8))
## [12.2.0](appium/WebDriverAgent@v12.1.1...v12.2.0) (2026-04-29)

### Features

* Ditch bluebird and lodash ([appium#1130](appium#1130)) ([8899895](appium@8899895))
Bumps [sinon](https://github.com/sinonjs/sinon) from 21.1.2 to 22.0.0.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/main/docs/changelog.md)
- [Commits](sinonjs/sinon@v21.1.2...v22.0.0)

---
updated-dependencies:
- dependency-name: sinon
  dependency-version: 22.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## [12.2.1](appium/WebDriverAgent@v12.2.0...v12.2.1) (2026-05-06)

### Miscellaneous Chores

* **deps-dev:** bump sinon from 21.1.2 to 22.0.0 ([appium#1133](appium#1133)) ([11c579b](appium@11c579b))
* ci: add not about Xcode versions

Added comments regarding Xcode version compatibility and simulator availability.

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
BREAKING CHANGE: quitAndUninstall() removed — use quit() only. App uninstall is out of scope for this module.
BREAKING CHANGE: uninstall() removed — WDA must not be uninstalled from this package; callers (e.g. xcuitest-driver) should own that if needed.
BREAKING CHANGE: setupCaching() no longer uninstalls WDA — on bundle-id or version mismatch it logs and skips caching instead of removing apps from the device. Also, it now returns the cached url on success.
BREAKING CHANGE: appium-ios-device dependency removed — preinstalled WDA on real devices always launches via devicectl (no iOS < 17 Xctest fallback).
## [13.0.0](appium/WebDriverAgent@v12.2.2...v13.0.0) (2026-05-17)

### ⚠ BREAKING CHANGES

* quitAndUninstall() removed — use quit() only. App uninstall is out of scope for this module.
* uninstall() removed — WDA must not be uninstalled from this package; callers (e.g. xcuitest-driver) should own that if needed.
* setupCaching() no longer uninstalls WDA — on bundle-id or version mismatch it logs and skips caching instead of removing apps from the device. Also, it now returns the cached url on success.
* appium-ios-device dependency removed — preinstalled WDA on real devices always launches via devicectl (no iOS < 17 Xctest fallback).

### Features

* Drop legacy APIs ([appium#1137](appium#1137)) ([8995d24](appium@8995d24))
## [13.1.0](appium/WebDriverAgent@v13.0.0...v13.1.0) (2026-05-21)

### Features

* add app icon to WebDriverAgentRunner ([appium#1138](appium#1138)) ([fe8adc8](appium@fe8adc8))
* Add helper method to fetch build settings ([appium#1139](appium#1139)) ([56b5f38](appium@56b5f38))
appium#1138 added Scripts/embed-runner-icon.sh and wired it as a
WebDriverAgentRunner build post-action, but the package.json `files`
allowlist only ships `Scripts/build.sh` and `Scripts/*.mjs`. The new
script matches neither pattern, so it is excluded from the published
npm tarball.

As a result, builds from the published appium-webdriveragent package
run the scheme post-action against a missing script: the Appium app
icon is never embedded into Runner.app, and WebDriverAgentRunner
installs on the home screen with a blank/white icon.

Add an explicit `Scripts/embed-runner-icon.sh` entry to `files` so the
script ships in the package.
## [13.1.1](appium/WebDriverAgent@v13.1.0...v13.1.1) (2026-05-22)

### Bug Fixes

* ship Scripts/embed-runner-icon.sh in the npm package ([appium#1141](appium#1141)) ([17ac1c1](appium@17ac1c1)), closes [appium#1138](appium#1138)
## [13.1.2](appium/WebDriverAgent@v13.1.1...v13.1.2) (2026-05-23)

### Bug Fixes

* Address compilation warnings ([appium#1143](appium#1143)) ([f1f9976](appium@f1f9976))
## [13.1.3](appium/WebDriverAgent@v13.1.2...v13.1.3) (2026-05-24)

### Bug Fixes

* Scheme for derived data path retrieval ([appium#1142](appium#1142)) ([9ada5f6](appium@9ada5f6))
Edgars Eglītis (eglitise) and others added 17 commits June 8, 2026 19:53
## [13.2.4](appium/WebDriverAgent@v13.2.3...v13.2.4) (2026-06-08)

### Bug Fixes

* update WebDriverAgentRunner app icon ([appium#1151](appium#1151)) ([eea2229](appium@eea2229))
* feat: expose native isAccessibilityElement

* refactor: rename nativeAccessible to nativeAccessibilityElement

Address review feedback to use the full word for clarity:
- protocol property wdNativeAccessible -> wdNativeAccessibilityElement
- JSON key isNativeAccessible -> isNativeAccessibilityElement
- XML attribute nativeAccessible -> nativeAccessibilityElement
- setting includeNativeAccessibleInPageSource -> includeNativeAccessibilityElementInPageSource

Co-authored-by: Cursor <cursoragent@cursor.com>

* Unify JSON attribute key prefixing

* Remove empty-key guard from FBJsonPrefixedAttributeKey

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
## [13.3.0](appium/WebDriverAgent@v13.2.4...v13.3.0) (2026-06-09)

### Features

* Expose native isAccessibilityElement ([appium#1146](appium#1146)) ([e615621](appium@e615621))
BREAKING CHANGE: bump the deployment target to 15
## [14.0.0](appium/WebDriverAgent@v13.3.0...v14.0.0) (2026-06-09)

### ⚠ BREAKING CHANGES

* bump the deployment target to 15

### Features

* bump the deployment target to 15 ([appium#1152](appium#1152)) ([74498f7](appium@74498f7))
## [14.1.0](appium/WebDriverAgent@v14.0.0...v14.1.0) (2026-06-10)

### Features

* Add VoiceOver automation support ([appium#1153](appium#1153)) ([6b3631a](appium@6b3631a))
…ethods (appium#1154)

* chore: address runtime version rather than Xcode for selector based methods

* revert unnecessary change
## [14.1.1](appium/WebDriverAgent@v14.1.0...v14.1.1) (2026-06-10)

### Miscellaneous Chores

* address runtime version rather than Xcode for selector based methods ([appium#1154](appium#1154)) ([6618b0b](appium@6618b0b))
## [14.2.0](appium/WebDriverAgent@v14.1.1...v14.2.0) (2026-06-18)

### Features

* Limit the maximum request body size ([appium#1158](appium#1158)) ([9ea244b](appium@9ea244b))
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.9.4 to 26.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## [14.2.1](appium/WebDriverAgent@v14.2.0...v14.2.1) (2026-06-19)

### Miscellaneous Chores

* **deps-dev:** bump @types/node from 25.9.4 to 26.0.0 ([appium#1159](appium#1159)) ([93d7043](appium@93d7043))
BREAKING CHANGE: AppleDevice is now abstract and only contains udid; it no longer exposes simctl or devicectl.
BREAKING CHANGE: Preinstalled WDA launch/terminate no longer falls back to package-owned simctl or devicectl behavior. Callers must provide hostOps.simulator or hostOps.realDevicePreinstalled for those flows.
## [15.0.0](appium/WebDriverAgent@v14.2.1...v15.0.0) (2026-06-22)

### ⚠ BREAKING CHANGES

* AppleDevice is now abstract and only contains udid; it no longer exposes simctl or devicectl.
* Preinstalled WDA launch/terminate no longer falls back to package-owned simctl or devicectl behavior. Callers must provide hostOps.simulator or hostOps.realDevicePreinstalled for those flows.

### Features

* Abstract out platform-specific actions ([appium#1160](appium#1160)) ([890d32b](appium@890d32b))
…EN-2002)

Replays the QA Wolf fork's customizations (previously based on upstream
v11.4.1) on top of upstream appium/WebDriverAgent v15.0.0.

Conflict resolutions:
- FBSessionCommands.m: v15 extracted settings get/set into the new
  FBSettingsHandler. Took v15's version and re-applied our
  `preWarmPageSource` setting in FBSettingsHandler's set/get maps.
- FBXPath.m/.h: kept our "attribute @interface decls moved to the header"
  change; ported v15's new FBNativeAccessibilityElementAttribute interface
  into FBXPath.h so v15's @implementation still resolves.
- Regenerated SPM public-header symlinks via headers.sh: adds v15's
  XCUIDevice+FBVoiceOver.h; preserves the deliberately-exposed
  XCUIElement+FBCustomActions.h.

package.json inherits upstream's 15.0.0 (we never pinned a fork version).

Verification: standalone `xcodebuild -scheme WebDriverAgentLib` framework
build fails identically on both this branch and the current production
v11 fork (pre-existing: the framework build does not honor the fork's
publicHeadersPath header exposure) -- i.e. no regression from the rebase.
The authoritative compile gate is the ios-agent SPM integration build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@return Alert element instance if the prompt is present, otherwise nil
*/
+ (nullable XCUIElement *)fb_limitedAccessPromptAlertElement;

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a new feature. WDA now has custom code to handle the limited access prompts (iOS 18+)

* LICENSE file in the root directory of this source tree.
*/

#import <XCTest/XCTest.h>

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VoiceOver support

Comment on lines +85 to +94
[[FBRoute POST:@"/wda/voiceOver/enable"] respondWithTarget:self action:@selector(handleVoiceOverEnable:)],
[[FBRoute POST:@"/wda/voiceOver/enable"].withoutSession respondWithTarget:self action:@selector(handleVoiceOverEnable:)],
[[FBRoute POST:@"/wda/voiceOver/disable"] respondWithTarget:self action:@selector(handleVoiceOverDisable:)],
[[FBRoute POST:@"/wda/voiceOver/disable"].withoutSession respondWithTarget:self action:@selector(handleVoiceOverDisable:)],
[[FBRoute GET:@"/wda/voiceOver/enabled"] respondWithTarget:self action:@selector(handleVoiceOverEnabled:)],
[[FBRoute GET:@"/wda/voiceOver/enabled"].withoutSession respondWithTarget:self action:@selector(handleVoiceOverEnabled:)],
[[FBRoute POST:@"/wda/voiceOver/move"] respondWithTarget:self action:@selector(handleVoiceOverMove:)],
[[FBRoute POST:@"/wda/voiceOver/move"].withoutSession respondWithTarget:self action:@selector(handleVoiceOverMove:)],
[[FBRoute GET:@"/wda/voiceOver/currentSpeech"] respondWithTarget:self action:@selector(handleVoiceOverCurrentSpeech:)],
[[FBRoute GET:@"/wda/voiceOver/currentSpeech"].withoutSession respondWithTarget:self action:@selector(handleVoiceOverCurrentSpeech:)],

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New VoiceOver endpoints

NSString* const FB_SETTING_AUTO_CLICK_ALERT_SELECTOR = @"autoClickAlertSelector";
NSString* const FB_SETTING_INCLUDE_HITTABLE_IN_PAGE_SOURCE = @"includeHittableInPageSource";
NSString* const FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE = @"includeNativeFrameInPageSource";
NSString* const FB_SETTING_INCLUDE_NATIVE_ACCESSIBILITY_ELEMENT_IN_PAGE_SOURCE = @"includeNativeAccessibilityElementInPageSource";

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New settings. We can now have access to native accessibility information in the page source.

This can slow down the page source process but return more accurate results.

@EltonCarreiro Elton Carreiro (EltonCarreiro) marked this pull request as ready for review June 25, 2026 18:03
master (v11.4.1 + QA Wolf patches) is fully superseded by this branch
(v15.0.0 + the same patches re-applied). Recorded via `-s ours` so PR #17
becomes mergeable without dragging v11-base content back in. bad42ba stays
an ancestor (first parent), so the ios-agent SPM pin remains valid.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.