Cypress is a JavaScript end-to-end testing framework that runs directly inside the browser, in the same run loop as your application, rather than communicating with the browser over a remote protocol like Selenium's WebDriver.
Traditional tools (Selenium) run tests in a separate process and send commands to the browser over the network via WebDriver, which adds latency and indirection. Cypress executes in the browser alongside the app, so it has native access to the DOM, window, network, and local storage. This architecture gives Cypress automatic waiting, time-travel debugging, real-time reloads, and the ability to stub network requests and application state directly. The trade-off is that Cypress is tied to the browser's execution model — historically single-browser, single-tab, and same-origin — though newer features (cy.origin) relax some limits.
A team migrating flaky Selenium tests to Cypress finds that the same login flow needs far fewer explicit waits, because Cypress retries assertions automatically and can stub the auth API with cy.intercept to make the test deterministic.
In an interview you're asked: 'Why is Cypress generally less flaky than Selenium for the same test?' What's the architectural reason?