Migrate
Playwright
Turn each Playwright test into one Autonomy test case of outcome steps, without its locators, waits and page objects.
A Playwright test already reads as a journey: open a page, do something, expect a result. The migration keeps the result each test expects and drops the locators, waitFor calls, page objects and fixtures that get it there.
Prompt
Paste this into a coding agent connected to the Autonomy MCP server, from inside the repository:
Migrate the Playwright tests in this repository to Autonomy with the Autonomy MCP tools.
Setup
1. Call autonomy_project_list and ask me which project to use. Call autonomy_environment_list with its projectId and ask me which environment to run in.
2. Call autonomy_test_case_list with the projectId. Skip tests that an existing test case already covers.
For each test
3. Create ONE test case with autonomy_test_case_create: projectId, name = the test title, platforms = ["web"] (["api"] for tests that only use the request fixture).
4. Write each step as an outcome: what is true when the step is done, in plain words ("A new account exists for a fresh email"). Say what the test proves, not how: no clicks, locators, waits, retries or expect calls. One step can cover several actions that serve one outcome. Use 12 steps or fewer; split a longer test into several test cases.
5. Each step is {id, text, attachments[]}. Each attachment has id, kind and exact. Kinds: account {role}, inbox (no address = a fresh inbox per run), phone, file, screenshot, data {label, value} or {label, intent} for generated data.
6. Never write a password, token or key into a step. For each account the suite signs in as (storageState, global setup, login helpers), ask me to save it in the dashboard (the project's Sign-ins, New sign-in) and tell you its account name, then start the test with a step such as "The store owner is signed in" with that account attached. For other secrets in process.env, propose names and reference them as {{env.NAME}}; add them as secret values with autonomy_environment_upsert only after I agree.
7. Values the test is about (the text or number an expect checks, a coupon that must apply, input that must be refused): a data attachment with exact: true. Other config: {{env.NAME}}.
8. Sign-up data (emails, names, passwords, Date.now() suffixes): a fresh inbox and generated data, never a fixed value.
9. Inline page objects and fixtures into what the test proves. Drop page.route mocks: runs test the real product. If a test only works with mocked responses, don't migrate it; list it instead. Turn waitForResponse checks into an outcome about what the user sees.
Afterwards
10. If the suite groups tests (test.describe blocks, tags, config projects), offer to create a test plan per group with autonomy_test_plan_create.
11. Run one migrated test case with autonomy_run_trigger in the environment I picked. Follow it with autonomy_run_get (pass the last cursor and waitMs) until it ends. For any step that didn't pass, read autonomy_run_step_actions and tell me what happened.
12. Finish with a table: source test, test case ID, number of steps, and anything you couldn't map.Mapping
| Playwright | Autonomy |
|---|---|
test() | One test case. |
test.describe(), tags, config projects | Optionally, a test plan. |
page.goto, click, fill, locators, page objects | Folded into the step's outcome. The agent finds the controls. |
expect(...).toHaveText("$48.00") | The outcome, with $48.00 as a data attachment marked Exact. |
waitFor*, toPass, retries, timeouts | Dropped. |
storageState, global setup login | A signed-in step with a saved sign-in attached as an account. |
process.env.X | {{env.X}}, marked secret when it's a credential. |
baseURL | The environment's Web target. |
request fixture tests | A test case on the API platform, with the base URL as the environment's API target. See API and network. |
setInputFiles | A file attachment from the project's Files. |
toHaveScreenshot() | An outcome about the look, with a screenshot attachment. See Visual checks. |
page.route mocks | Not migrated. Runs use the real product. |
waitForResponse checks | An outcome about the result. The run keeps every request in its Network tab. |
| Device emulation projects | Still web. For a native app, use the Appium or Maestro guide. |
See the migration overview for a worked example.
Didn’t find it?