A migration guide maps one test runner’s config, API, and commands to e2e. It also marks what e2e doesn’t have yet, with a workaround where there is one. A test with no workaround stays in the old runner. Keep the old suite installed while you move one test at a time, so both suites stay green.
Pick your runner
Playwright
Web. Every config key, page call, and CLI flag, mapped to e2e.
Cypress
Web. Command chains become async tests. Your data-cy attributes stay.
Selenium
Web. WebDriver calls and page objects, rewritten in TypeScript.
Detox
Mobile. Your app build and testIDs, with no Detox framework.
Maestro
Mobile. YAML flows become TypeScript tests.
Move one test at a time
e2e tests run in Node, in TypeScript by default or in
JavaScript. For a Java, Python, or native suite, install e2e
in an e2e/ folder with its own package.json.
Each guide follows the same steps:
- Port the config. The old runner’s base URL, app command, and devices
become a target in
e2e.config.ts. - Rewrite one test as a
.e2e.tsfile undertests/. Keep the file patterns of the two runners apart, so neither runs the other’s tests. - Run the new test with
npx e2e run <file>until it passes. - Delete the old test when you trust the new one.
Let an agent migrate the suite
To move one test with a coding agent, copy the agent prompt at the top of
your runner’s guide. For a migration over many sessions, use the
migrate-to-e2e skill. It
records progress in a MIGRATION.md file and keeps the old suite running.
Migrate from a runner with no guide
WebdriverIO and Appium have no guide. Map WebDriver calls with the Selenium guide. Map Appium device commands with the Detox and Maestro guides, on the mobile engine. These mappings are partial: no guide covers the WebdriverIO or Appium APIs themselves.
