TYPO3 browser journeys
Source: https://github.com/dirnbauer/typo3-skills
Workflow
- Read the project's existing Playwright configuration and canonical test command. Reuse them;
do not install a second browser framework or download browsers on every node.
- Map every present component, critical route/language and distinct editor role to a named test
in the coverage registry. Record absent features with inventory evidence, not a skipped test.
- Use locator roles/labels and web-first assertions. Wait for a visible outcome or a specific
response, not arbitrary sleeps or permanent
networkidle on an analytics-heavy page.
- Isolate each test's browser context and test data. Use local disposable users and fixtures;
authenticate on the exact approved origin. Keep storage state, traces and screenshots private.
Never commit auth state, passwords, tokens or a trace containing customer data.
- Test the real UI consequence. Mock third-party delivery/tracking, not the local TYPO3 handler
whose behavior is under test. Mailpit success proves local delivery, not production SMTP.
- Preserve the first failure and its trace. Retry only a classified infrastructure failure,
at most twice, with identical inputs; a flaky pass is not an unconditional green result.
- Emit command, exit code, expected/executed/failed/skipped counts, tool/browser versions,
role/URL coverage, artifact hashes and proof epoch. Missing assertions or unexpected skips fail.
Required journeys when the feature exists
| Surface |
Assertions |
| Consent |
Fresh visit → reject; second fresh visit → accept; reopen settings; tracker interception respects the choice |
| Slider/navigation |
Next/previous, keyboard and focus restoration; resize across the real mobile breakpoint |
| AJAX search |
Apply facet → replace results → operate filter again; empty/pagination/reset; multilingual query and suggest endpoint |
| Forms |
Invalid input → errors; valid local submit → persisted record and Mailpit message; restore test data |
| Editor |
Non-admin login → create/edit → save → reopen → frontend preview; original markup, links and media survive |
| RTE |
Open link browser, choose page/record/file link, save/reopen; toolbar plugins and custom presets load without errors |
| Backend preview |
Real plugin record, raw FlexForm-backed and Record API-backed previews, category selection, media/video |
| Hidden content |
Authorized group exposes Admin Panel/Preview; editor chooses hidden-page/content visibility; public visitor still cannot see it |
For save/upload/delete operations, get exact local fixture scope and a snapshot first. Teardown
through supported APIs, verify no test records/files/users remain, including after failure.
Never force-execute real imports, payments, newsletter sends or scheduler jobs to obtain coverage.
Bounded coverage
Under typo3-upgrade-run, use at most three global visual states: default, keyboard focus and
navigation open. Extra widget states belong only to their representative journey, never to the
URL × viewport × every-widget Cartesian product. Intermediate checks prioritize affected pages,
critical routes and a reproducible seeded sample. Final HTTP/DOM coverage remains exhaustive.
Use typo3-upgrade-baseline for immutable pixel evidence and typo3-upgrade-closure for the
upgrade verdict. Use typo3-testing for PHP/test infrastructure, typo3-ckeditor5 for RTE fixes,
and typo3-backend-rights for role changes. A screenshot alone is not interaction proof.
Sources
Apply Playwright's best practices and
authentication isolation. Recheck installed package APIs
before using configuration options. Fleet-derived cases are recorded in the September upgrade
retrospective in typo3-upgrade-run.
1---2name: typo3-playwright3description: Use when building or repairing Playwright browser tests for TYPO3 visitor journeys, AJAX widgets, CKEditor dialogs, backend previews, editor save/reopen flows, and consent or local form submissions. Turns a component inventory into executable assertions with isolated fixtures, coverage accounting and failure traces. Does not orchestrate a CMS upgrade, implement application fixes, choose a pixel tolerance, run a WCAG programme, or deploy.4---56# TYPO3 browser journeys78> Source: https://github.com/dirnbauer/typo3-skills910## Workflow11121. Read the project's existing Playwright configuration and canonical test command. Reuse them;13 do not install a second browser framework or download browsers on every node.142. Map every present component, critical route/language and distinct editor role to a named test15 in the coverage registry. Record absent features with inventory evidence, not a skipped test.163. Use locator roles/labels and web-first assertions. Wait for a visible outcome or a specific17 response, not arbitrary sleeps or permanent `networkidle` on an analytics-heavy page.184. Isolate each test's browser context and test data. Use local disposable users and fixtures;19 authenticate on the exact approved origin. Keep storage state, traces and screenshots private.20 Never commit auth state, passwords, tokens or a trace containing customer data.215. Test the real UI consequence. Mock third-party delivery/tracking, not the local TYPO3 handler22 whose behavior is under test. Mailpit success proves local delivery, not production SMTP.236. Preserve the first failure and its trace. Retry only a classified infrastructure failure,24 at most twice, with identical inputs; a flaky pass is not an unconditional green result.257. Emit command, exit code, expected/executed/failed/skipped counts, tool/browser versions,26 role/URL coverage, artifact hashes and proof epoch. Missing assertions or unexpected skips fail.2728## Required journeys when the feature exists2930| Surface | Assertions |31|---|---|32| Consent | Fresh visit → reject; second fresh visit → accept; reopen settings; tracker interception respects the choice |33| Slider/navigation | Next/previous, keyboard and focus restoration; resize across the real mobile breakpoint |34| AJAX search | Apply facet → replace results → operate filter again; empty/pagination/reset; multilingual query and suggest endpoint |35| Forms | Invalid input → errors; valid local submit → persisted record and Mailpit message; restore test data |36| Editor | Non-admin login → create/edit → save → reopen → frontend preview; original markup, links and media survive |37| RTE | Open link browser, choose page/record/file link, save/reopen; toolbar plugins and custom presets load without errors |38| Backend preview | Real plugin record, raw FlexForm-backed and Record API-backed previews, category selection, media/video |39| Hidden content | Authorized group exposes Admin Panel/Preview; editor chooses hidden-page/content visibility; public visitor still cannot see it |4041For save/upload/delete operations, get exact local fixture scope and a snapshot first. Teardown42through supported APIs, verify no test records/files/users remain, including after failure.43Never force-execute real imports, payments, newsletter sends or scheduler jobs to obtain coverage.4445## Bounded coverage4647Under `typo3-upgrade-run`, use at most three global visual states: default, keyboard focus and48navigation open. Extra widget states belong only to their representative journey, never to the49URL × viewport × every-widget Cartesian product. Intermediate checks prioritize affected pages,50critical routes and a reproducible seeded sample. Final HTTP/DOM coverage remains exhaustive.5152Use `typo3-upgrade-baseline` for immutable pixel evidence and `typo3-upgrade-closure` for the53upgrade verdict. Use `typo3-testing` for PHP/test infrastructure, `typo3-ckeditor5` for RTE fixes,54and `typo3-backend-rights` for role changes. A screenshot alone is not interaction proof.5556## Sources5758Apply Playwright's [best practices](https://playwright.dev/docs/best-practices) and59[authentication isolation](https://playwright.dev/docs/auth). Recheck installed package APIs60before using configuration options. Fleet-derived cases are recorded in the September upgrade61retrospective in `typo3-upgrade-run`.