A practical guide to end-to-end testing with Cypress