# What changed in webdriverio

> 226 changes in webdriverio 8 to 10 from its official release notes, upgrade guides and advisories: 28 breaking, 3 security, 34 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/webdriverio/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## webdriverio 10

### Breaking changes

- Appium 3 is required, and Appium 1/2 HTTP fallbacks have been dropped. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- browser.uploadFile is replaced by element.setFiles. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- $ now throws when a selector matches multiple elements. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Use element.setFiles in place of browser.uploadFile. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Element queries now return results as an ElementArray. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The executeAsync command has been removed. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The frame command queries, changing its behavior for developers working with frames. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- JSONWP Appium capabilities have been dropped. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The mobile getValue fallback has been removed. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Multiremote $$ now returns a MultiRemoteElementArray. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The multiremote mock() command now returns a MultiRemoteMock. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Multiremote select() behavior is stabilized, and its environment flag has been dropped. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Multiremote naming is aligned to multi-remote / multiRemote. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The type has been renamed to MultiRemoteConfig. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- MultiRemoteConfig replaces the renamed MultiremoteConfig type. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- WebdriverIO now requires Node.js >=22.19.0. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- React 18 and 19 are supported by react$ and react$$ using a built-in resq replacement. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Ignored legacy options for startActivity have been dropped. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- switchToFrame is hidden. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The deprecated throttle command has been removed. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The deprecated touchAction command has been removed. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The url command returns a context, changing what developers receive when they use it. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Every session is now treated as W3C. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Unprefixed capability specs and exclude have been dropped. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)

### New APIs and options

- The snapshot and session packages are prepared for MCP integration. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- Repeated controls in snapshots are tagged with their row context. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- A proof-of-concept implementation of the snapshot package is introduced. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- WebdriverIO now supports the Sauce Labs asia-south-2 data center. (10.0.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.1)
- The setup wizard now offers the devtools service, giving users another service option when creating a WebdriverIO project. (10.0.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.1)
- browser.act() is added with cached, self-healing steps. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- browser.extract() is added with cached, self-healing steps. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Custom commands can be added to browsing contexts. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Chromedriver can be downloaded from Electron releases. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- A command to install browser extensions is added. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Native headless Wayland support using weston is added. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- A role/ selector is added for selecting by role and accessible name. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- A command to uninstall browser extensions is added. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)

### Performance

- Hot-path performance improvements make test runs faster. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)

### Behavior and default changes

- browser.emulate() is driven by the BiDi emulation module. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- WebdriverIO holds a browsing context for a tab, window, or frame. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Multiremote instances are looked up with getInstance. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Jasmine sync matchers remain synchronous. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- savePDF prints PDFs using browsingContext.print. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)

### Tooling

- The browser channel IPC is typed, giving developers type information when working with browser-runner channels. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- The session help output is self-documenting, helping developers understand the command and use it more effectively. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)

### Fixes and other changes

- Agents stay on the UI path and fail fast. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- Custom strategies, matchers, and argument elements can be found again. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- Supports expect.extend() for custom matchers in the Jasmine framework. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- Adds expect.multiRemote() to the Jasmine expect. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- Keeps expect-webdriverio's expect types and types expectAsync matchers. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- Preserves the strict option and index in hasElementId. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- Regenerated BiDi types for the script.EvaluationResult rename. (10.0.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.2)
- Fixes device emulation with unsupported BiDi. (10.0.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.1)
- BiDi execute now returns Blob and File values. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Element handling now follows the WebDriver spec for elements from other browsing contexts. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Commands are routed to their held browsing context, so they act on the intended context. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- mock.waitForResponse() works with Firefox 304 responses and in every session. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- In multiremote, nextElement, previousElement, and parentElement return a MultiRemoteElement. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- In multiremote, custom$, react$, and shadow$ return a MultiRemoteElement. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- In multiremote, custom$$, react$$, and shadow$$ return a MultiRemoteElementArray. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)
- Multiremote $$ items now work for missing and late elements. (10.0.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v10.0.0)

## webdriverio 9

### Breaking changes

- Classic cookie filtering now requires all filter attributes. (9.31.5) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.5)
- Removes the mobile command wrapper. (9.27.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.0)
- Deprecated Appium protocol commands were renamed for Appium 3 compatibility. (9.26.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.26.0)
- Renames multiremoteBrowser to multiRemoteBrowser to follow camel-casing rules. (9.23.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.0)

### Security

- Its preload script is guarded against partial-Bidi remotes. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- Redacts the username accesskey from automation logs. (8.48.1, 9.27.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.3), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.2), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.1), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.1)
- A fix addresses credentials leaking in logs. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)

### New APIs and options

- Adds support for accepting mobile permission dialogs. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Adds support for CPU and heap profiling. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Adds the Dioxus service to the project creation wizard. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Adds support for dismissing mobile permission dialogs. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Supports CHROMEDRIVER_CDNURL for custom ChromeDriver mirrors. (9.31.9) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.9)
- create-wdio adds third party service null-driver support. (9.31.6) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.6)
- Adds beta ElementArray support under a feature flag for multiRemote.$$(), including MultiRemoteElement[]. (9.31.4) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.4)
- Multi-remote instance and element support is enhanced with filter. (9.31.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.2)
- The Allure reporter adds a title path. (9.31.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.2)
- Expect adds support for multi-element $$() queries. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- The WebDriver Bidi response timeout is configurable. (9.30.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.1)
- BrowserStack service ships its accessibility Browser type augmentations. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- Adds one-to-many Test-Case-ID tagging in the BrowserStack service. (9.29.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.29.1)
- create-wdio adds a Tauri service. (9.27.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.2)
- Adds BiDi network data support. (9.27.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.1)
- The option can now exclude test suites by name. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- The Appium service can start Appium Inspector from the CLI. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- A custom timeout can now be passed when starting Appium. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- The BrowserStack service implements BrowserStack CLI support. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- The Allure reporter adds mode and excluded properties for parameters. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)

### Performance

- Improves selector performance in the Appium service. (9.24.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.24.0)

### Behavior and default changes

- Select moved into beta and still requires an environment flag. (9.31.7) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.7)
- The unstable Multi-remote select implementations were reviewed and the filter was removed. (9.31.5) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.5)
- Multi-remote instance and element support is enhanced with select. (9.31.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.2)
- WDIO CLI-flow App Automate sessions are routed to app-accessibility. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- BrowserStack skips accessibility scans for BiDi window/context commands. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- Allure reporter attaches suite-level before/after all hook steps to every test. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- The gRPC message limit in WDIO-v9 is updated to 20 MB. (9.27.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.2)
- Adds the spec file name to the log file prefix. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Enhanced getContext, getContexts, and switchContext APIs. (9.23.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.0)

### Tooling

- The CLI REPL now supports TypeScript files. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- BrowserStack reports Mocha hooks in the CLI/testhub flow. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- create-wdio migrates its Electron setup to @wdio/electron-service. (9.27.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.2)
- The plugin follows the ESLint v9 plugin specification. (9.26.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.26.0)
- Uses a no-floating-promise ESLint rule to catch missing await statements. (9.25.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.25.0)

### Fixes and other changes

- Works correctly on multi-remote browsers. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Uses the BiDi accessibility locator for aria selectors. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Enables followRedirects for BiDi connections. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Accepts URLPattern as the url for browser.mock. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Honors exclusion options when retrieving HTML. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Adds undefined as a possible return type. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Resolves a mock state error and race condition. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Handles dynamic function payloads in mock responses. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Uses the correct navigation ID when waiting for network idle. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Reports a non-zero exit code for workers terminated by a signal. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Re-throws the original stale-element error when refetching fails. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Keeps a valid top-level context and can recover a destroyed context when switching to the parent frame. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Applies network throttling conditions to service workers. (9.32.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.32.0)
- Fixes EdgeDriver upgrades when the browser version is missing the corresponding driver architecture. (9.31.9) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.9)
- Restores nested and Shadow DOM scrolling in scrollIntoView. (9.31.8) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.8)
- Tracks the lifecycle of dialog listeners. (9.31.6) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.6)
- Applies keyword exclude to grouped specs. (9.31.6) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.6)
- Clears shadow roots when navigation starts. (9.31.6) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.6)
- Rejects invalid timeout values. (9.31.6) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.6)
- Retries after a failed sync. (9.31.6) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.6)
- BiDi no such node errors are handled as stale errors. (9.31.5) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.5)
- Tracks the document element separately per context. (9.31.4) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.4)
- Correctly serializes IPv6 BiDi WebSocket candidates. (9.31.4) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.4)
- Typing for expect-wdio/api was fixed. (9.31.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.3)
- Spec files are retried when session creation fails. (9.31.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.3)
- The .cts file extension is added to the supported extensions for configuration files. (9.31.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.2)
- Matching mock responses are now recorded even when they are not blocked. (9.31.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.2)
- The create-wdio setup installs @serenity-js/html-reporter instead of @senity-js/serenity-bdd. (9.31.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.2)
- Requests aborted by connectionRetryTimeout are now retried. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- The current context is reset when its browsing context is destroyed. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- Element command overrides are now composed. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- The wheel action now scrolls by deltaX and deltaY. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- An undefined element that passes a filter is now kept. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- Driver setup now respects WEBDRIVER_CACHE_DIR. (9.31.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.31.0)
- Guards the Object.keys call when the request body is stringified. (9.30.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.1)
- With Cucumber Opts.scenarioLevelReporter, scenarios are reported as testcases. (9.30.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.1)
- BrowserStack accessibility options supplied as stringified booleans are coerced. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- BrowserStack finalizes orphaned test runs when the process exits interrupted. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- Scoped element lookups no longer include unrelated shadow roots. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- The CDDL was updated and regenerated to correct a null literal in the protocol definitions. (9.30.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.30.0)
- In BiDi, skips the isConnected check for non-shadow element scopes. (9.29.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.29.1)
- wdio-utils now uses a supported EdgeDriver CDN. (9.29.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.29.0)
- Fixes finished metadata for reloadSession in the BrowserStack service. (9.29.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.29.0)
- waitForResponse now waits for the networkCollector's response. (9.29.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.29.0)
- The BrowserStack config.accessibility issue was addressed. (9.28.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.28.0)
- The logger is now CJS compliant, fixing compatibility for CommonJS consumers. (9.28.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.28.0)
- The BrowserStack service omits unset accessibility configuration. (9.27.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.2)
- The BrowserStack service and wdio-types now honor the skipped status. (9.27.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.2)
- Fixes an EBUSY file-busy error during spawn. (9.27.2) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.2)
- Calls the afterSession hook when session initialization fails. (9.27.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.1)
- Skips desktop browser download when androidPackage is set. (9.27.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.1)
- Fixes disableElementImplicitWait when it is defined too early. (9.27.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.1)
- Allure reporter historyId now uses the capability key instead of cid. (9.27.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.1)
- Fixes stale shadow element behavior. (9.27.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.1)
- Prevents a shadow root memory leak during SPA navigation. (9.27.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.1)
- Reverts the protocol rename of queryAppState. (9.27.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.0)
- Fixes service startup failures caused by Appium stderr log output. (9.27.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.0)
- Fixes TypeScript 7 compatibility. (9.27.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.27.0)
- Fixed mobile command argument mismatches for Appium 3 compatibility. (9.26.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.26.1)
- Updates the exit signal used for CLI process termination on Unix. (8.48.1, 9.25.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.3), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.2), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.1), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.25.0)
- Ensures getValue returns a string. (9.25.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.25.0)
- Ignores the 'no such frame' error in handleUserPrompt. (9.25.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.25.0)
- Properly resolves pending steps and status … (9.25.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.25.0)
- Correctly detects the Cucumber framework in mult… (9.25.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.25.0)
- Improves robustness for BiDi cookies. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Fixes overlapping capabilities. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Restores the jiti fallback for CJS named imports in wdio-config. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Attaches Cucumber data tables to the step instead of the previously used location. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Fixes a Jasmine error in the Sauce service. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Passes through clean NODE_OPTIONS in the Appium service. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Allows parallel runs to download the CLI. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Allows waitForClickable in native context if the browser condition is met. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- Corrects typings and inconsistencies in commands. (9.23.3) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.3)
- BiDi navigation now handles the 'no such frame' error. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- Chaining element command overwrites no longer produces undefined binds. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- The nested describe structure is preserved by the Jasmine and Allure integration. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- Specs added dynamically in this hook are now handled correctly. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- Relative XPath chaining works in BiDi mode. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- Timeouts are propagated correctly during retries. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- The shared-store service uses 127.0.0.1 instead of localhost. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- The JUnit reporter no longer reports a skipped test when no tests are executed. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- This setting can now be overridden in the beforeSession hook. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- The command no longer uses double ports. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- The browser runner now prioritizes this package for Tailwind CSS PostCSS handling. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- Calling this.skip() in Mocha hooks is no longer reported as a failure. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- Overlapping W3C capabilities are normalized. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- Stuck workers are force-killed after the shutdown timeout. (9.23.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1)
- Restores hook data for Jasmine 5.10 and later. (9.23.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.0)
- Rethrows pending and skip errors for Jasmine. (9.23.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.0)
- Handles a 'no such alert' error when a dialog closes. (9.23.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.0)
- The command no longer swaps a valid indexed element. (9.23.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.1), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.23.0)
- Action IDs are now type-specific to comply with the W3C WebDriver specification. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- The BrowserStack service's BiDi syntax error is fixed. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- Wildcard support in browser.mock is fixed. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- File contention in the BrowserStack CLI is fixed. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- Chrome workers on Windows now use a unique user-data directory. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- The CLI no longer loads the config file twice and fixes tsx file timing load issues. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- Framework timeouts are propagated to the shim to avoid premature behavior. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- The implicit wait now handles stale elements correctly. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- The Allure reporter now includes the capability ID in historyId for multi-capability runs. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- isElementClickable is fixed for Perfecto mobile devices. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- isElementDisplayed is fixed for Perfecto mobile devices. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- The CLI check for parallel multiremote is corrected for empty capabilities. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- The attach command now flattens options to the top level for waitFor commands. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- Handling is fixed for multiple webviews with the same package when the first webview is empty. (9.22.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.22.0)
- Absolute paths are obtained using native path.resolve. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- The launcher ignores warnings and debugger messages. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- All options are passed to fetch. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- Stale elements are detected in BiDi mode when using getCSSProperty. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- The getHTML return type is corrected. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- The withinViewport check logic is corrected. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- The CLI respects maxInstancesPerCapability for dynamic capabilities. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- Request mocking works when the mock is specified with a hostname only. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- The JUnit reporter adds property support for Cucumber tests. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- waitForExist maintains elementIds for shadow elements. (9.21.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.21.0)
- Adds a semicolon to fix browser.execute on Perfecto. (9.20.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.20.1)
- Prevents stale CSS property reads in WebDriver Bidi mode. (9.20.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.20.1)
- Reverts the tsConfigPath change in wdio.conf. (9.20.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.20.1)
- Fixes wdio repl when run with multiremote capabilities. (9.20.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.20.1)
- Invokes terminate on all unsuccessful websocket candidates. (9.20.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v9.20.1)

## webdriverio 8

### New APIs and options

- Adds the centralHeader key for app accessibility authentication in the BrowserStack service. (8.48.0) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.0)

### Behavior and default changes

- Enhances the gRPC client with message size limits. (8.48.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.3), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.2), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.1)

### Tooling

- Adds targeted scans to the WDIO CLI V8 BrowserStack service. (8.48.1) — [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.3), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.2), [release notes](https://github.com/webdriverio/webdriverio/releases/tag/v8.48.1)
