unstale

npm / webdriverio

webdriverio

What changed in webdriverio 8 to 10, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.

28 breaking3 security33 new APIs and options2 performance15 behavior and defaults8 tooling131 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.1.1 on npm

webdriverio 1061 changes

Breaking changes 24

  • Appium 3 is required, and Appium 1/2 HTTP fallbacks have been dropped.

    10.0.0release notes

  • browser.uploadFile is replaced by element.setFiles.

    10.0.0release notes

  • $ now throws when a selector matches multiple elements.

    10.0.0release notes

  • Use element.setFiles in place of browser.uploadFile.

    10.0.0release notes

  • Element queries now return results as an ElementArray.

    10.0.0release notes

  • The executeAsync command has been removed.

    10.0.0release notes

  • The frame command queries, changing its behavior for developers working with frames.

    10.0.0release notes

  • JSONWP Appium capabilities have been dropped.

    10.0.0release notes

  • The mobile getValue fallback has been removed.

    10.0.0release notes

  • Multiremote $$ now returns a MultiRemoteElementArray.

    10.0.0release notes

  • The multiremote mock() command now returns a MultiRemoteMock.

    10.0.0release notes

  • Multiremote select() behavior is stabilized, and its environment flag has been dropped.

    10.0.0release notes

  • Multiremote naming is aligned to multi-remote / multiRemote.

    10.0.0release notes

  • The type has been renamed to MultiRemoteConfig.

    10.0.0release notes

  • MultiRemoteConfig replaces the renamed MultiremoteConfig type.

    10.0.0release notes

  • WebdriverIO now requires Node.js >=22.19.0.

    10.0.0release notes

  • React 18 and 19 are supported by react$ and react$$ using a built-in resq replacement.

    10.0.0release notes

  • Ignored legacy options for startActivity have been dropped.

    10.0.0release notes

  • switchToFrame is hidden.

    10.0.0release notes

  • The deprecated throttle command has been removed.

    10.0.0release notes

  • The deprecated touchAction command has been removed.

    10.0.0release notes

  • The url command returns a context, changing what developers receive when they use it.

    10.0.0release notes

  • Every session is now treated as W3C.

    10.0.0release notes

  • Unprefixed capability specs and exclude have been dropped.

    10.0.0release notes

New APIs and options 13

  • The snapshot and session packages are prepared for MCP integration.

    10.0.2release notes

  • Repeated controls in snapshots are tagged with their row context.

    10.0.2release notes

  • A proof-of-concept implementation of the snapshot package is introduced.

    10.0.2release notes

  • WebdriverIO now supports the Sauce Labs asia-south-2 data center.

    10.0.1release notes

  • The setup wizard now offers the devtools service, giving users another service option when creating a WebdriverIO project.

    10.0.1release notes

  • browser.act() is added with cached, self-healing steps.

    10.0.0release notes

  • browser.extract() is added with cached, self-healing steps.

    10.0.0release notes

  • Custom commands can be added to browsing contexts.

    10.0.0release notes

  • Chromedriver can be downloaded from Electron releases.

    10.0.0release notes

  • A command to install browser extensions is added.

    10.0.0release notes

  • Native headless Wayland support using weston is added.

    10.0.0release notes

  • A role/ selector is added for selecting by role and accessible name.

    10.0.0release notes

  • A command to uninstall browser extensions is added.

    10.0.0release notes

Performance 1

  • Hot-path performance improvements make test runs faster.

    10.0.0release notes

Behavior and default changes 5

  • browser.emulate() is driven by the BiDi emulation module.

    10.0.0release notes

  • WebdriverIO holds a browsing context for a tab, window, or frame.

    10.0.0release notes

  • Multiremote instances are looked up with getInstance.

    10.0.0release notes

  • Jasmine sync matchers remain synchronous.

    10.0.0release notes

  • savePDF prints PDFs using browsingContext.print.

    10.0.0release notes

Tooling 2

  • The browser channel IPC is typed, giving developers type information when working with browser-runner channels.

    10.0.0release notes

  • The session help output is self-documenting, helping developers understand the command and use it more effectively.

    10.0.0release notes

Fixes and other changes 16

  • Agents stay on the UI path and fail fast.

    10.0.2release notes

  • Custom strategies, matchers, and argument elements can be found again.

    10.0.2release notes

  • Supports expect.extend() for custom matchers in the Jasmine framework.

    10.0.2release notes

  • Adds expect.multiRemote() to the Jasmine expect.

    10.0.2release notes

  • Keeps expect-webdriverio's expect types and types expectAsync matchers.

    10.0.2release notes

  • Preserves the strict option and index in hasElementId.

    10.0.2release notes

  • Regenerated BiDi types for the script.EvaluationResult rename.

    10.0.2release notes

  • Fixes device emulation with unsupported BiDi.

    10.0.1release notes

  • BiDi execute now returns Blob and File values.

    10.0.0release notes

  • Element handling now follows the WebDriver spec for elements from other browsing contexts.

    10.0.0release notes

  • Commands are routed to their held browsing context, so they act on the intended context.

    10.0.0release notes

  • mock.waitForResponse() works with Firefox 304 responses and in every session.

    10.0.0release notes

  • In multiremote, nextElement, previousElement, and parentElement return a MultiRemoteElement.

    10.0.0release notes

  • In multiremote, custom$, react$, and shadow$ return a MultiRemoteElement.

    10.0.0release notes

  • In multiremote, custom$$, react$$, and shadow$$ return a MultiRemoteElementArray.

    10.0.0release notes

  • Multiremote $$ items now work for missing and late elements.

    10.0.0release notes

webdriverio 9157 changes

Breaking changes 4

  • Classic cookie filtering now requires all filter attributes.

    9.31.5release notes

  • Removes the mobile command wrapper.

    9.27.0release notes

  • Deprecated Appium protocol commands were renamed for Appium 3 compatibility.

    9.26.0release notes

  • Renames multiremoteBrowser to multiRemoteBrowser to follow camel-casing rules.

    9.23.0release notes

Security 3

New APIs and options 20

  • Adds support for accepting mobile permission dialogs.

    9.32.0release notes

  • Adds support for CPU and heap profiling.

    9.32.0release notes

  • Adds the Dioxus service to the project creation wizard.

    9.32.0release notes

  • Adds support for dismissing mobile permission dialogs.

    9.32.0release notes

  • Supports CHROMEDRIVER_CDNURL for custom ChromeDriver mirrors.

    9.31.9release notes

  • create-wdio adds third party service null-driver support.

    9.31.6release notes

  • Adds beta ElementArray support under a feature flag for multiRemote.$$(), including MultiRemoteElement[].

    9.31.4release notes

  • Multi-remote instance and element support is enhanced with filter.

    9.31.2release notes

  • The Allure reporter adds a title path.

    9.31.2release notes

  • Expect adds support for multi-element $$() queries.

    9.31.0release notes

  • The WebDriver Bidi response timeout is configurable.

    9.30.1release notes

  • BrowserStack service ships its accessibility Browser type augmentations.

    9.30.0release notes

  • Adds one-to-many Test-Case-ID tagging in the BrowserStack service.

    9.29.1release notes

  • create-wdio adds a Tauri service.

    9.27.2release notes

  • Adds BiDi network data support.

    9.27.1release notes

  • The option can now exclude test suites by name.

    9.23.1release notes

  • The Appium service can start Appium Inspector from the CLI.

    9.22.0release notes

  • A custom timeout can now be passed when starting Appium.

    9.22.0release notes

  • The BrowserStack service implements BrowserStack CLI support.

    9.21.0release notes

  • The Allure reporter adds mode and excluded properties for parameters.

    9.21.0release notes

Performance 1

  • Improves selector performance in the Appium service.

    9.24.0release notes

Behavior and default changes 9

  • Select moved into beta and still requires an environment flag.

    9.31.7release notes

  • The unstable Multi-remote select implementations were reviewed and the filter was removed.

    9.31.5release notes

  • Multi-remote instance and element support is enhanced with select.

    9.31.2release notes

  • WDIO CLI-flow App Automate sessions are routed to app-accessibility.

    9.30.0release notes

  • BrowserStack skips accessibility scans for BiDi window/context commands.

    9.30.0release notes

  • Allure reporter attaches suite-level before/after all hook steps to every test.

    9.30.0release notes

  • The gRPC message limit in WDIO-v9 is updated to 20 MB.

    9.27.2release notes

  • Adds the spec file name to the log file prefix.

    9.23.3release notes

  • Enhanced getContext, getContexts, and switchContext APIs.

    9.23.0release notes

Tooling 5

  • The CLI REPL now supports TypeScript files.

    9.31.0release notes

  • BrowserStack reports Mocha hooks in the CLI/testhub flow.

    9.30.0release notes

  • create-wdio migrates its Electron setup to @wdio/electron-service.

    9.27.2release notes

  • The plugin follows the ESLint v9 plugin specification.

    9.26.0release notes

  • Uses a no-floating-promise ESLint rule to catch missing await statements.

    9.25.0release notes

Fixes and other changes 115

  • Works correctly on multi-remote browsers.

    9.32.0release notes

  • Uses the BiDi accessibility locator for aria selectors.

    9.32.0release notes

  • Enables followRedirects for BiDi connections.

    9.32.0release notes

  • Accepts URLPattern as the url for browser.mock.

    9.32.0release notes

  • Honors exclusion options when retrieving HTML.

    9.32.0release notes

  • Adds undefined as a possible return type.

    9.32.0release notes

  • Resolves a mock state error and race condition.

    9.32.0release notes

  • Handles dynamic function payloads in mock responses.

    9.32.0release notes

  • Uses the correct navigation ID when waiting for network idle.

    9.32.0release notes

  • Reports a non-zero exit code for workers terminated by a signal.

    9.32.0release notes

  • Re-throws the original stale-element error when refetching fails.

    9.32.0release notes

  • Keeps a valid top-level context and can recover a destroyed context when switching to the parent frame.

    9.32.0release notes

  • Applies network throttling conditions to service workers.

    9.32.0release notes

  • Fixes EdgeDriver upgrades when the browser version is missing the corresponding driver architecture.

    9.31.9release notes

  • Restores nested and Shadow DOM scrolling in scrollIntoView.

    9.31.8release notes

  • Tracks the lifecycle of dialog listeners.

    9.31.6release notes

  • Applies keyword exclude to grouped specs.

    9.31.6release notes

  • Clears shadow roots when navigation starts.

    9.31.6release notes

  • Rejects invalid timeout values.

    9.31.6release notes

  • Retries after a failed sync.

    9.31.6release notes

  • BiDi no such node errors are handled as stale errors.

    9.31.5release notes

  • Tracks the document element separately per context.

    9.31.4release notes

  • Correctly serializes IPv6 BiDi WebSocket candidates.

    9.31.4release notes

  • Typing for expect-wdio/api was fixed.

    9.31.3release notes

  • Spec files are retried when session creation fails.

    9.31.3release notes

  • The .cts file extension is added to the supported extensions for configuration files.

    9.31.2release notes

  • Matching mock responses are now recorded even when they are not blocked.

    9.31.2release notes

  • The create-wdio setup installs @serenity-js/html-reporter instead of @senity-js/serenity-bdd.

    9.31.2release notes

  • Requests aborted by connectionRetryTimeout are now retried.

    9.31.0release notes

  • The current context is reset when its browsing context is destroyed.

    9.31.0release notes

  • Element command overrides are now composed.

    9.31.0release notes

  • The wheel action now scrolls by deltaX and deltaY.

    9.31.0release notes

  • An undefined element that passes a filter is now kept.

    9.31.0release notes

  • Driver setup now respects WEBDRIVER_CACHE_DIR.

    9.31.0release notes

  • Guards the Object.keys call when the request body is stringified.

    9.30.1release notes

  • With Cucumber Opts.scenarioLevelReporter, scenarios are reported as testcases.

    9.30.1release notes

  • BrowserStack accessibility options supplied as stringified booleans are coerced.

    9.30.0release notes

  • BrowserStack finalizes orphaned test runs when the process exits interrupted.

    9.30.0release notes

  • Scoped element lookups no longer include unrelated shadow roots.

    9.30.0release notes

  • The CDDL was updated and regenerated to correct a null literal in the protocol definitions.

    9.30.0release notes

  • In BiDi, skips the isConnected check for non-shadow element scopes.

    9.29.1release notes

  • wdio-utils now uses a supported EdgeDriver CDN.

    9.29.0release notes

  • Fixes finished metadata for reloadSession in the BrowserStack service.

    9.29.0release notes

  • waitForResponse now waits for the networkCollector's response.

    9.29.0release notes

  • The BrowserStack config.accessibility issue was addressed.

    9.28.0release notes

  • The logger is now CJS compliant, fixing compatibility for CommonJS consumers.

    9.28.0release notes

  • The BrowserStack service omits unset accessibility configuration.

    9.27.2release notes

  • The BrowserStack service and wdio-types now honor the skipped status.

    9.27.2release notes

  • Fixes an EBUSY file-busy error during spawn.

    9.27.2release notes

  • Calls the afterSession hook when session initialization fails.

    9.27.1release notes

  • Skips desktop browser download when androidPackage is set.

    9.27.1release notes

  • Fixes disableElementImplicitWait when it is defined too early.

    9.27.1release notes

  • Allure reporter historyId now uses the capability key instead of cid.

    9.27.1release notes

  • Fixes stale shadow element behavior.

    9.27.1release notes

  • Prevents a shadow root memory leak during SPA navigation.

    9.27.1release notes

  • Reverts the protocol rename of queryAppState.

    9.27.0release notes

  • Fixes service startup failures caused by Appium stderr log output.

    9.27.0release notes

  • Fixes TypeScript 7 compatibility.

    9.27.0release notes

  • Fixed mobile command argument mismatches for Appium 3 compatibility.

    9.26.1release notes

  • Updates the exit signal used for CLI process termination on Unix.

    8.48.1, 9.25.0release notesrelease notesrelease notesrelease notes

  • Ensures getValue returns a string.

    9.25.0release notes

  • Ignores the 'no such frame' error in handleUserPrompt.

    9.25.0release notes

  • Properly resolves pending steps and status …

    9.25.0release notes

  • Correctly detects the Cucumber framework in mult…

    9.25.0release notes

  • Improves robustness for BiDi cookies.

    9.23.3release notes

  • Fixes overlapping capabilities.

    9.23.3release notes

  • Restores the jiti fallback for CJS named imports in wdio-config.

    9.23.3release notes

  • Attaches Cucumber data tables to the step instead of the previously used location.

    9.23.3release notes

  • Fixes a Jasmine error in the Sauce service.

    9.23.3release notes

  • Passes through clean NODE_OPTIONS in the Appium service.

    9.23.3release notes

  • Allows parallel runs to download the CLI.

    9.23.3release notes

  • Allows waitForClickable in native context if the browser condition is met.

    9.23.3release notes

  • Corrects typings and inconsistencies in commands.

    9.23.3release notes

  • BiDi navigation now handles the 'no such frame' error.

    9.23.1release notes

  • Chaining element command overwrites no longer produces undefined binds.

    9.23.1release notes

  • The nested describe structure is preserved by the Jasmine and Allure integration.

    9.23.1release notes

  • Specs added dynamically in this hook are now handled correctly.

    9.23.1release notes

  • Relative XPath chaining works in BiDi mode.

    9.23.1release notes

  • Timeouts are propagated correctly during retries.

    9.23.1release notes

  • The shared-store service uses 127.0.0.1 instead of localhost.

    9.23.1release notes

  • The JUnit reporter no longer reports a skipped test when no tests are executed.

    9.23.1release notes

  • This setting can now be overridden in the beforeSession hook.

    9.23.1release notes

  • The command no longer uses double ports.

    9.23.1release notes

  • The browser runner now prioritizes this package for Tailwind CSS PostCSS handling.

    9.23.1release notes

  • Calling this.skip() in Mocha hooks is no longer reported as a failure.

    9.23.1release notes

  • Overlapping W3C capabilities are normalized.

    9.23.1release notes

  • Stuck workers are force-killed after the shutdown timeout.

    9.23.1release notes

  • Restores hook data for Jasmine 5.10 and later.

    9.23.0release notes

  • Rethrows pending and skip errors for Jasmine.

    9.23.0release notes

  • Handles a 'no such alert' error when a dialog closes.

    9.23.0release notes

  • The command no longer swaps a valid indexed element.

    9.23.0release notesrelease notes

  • Action IDs are now type-specific to comply with the W3C WebDriver specification.

    9.22.0release notes

  • The BrowserStack service's BiDi syntax error is fixed.

    9.22.0release notes

  • Wildcard support in browser.mock is fixed.

    9.22.0release notes

  • File contention in the BrowserStack CLI is fixed.

    9.22.0release notes

  • Chrome workers on Windows now use a unique user-data directory.

    9.22.0release notes

  • The CLI no longer loads the config file twice and fixes tsx file timing load issues.

    9.22.0release notes

  • Framework timeouts are propagated to the shim to avoid premature behavior.

    9.22.0release notes

  • The implicit wait now handles stale elements correctly.

    9.22.0release notes

  • The Allure reporter now includes the capability ID in historyId for multi-capability runs.

    9.22.0release notes

  • isElementClickable is fixed for Perfecto mobile devices.

    9.22.0release notes

  • isElementDisplayed is fixed for Perfecto mobile devices.

    9.22.0release notes

  • The CLI check for parallel multiremote is corrected for empty capabilities.

    9.22.0release notes

  • The attach command now flattens options to the top level for waitFor commands.

    9.22.0release notes

  • Handling is fixed for multiple webviews with the same package when the first webview is empty.

    9.22.0release notes

  • Absolute paths are obtained using native path.resolve.

    9.21.0release notes

  • The launcher ignores warnings and debugger messages.

    9.21.0release notes

  • All options are passed to fetch.

    9.21.0release notes

  • Stale elements are detected in BiDi mode when using getCSSProperty.

    9.21.0release notes

  • The getHTML return type is corrected.

    9.21.0release notes

  • The withinViewport check logic is corrected.

    9.21.0release notes

  • The CLI respects maxInstancesPerCapability for dynamic capabilities.

    9.21.0release notes

  • Request mocking works when the mock is specified with a hostname only.

    9.21.0release notes

  • The JUnit reporter adds property support for Cucumber tests.

    9.21.0release notes

  • waitForExist maintains elementIds for shadow elements.

    9.21.0release notes

webdriverio 82 changes

Behavior and default changes 1

Tooling 1