Autonomy Docs
Migrate

Puppeteer

Turn Puppeteer and jest-puppeteer tests into Autonomy test cases of outcome steps, without waitForSelector and hand-written retry loops.

Puppeteer scripts are imperative and often mix testing with scraping. Migrate only the scripts that check how your product behaves; leave data-collection scripts where they are.

Prompt

Paste this into a coding agent connected to the Autonomy MCP server, from inside the repository:

Codetext
Migrate the Puppeteer 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"]. Skip scripts that only collect data and check nothing; list them instead.
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, selectors, 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 scripts sign in as, 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 (a value read with page.$eval or page.evaluate and checked by expect, 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, random suffixes): a fresh inbox and generated data, never a fixed value.
9. Drop waitForSelector, waitForNavigation, sleeps and retry loops. Drop request interception that only stubs responses: runs test the real product. If a test only works with stubbed responses, don't migrate it; list it instead.

Afterwards
10. If the suite groups tests (describe blocks, files), 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

PuppeteerAutonomy
One test() or scriptOne test case.
describe() blocks, filesOptionally, a test plan.
page.goto, page.click, page.type, selectorsFolded into the step's outcome. The agent finds the controls.
page.$eval or page.evaluate feeding expectThe outcome, with the expected value as a data attachment marked Exact.
waitForSelector, waitForNavigation, sleeps, retry loopsDropped.
Login helpers, cookies set by handA signed-in step with a saved sign-in attached as an account.
process.env.X{{env.X}}, marked secret when it's a credential.
Base URL constantsThe environment's Web target.
uploadFile()A file attachment from the project's Files.
page.screenshot()A screenshot attachment.
setRequestInterception stubsNot migrated. Runs use the real product.
Response listeners that check a requestAn outcome about the result. The run keeps every request in its Network tab.
Scraping scriptsNot migrated.

See the migration overview for a worked example.

Didn’t find it?

On this page