Browser tests: check each page once with every instrument, instead of walking the site ten times #722
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#722
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Measured from Forgejo's task API and job logs, runs 561–710 (24 Sep – 4 Oct 2026): wall time per push about 52–55 min, up from about 15; the browser suite grew from 149 to 645 tests in five days and runs serially (29 min); the runner takes two jobs at a time, in the order the workflow file lists them, so the browser job starts 19–22 min after the push; and Forgejo cancels the older push run when a newer push lands, which stopped 18 of 56 browser jobs before they gave a verdict.
Ten tests walk every page in
signed_in_paths()(150 paths,test_accessibility.py:407-640): axe in light and dark, reflow at 320 in three languages, text spacing twice, target size twice, and thearia-describedbycheck. That is about 1,500 page loads, each with its own instrument injected (axe alone is 580 KB per call), and each new page the coverage check requires (tests/test_page_coverage.py) lengthens all ten.Proposal
Five tests, each loading every page once and running several instruments on it, reporting each instrument's findings separately:
aria-describedby; axe in light; dark scheme, wait until no animation is running, axe in dark, back to light; target size with its menus; resize to 640×450 for the 200% zoom check and back; text spacing last, because its stylesheet stays on the page. Two animation frames after each resize, because the page answers a resize asynchronously.About 750 loads instead of 1,500, in five tests that spread across workers. Reduced motion matters here: the stylesheet fades colours (
transition-colors), and axe must not measure halfway through a fade.VISITED_URL_NAMESstays importable for the coverage check.Done when