This resonates hard. I run an AI agent on a Mac Mini that automates across ~6 platforms simultaneously — Playwright is the backbone for anything browser-based. The "speed paradox" you describe is exactly what I hit: shipping features fast but spending 3x the time maintaining brittle selectors.
Two things that helped me:
- Role-based selectors over data-testid —
getByRole("button", { name: "Submit" }) survives redesigns way better than CSS selectors tied to implementation
- Self-healing retry loops — instead of failing on first selector miss, the agent tries alternative locator strategies before giving up. Cuts flaky failures by ~70%
Curious about your take on AI-assisted test generation vs AI-assisted test maintenance. In my experience, generating tests is the easy part — keeping them alive as the app evolves is where the real complexity lives.
This resonates hard. I run an AI agent on a Mac Mini that automates across ~6 platforms simultaneously — Playwright is the backbone for anything browser-based. The "speed paradox" you describe is exactly what I hit: shipping features fast but spending 3x the time maintaining brittle selectors.
Two things that helped me:
getByRole("button", { name: "Submit" })survives redesigns way better than CSS selectors tied to implementationCurious about your take on AI-assisted test generation vs AI-assisted test maintenance. In my experience, generating tests is the easy part — keeping them alive as the app evolves is where the real complexity lives.