The Real Problem
A team adopts a self-healing Playwright or Selenium wrapper because their suite was breaking every time a frontend team renamed a CSS class or reordered a `div`. Six weeks in, the pipeline is green more often, and everyone is happy, until a checkout test that had been silently auto-healing for three sprints turns out to have been matching the wrong button the whole time: the healing engine's confidence-scored fallback logic quietly picked a visually similar "Continue" button in a promotional banner instead of the actual checkout CTA, because the real button's identifying attribute had changed at the same time its position on the page also shifted. The test kept passing. The actual regression, a broken checkout button, shipped to production and stayed there for four days before a support ticket surfaced it. Nobody in QA saw a single red check the entire time (Opinion, illustrative scenario grounded in the documented self-healing failure mode below).
That is the real problem this article addresses: self-healing is not a binary "on or off" tool setting. It is a policy decision that has to be made per class of change, and most teams never make it explicitly. They either turn healing on everywhere and trust it uniformly, or turn it off everywhere out of fear and go back to babysitting every locator break by hand. Neither is a policy; both are the absence of one.