Autonomy Docs
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:

Codetext
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

PlaywrightAutonomy
test()One test case.
test.describe(), tags, config projectsOptionally, a test plan.
page.goto, click, fill, locators, page objectsFolded 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, timeoutsDropped.
storageState, global setup loginA signed-in step with a saved sign-in attached as an account.
process.env.X{{env.X}}, marked secret when it's a credential.
baseURLThe environment's Web target.
request fixture testsA test case on the API platform, with the base URL as the environment's API target. See API and network.
setInputFilesA file attachment from the project's Files.
toHaveScreenshot()An outcome about the look, with a screenshot attachment. See Visual checks.
page.route mocksNot migrated. Runs use the real product.
waitForResponse checksAn outcome about the result. The run keeps every request in its Network tab.
Device emulation projectsStill web. For a native app, use the Appium or Maestro guide.

See the migration overview for a worked example.

Didn’t find it?

On this page