Every E2E test run has a price tag, and it's paid in feedback-loop minutes.
Here's a classic example. Someone renames a data-test attribute during a refactor, not knowing ten specs reference it. Best case: a 15-minute (or more) pre-merge run fails near the end and tells them. Worst case: the rename slips through the merge and the nightly job fails at 3:30am. The next morning, someone burns an hour establishing that the "failure" is not a bug, not an outage, not flake, just a selector that was renamed three days ago.
Either way, you paid minutes or hours of test execution to learn something that was knowable in one second, before a browser ever launched.
Our team decided to finally stop paying that tax.
The solution? I wrote a ~500-line Node script that cross-checks every selector our specs reference against every selector our app source can produce, and fails the offending PR in about a second. No browser, no app boot, no AI. We built it for our Cypress suite (Vue 3 frontend, ~200 spec files, ~6,300 selector call sites), but nothing about the idea is Cypress-specific. It works for Playwright, WebdriverIO, or anything else because the thing being checked isn't the test framework. It's a naming contract.






