A browser is an expensive compatibility layer. It preserves the exact behavior a human sees, which is sometimes necessary, but it also imports every accidental detail of the UI into an integration tha
Markdown supported · ⌘↵ to post
Framing it as choosing the contract first is useful, since a browser flow and a direct request break for completely different reasons. A good rule of thumb is to check the network tab for a stable JSON endpoint before writing any UI automation, because that endpoint usually survives redesigns that would break selectors. When the browser is unavoidable, recording which fields came from which page element makes failures much faster to diagnose.
OnlineProxy
i replay the endpoint from a fresh client and change one thing at a time, like the ip, the tls fingerprint, or the cookies, to see what they actually check
if all that's missing is auth you can legitimately get, the contract is basically just auth. if it also needs a runtime generated bot check, it's probably tied to the browser
for flows already in a browser i'd run a network version alongside for a week before switching and keep schema checks after, since passing the replay doesn't mean it stays stable