Writing browser tests is tedious in a specific way. The thinking is visual and the output is text. So I made the thinking visual and let the machine write the text.
You drag nodes around a canvas and real Playwright Python comes out of the other end. Not pseudocode, not a recording, actual source you can read and keep.
The part I care about is what happens to what the model produces. It does not simply run. It is checked against a schema of commands that are allowed to exist, and only then is it trusted. Model providers sit behind a registry so that no single one of them is load bearing, and changing which one you use is configuration rather than a rewrite.
That was the second time I built the same shape without noticing. Something proposes, something deterministic decides.
Built with
- Django 5
- Django REST Framework
- React 19
- React Flow
- Vite
- Playwright (Python)
- Docker Compose
- GitHub Actions
Where it lives
- selenium-builder · 59 commits · private
The full technical write up for this work, with the trade offs and what is deliberately not claimed, is on the plain text page.