How to Scaffold Playwright e2e Tests from a User Journey

Playwright scaffolds rot when they invent data-testid=submit. The journey gave getByRole. Honor the locator you pasted.
The matching generator is the Playwright e2e Scaffold from a User Journey (No Invented Selectors) prompt. Browse related cards in the PromptDig library (Browse more prompts). When a filled run survives, share the version you actually use (Share a prompt).
Lock Playwright version and base URL
Scaffold Playwright tests from a pasted user journey. No invented selectors, URLs, or auth secrets. Start by filling Inputs, not by asking the model to remember last week's run. If a field is blank, write NONE or NOT IN INPUTS and leave it blank through Generate. The card is built so the model cannot honestly invent a number, owner, URL, or command that you did not paste.
Paste these fields before you hit run:
Playwright version lock: [Version]
Base URL: [Base]
Journey steps (action + selector or role I can prove): [Journey]
Assertions I can prove (text, URL, status): [Assert]
Auth setup I can prove (storageState path or env name): [Auth or NONE]
Projects/browsers I allow: [Browsers]
Fixtures or test ids I actually have: [Fixtures]
What I must never click or call: [Never]
Words I must not use: [Banned]
Timeout overrides I can prove (or NONE): [Timeout]
That inventory is the honesty ledger. Anything that does not appear there is forbidden in the draft. If you catch yourself adding a nice-to-have after the run, you are no longer using the card. You are ghostwriting. Put the extra fact in Inputs and run again.
One locator per journey step, none invented
Generate is numbered on purpose. Do not skip a step because the first paragraph looked done. The early steps exist to stop later prose from smuggling claims.
Walk the Generate list in order:
- Honesty ledger: version, base, every selector in Journey, browsers, auth. Forbidden: testids and URLs not listed.
- playwright.config.ts sketch: testDir, baseURL, projects from Browsers only. Timeout only from Timeout.
- spec.ts: one test named from the journey. Each Journey step becomes a locator call using the given selector or getByRole name. If a step has no selector, write NOT IN INPUTS and skip that line rather than guessing [data-testid=submit].
- Expect: only Assert. Do not add a screenshot assertion unless Inputs asked.
- Auth: use Auth storageState or env name. If NONE, leave the test unauthenticated and say so.
- Never: comment a blocklist of Never locators.
- Run notes: npx playwright test pinned to Version. No invented grep tags.
- Compliance pass: quote Banned words, invented selectors, Cypress cy.get. Cut them.
If a step asks for a version lock, quote the version from Inputs in the output. If a step asks for a refuse list, keep the refuse list in the published artifact, not in a sidebar you delete. Reviewers should see what the model was not allowed to do.
Guest stays guest when Auth is NONE
Most failures are the same shape: a missing field gets a confident fill. A conversion rate appears. A Gradle task appears. A flash point appears. A caption appears on a job that asked for slide text only. Your review is to search the draft for numbers, names, and commands, then grep Inputs. No match means cut.
Honor the constraints as hard stops, not vibes:
- Playwright Test TypeScript only. Not Cypress, not Selenium, not Playwright Python unless Inputs say so.
- Never invent a selector, testid, or URL.
- If a journey step lacks a locator, mark NOT IN INPUTS.
- Do not print secret values. Env names only.
- No emojis.
When the card says not legal advice, not certification, not an exam dump, or not a caption engine, that sentence belongs at the top of the output. Deleting it to look more finished is how you inherit risk.
Not Cypress, not Selenium
Finish with the compliance pass the prompt already asks for. Quote the banned-word hits. Cut them. Print character counts when the job has a cap. Print word counts when the job has a budget. List gaps as gaps. Five missing facts are more useful than one smooth paragraph.
Tags on the card (playwright e2e scaffold, playwright from user journey, no invented selectors) are a reminder of the job shape, not an invitation to wander into a neighboring cluster. If you need a different surface, open a different PromptDig card rather than stretching this one.
Fill the card, then run
Replace every bracket. Run on ChatGPT, Claude, or Gemini. Read the ledger first, then the artifact. If the model invents a commit, KPI, DOI, PEL, bid, or logo, discard the run. Tighten Inputs. Run again. Share the filled card that survived, not the first draft that sounded done.