Skip to main content

One framework to test every platform your users are on

Browsers, native and hybrid mobile apps, desktop apps, VS Code extensions and visual regressions, all with one API. Built on web standards, openly governed, and ready for your coding agent.

npm init wdio@latest .

Sponsored byand

login.e2e.tsnpx wdio runawait $('aria/Log in').click()await expect($('h1')).toHaveText('Hi!')BrowsersChrome · Firefox · Safari · EdgeMobileiOS · Android · FlutterDesktopmacOS · Windows · LinuxVS CodeExtensions & editorsElectronElectron · Tauri · DioxusVisualPixel-perfect diffs
One API

Write it once. Run it on every platform.

The same test runner, selectors, assertions and reporters, whether you are testing a web app, a phone, a desktop app or an editor extension.

End-to-end and component tests in real browsers

  • Chrome, Firefox, Safari and Edge through WebDriver and WebDriver BiDi
  • Component tests for React, Vue, Svelte, Solid, Preact, Lit and Stencil
  • Network mocking, emulation and auto-waiting built in
Read the guide →
test/specs/search.e2e.ts
import { browser, $, expect } from '@wdio/globals'

describe('webdriver.io', () => {
it('finds the docs search', async () => {
await browser.url('https://webdriver.io')
await $('.DocSearch-Button').click()
await expect($('.DocSearch-Modal')).toBeDisplayed()
})
})
wdio session

How agents verify their own work.

A software factory runs on verification loops. wdio session is how an agent runs that loop on the real app: it opens a browser, a phone, or a desktop app, sees what is there, acts on it, and checks the result. What passed becomes a test.

A looping demo of wdio session. It opens Chrome on a shop, snapshots the Add to cart button, clicks it, passes a visual check, repeats that on Android and Electron, then exports one test for all three.

@wdio/ai-service

Write the intent. Replay the code.

Describe a step in plain words and your own model performs it once. WebdriverIO records the commands it ran, replays them on every later run without a model, and heals them when your UI changes, but only when the healed step does what the recorded one did, checked over WebDriver BiDi.

A looping demo of browser.act(). The model adds a blue T-shirt to the cart once and two WebdriverIO commands are recorded with the request the click sent. The next run replays them with no model calls. After a refactor renames a test id, the step heals without the model, sends the same request, and saves screenshots and a video. Eject turns the act() call into the two commands.

A refactor renamed the test id. The step heals without the model, only after it sends the same request, and leaves screenshots and a video to review.

AI-native

Built for coding agents

Most tests are now written together with an agent. WebdriverIO gives it everything it needs to write, run and fix them on its own.

agent

Write a login test for localhost:3000 and make sure it passes.

webdriverio-docssearch_docs"selectors best practices"

wdio-mcpstart_session{ platform: "browser", browser: "chrome" }

wdio-mcpnavigate"http://localhost:3000/login"

wdio-mcpget_elements{ }

Found the form. Writing test/specs/login.e2e.ts with aria selectors.

terminalnpx wdio runwdio.conf.ts --spec test/specs/login.e2e.ts

✓ 1 passing (2.4s)

Live mode

The dashboard that opens while your tests run. Commands, the page, and source update as each step executes.

Live mode

The dashboard that opens while your tests run. Commands, the page, and source update as each step executes.

1 / 15
Debugging

See exactly what your test did

WebdriverIO DevTools shows every command, network request, console message and screenshot of a run. Watch tests live and rerun single tests with a click, or record portable traces in CI and replay them later.

Open source

Community driven. Openly governed.

WebdriverIO is not a product of a testing company. It is run by its community under the umbrella of the OpenJS Foundation, so its direction follows the needs of its users.

We’d like to extend our heartfelt thanks to all the contributors who have helped make WebdriverIO the powerful tool it is today. Your dedication and effort are truly appreciated!

Web standards

Real browsers, real devices, real users

WebdriverIO automates through WebDriver and WebDriver BiDi, the W3C standards every browser vendor ships. No patched browser builds and no JavaScript-emulated clicks: your tests interact with your app the way your users do.

Who is using WebdriverIO?

  • Google
  • Netflix
  • Microsoft
  • Mozilla
  • Buoyant
  • SAP
  • Salesforce
  • Hilton
  • Charles Schwab
  • JW Player
  • BBVA
  • GoPro
  • Algolia
  • Financial Times
  • Zendesk
  • 1&1
  • Avira
  • Deloitte
  • Rabobank
  • Bedrock Streaming

Sponsored by companies that care

We are an open source project with a strong commitment to transparency and community governance. We are part of the OpenJS Foundation which is a part of the Linux Foundation. The project is entirely run by volunteers and funded by invested companies that want to see the project succeed. The project team is grateful for the generous sponsorship of these companies.

Premium Sponsors

Gold Sponsors

If you use WebdriverIO within your organization, please consider supporting the project by becoming a sponsor. It will help us to keep the project running and evolving.

Start testing in under a minute

npm init wdio@latest .

Welcome! How can I help?

WebdriverIO AI Copilot