Power Your Software Testing with AI Agents and Cloud
The Native AI-Agentic Cloud Platform to Supercharge Quality Engineering. Test Intelligently and Ship Faster.
- TestMu AI (Formerly LambdaTest)
- /
- Blog
- /
- WebdriverIO v10: What's New for Agent Verification Loops
WebdriverIO v10: What's New for Agent Verification Loops
WebdriverIO v10 adds wdio session, browser.act() and DevTools traces for agent verification loops. See what's new, what breaks, and how to run v10 in the cloud.
Published on:
A coding agent finishes a checkout feature and reports that it works. Nobody on the team will read its whole diff, so the claim has to be proven another way: open the app, click through the feature, check what the screen shows, and keep a test that repeats the check on every change.
That loop is the design target of WebdriverIO v10, released on October 5, 2026: 191 people merged 1,725 pull requests across 41 repositories to ship it.
This guide covers what v10 adds for agents, what breaks when you upgrade from v9, and what to set up before you run v10 suites on TestMu AI. If the framework is new to you, start with the WebdriverIO tutorial.
TL;DR
WebdriverIO v10, released on October 5, 2026, rebuilds the framework around verification loops for coding agents. An agent can drive a real browser, phone or desktop app with wdio session, write test steps as intent with browser.act(), debug failures with DevTools traces, and export what worked as a plain, deterministic test.
- wdio session: The WebdriverIO v10 wdio session CLI keeps one session alive across short shell commands, so a coding agent can open an app, act on element refs, check the result, and export the working steps as a test.
- browser.act(): The WebdriverIO v10 browser.act() command sends a natural-language test step to your model once, records the WebdriverIO commands it produces, and replays them without a model on later runs, so a passing run spends no tokens on that step.
- Upgrade requirements: WebdriverIO v10 needs Node.js 22.19 or later, W3C sessions only, and Appium 3, and its $ command now throws when a selector matches more than one element.
- Cloud runs on TestMu AI: TestMu AI runs WebdriverIO suites across 3,000+ browser/OS combinations, and its real devices offer Appium 3.0.2 on supported Android and iOS versions when you set the appiumVersion capability.
What Is New in WebdriverIO v10?
WebdriverIO v10 adds a set of features built for agents and verification loops, plus a cleanup of the core that removes old protocol code. The table maps each headline feature to the job it does.
| Feature | What it does | Who it helps |
|---|---|---|
| wdio session | Keeps one session alive across shell commands; the agent snapshots the screen, acts on element refs, and exports the steps as a test | Coding agents verifying a change they just made |
| browser.act() and extract() | Turns a natural-language step into recorded WebdriverIO commands that replay without a model; extract() reads page data against a schema | Test authors who want steps written as intent |
| @wdio/mcp | One MCP server for browsers, Appium mobile sessions, Electron apps, session logs, browser mocking and cloud sessions, including TestMu AI's real device and browser clouds | Agents that prefer MCP tools over the shell |
| WebdriverIO DevTools | A live dashboard while tests run, plus a portable trace.zip you can replay offline, attach to CI, or hand to an agent | Anyone debugging a failed run |
| Browsing contexts | Tabs, windows and frames become values you hold instead of a hidden pointer you switch | Tests that span tabs, pop-ups and iframes |
| Mobile and desktop | Cross-platform mobile commands such as tap, swipe and pinch, Appium 3, Electron, Tauri and Dioxus services, and a headless Wayland display server for CI | Teams testing beyond the browser tab |
Three TestMu AI engineers are credited in the release: Navin Chandra for BiDi request headers, window switching in classic sessions and attachToSession fixes, Swastik Baranwal for element array and Electron fixes, and Sai Krishna for shutting down the Appium server cleanly when a run completes.
How Does wdio session Let an Agent Drive the App?
wdio session keeps one WebdriverIO session alive across many short shell commands. That matches how coding agents work: run a command, read the output, decide the next step. A full loop looks like this:
npx wdio session open chrome http://localhost:3000
npx wdio session snapshot --interactive
npx wdio session click e3
npx wdio session exec -e "await expect($('aria/Cart (1)')).toBeDisplayed()"
npx wdio session export --out test/specs/cart.e2e.ts
npx wdio session closeThe snapshot gives every element on screen a short ref such as e3, so the agent acts on a handle instead of inventing a selector. The export step turns the commands that worked into a regular WebdriverIO spec that you can read and rerun without a model.
- Platforms - the same commands work with Chrome, Firefox, Edge and Safari, Android and iOS through Appium 3, Electron, Tauri and Dioxus, and native macOS and Windows apps.
- Setup checks - npx wdio session doctor android reports what is missing on the machine before the agent gets stuck.
- Agent skill - npm init wdio offers to install a wdio-session skill, so Claude Code, Cursor, Codex and Copilot know the commands.
- Origin - the command started as wdiox, a side project by Vince Graics, and moved into the core CLI for v10.
The project also published an open benchmark that gives coding agents real tasks on live websites and swaps only the browser tool, keeping the model, harness and prompt the same. According to the release post:
- It runs a 100-task sample of Online-Mind2Web, real tasks on live websites, judged by WebJudge with a model from another family.
- Reviewing every task wdio session failed exposed gaps with long pages, frames and custom widgets; fixing them took it from 22 to 31 of the first 50 tasks with Claude.
- With 100 tasks and one run each, the 95% confidence interval of a score is still about plus or minus 10 points, so the leading setups are effectively tied.
How Does browser.act() Turn Intent Into Replayable Code?
browser.act() comes from the new @wdio/ai-service. It asks your model to perform a step once, records the WebdriverIO commands it ran, and replays them from a cache file on later runs. For example:
import { browser, expect } from '@wdio/globals'
import { z } from 'zod'
it('adds a shirt to the cart', async () => {
await browser.url('/shirts/blue')
await browser.act('Add the blue T-shirt in size M to the cart')
const cart = await browser.extract(
'the line items in the cart',
z.array(z.object({ name: z.string(), size: z.string(), qty: z.number() }))
)
expect(cart).toContainEqual({ name: 'Blue T-Shirt', size: 'M', qty: 1 })
})- Record - on the first run, the instruction goes to your model with the wdio session actions. Each step runs as a regular WebdriverIO command and is written to __act__/cart.e2e.ts.json next to the spec.
- Replay - later runs replay those commands without a model, so a passing run spends no tokens on act() and runs as fast as hand-written code.
- Heal - when a recorded step fails, the service tries the other recorded selectors first, then the element's role and accessible name, still without a model. Only if that fails does the model continue from the failing step.
- Eject - npx wdio-ai eject test/specs/cart.e2e.ts converts the recorded act() calls into plain WebdriverIO code when you want the model gone for good.
The heal step is stricter than selector-only self-healing. Every recorded step stores its effect, meaning the requests it sent, the navigation it caused and the page parts it changed, and a heal only counts when it does the same thing. A heal onto a look-alike Add to cart button in a wishlist widget sends a different request, so the test fails instead of passing on the wrong element.
extract() is never cached: it reads the current page and calls the model on every run. You choose the model, whether Anthropic, OpenAI, OpenRouter, or a local model through Ollama, LM Studio or llama.cpp.
What Changes for Debugging and Multi-Tab Tests in v10?
The release post names Playwright's trace viewer and Cypress's time-travel debugging as the standard WebdriverIO users had been missing. WebdriverIO DevTools is the answer, in two parts:
- Live mode - a dashboard opens while tests run and shows every command, the page, and console and network logs, with one-click reruns of a single test.
- Trace mode - records a portable trace.zip that you can replay offline, attach to a CI run, or give to an agent to compare against a passing run.
Multi-tab tests change too. In a WebDriver BiDi session, tabs, windows and frames are WebdriverIO.BrowsingContext values you hold, so a test can check a payment iframe, a second tab and the main page without switching back and forth:
- browser.url() returns the page it opened.
- browser.newWindow() returns the new tab without switching to it.
- context.frame() returns a frame of that page, and commands on each value run in that context.
- switchWindow and switchFrame throw in BiDi sessions; classic sessions keep them.
What Breaks When You Upgrade From WebdriverIO v9 to v10?
The v10 migration guide says most breaking changes cannot be applied by a codemod, because they depend on what your tests mean. These are the ones most suites hit first:
| Area | What breaks in v10 | What to do |
|---|---|---|
| Node.js | Node.js 22.19.0 or later is required; Node.js 18 and 20 are unsupported | Upgrade Node.js on developer machines and CI images first |
| Protocol | Every session is a W3C session; JSON Wire leftovers such as the 'page load' timeout key are rejected | Use pageLoad and W3C capability names |
| Strict $ | $ throws a StrictSelectorError when a selector matches more than one element | Narrow the selector, use $$()[0] for an intended first match, or set strictSelectors: false to restore v9 behavior |
| Removed commands | executeAsync, throttle, touchAction and uploadFile are gone | Pass an async function to execute, and use throttleNetwork, the Actions API or tap and swipe, and setFiles |
| Frames and windows | switchWindow and switchFrame throw in BiDi sessions, and switchToFrame is no longer public | Hold browsing context values instead of switching |
| Appium | Appium 3 is required; Appium 1 and 2 and the old HTTP fallbacks are gone | Upgrade the server and drivers, or use a cloud that offers Appium 3 |
| Test frameworks | Mocha 12, Cucumber 13 and Jasmine 6; jasmineNodeOpts and Cucumber's tagExpression now throw | Rename them to jasmineOpts and tags |
| Assertions | expect-webdriverio 8 is the required peer dependency | Update it in the same change as the @wdio/* packages |
| Visual testing | Screenshots are compared with Pixelmatch instead of ResembleJS | Plan a one-time baseline update |
The project ships a migration skill for coding agents. Install it from the project you are upgrading, then ask your agent to migrate the suite:
npx skills add webdriverio/webdriverio --skill wdio-v10-migrationStrict selector violations only show up when the suite runs, so plan a full run after the upgrade. If your suite relies on custom matchers, check the WebdriverIO assertions you use against the expect-webdriverio 8 changes.
Note: Upgrading to WebdriverIO v10? Run the migrated suite in parallel on TestMu AI's cloud grid before you merge, so every strict selector and removed command surfaces in one pass. Try TestMu AI free!
How Do You Run WebdriverIO v10 on TestMu AI?
WebdriverIO connects to TestMu AI through the standard WebDriver hub, set up as shown in the WebdriverIO Selenium grid docs. Before you move a v10 suite there, check these points:
- The service plugin - wdio-lambdatest-service 4.0.2, the latest release on npm, declares peer support for WebdriverIO 7, 8 and 9. Until it lists v10, set the hub hostname and your credentials directly in the config.
- Appium 3 on real devices - TestMu AI offers Appium 3.0.2 on Android 13, 15 and 16 and iOS 16, 17, 18 and 26 devices, while the default version is still Appium 2. Set the appiumVersion capability to 3.0.2, as the supported Appium versions page explains. The WebdriverIO Appium guide covers the rest of a mobile setup.
- Agents through MCP - @wdio/mcp lists TestMu AI's real device and browser clouds among its cloud providers, so an agent can open a cloud session from the same MCP server it uses locally.
- Agent skills - TestMu AI's open-source agent skills include a webdriverio-skill that teaches Claude Code, Cursor and Copilot to write WebdriverIO tests for the grid.
Once the suite runs on v10, the cloud covers the platforms v10 targets:
- Automation Cloud - runs WebdriverIO, Selenium, Cypress and Playwright suites in parallel across 3,000+ real browser and OS combinations, with no grid to maintain.
- App test automation - runs Appium suites on 10,000+ real Android and iOS devices, which is where v10's cross-platform mobile commands such as tap, swipe and pinch need real hardware.
- WebdriverIO on HyperExecute - orchestrates WebdriverIO runs with Mocha or Jasmine from a single YAML file.
Getting Started With WebdriverIO v10
Upgrade Node.js to 22.19 or later, install the migration skill, and run the full suite once before you change anything else; the failures it prints are your migration list. New projects can run npm init wdio and accept coding agent support to get wdio session and its skill in one step.
When the suite passes locally, move it to WebdriverIO testing on TestMu AI and run it across the browsers and devices your users actually have.
Author
Sri Harsha is Engineering Manager of the Open Source Program Office at TestMu AI (formerly LambdaTest), where he leads open-source engineering behind the Selenium and Appium automation grid and builds agentic AI systems for quality engineering. He is a member of the Selenium Technical Leadership Committee and a committer to WebdriverIO and Appium, and was recognized with the LambdaTest Delta Award 2023 for Best Contributor in open-source testing. He brings over 10 years of experience in software testing and automation, with earlier roles at EPAM Systems and ZenQ. Sri Harsha holds a B.Tech in Computer Science from Jawaharlal Nehru Technological University.
Reviewer
Vipul Verma is Group Senior Vice President of Engineering at TestMu AI (formerly LambdaTest), where he heads the entire engineering organization that builds KaneAI, HyperExecute, and the broader testing cloud. He brings 15+ years architecting, securing, and scaling large enterprise applications across multiple sites. Before TestMu AI he was India Head at LogicHub, where he built the India R&D site from the first employee to a 30-plus engineering team, and Principal Software Engineer at Sumo Logic, where he was the first engineer in the India office and shipped search-performance and pricing-model initiatives. Earlier he worked on trading platforms at Portware and D. E. Shaw. Vipul holds a B.Tech in Computer Science from IIT Kharagpur.
WebdriverIO v10 FAQs
Did you find this page helpful?
More Related Blogs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance
- Advanced access controls
- Advanced data retention rules
- Advanced Local Testing
- Premium Support options
- Early access to beta features
- Private Slack Channel
- Unlimited Manual Accessibility DevTools Tests




