And Cypress gives a great API surface where almost everything can be done with just this declarative API, and it enables them to show the full plan in a UI even while it's executing.
But if you actually need custom control flow, with code you control... you need to "pause" your action-enqueueing to let Cypress catch up. Which means you're going to be nesting callbacks, or sprinkling awaits in all the places that aren't logically awaiting, because you need an explicit yield point out of your JS block. Our team finds this rare enough that it's acceptable. But... yeah, it's far from a perfect solution.
Both of these issues are well documented in git issues with hundreds of replies and work arounds that just don’t always work.
I’m ready to throw in the towel and rewrite everything in playwright. Maybe b I’ll have different issues there…
I have only seen this issue with JS based VDOM frameworks.
I really really like the cy.intercept() for intercepting and modifying requests.
If that's not it keep looking. If there's a thing you want to do, odds are Gleb has a video or blog post about it.
Anyway its subjective, I don't like Cypress.
I figure there must be a way to do that, but it's very possible I'm misunderstanding what you're trying to solve!