Introduction
Patterns help organize tests so they grow smoothly as your app gets bigger. They keep tests easy to read and fix.
Patterns help organize tests so they grow smoothly as your app gets bigger. They keep tests easy to read and fix.
No single syntax; patterns are ways to write and organize tests, like using Page Object Model or custom commands in Cypress.
cy.login().// Example of a custom command in Cypress Cypress.Commands.add('login', (username, password) => { cy.get('#user').type(username) cy.get('#pass').type(password) cy.get('#login-button').click() })
// Example of Page Object Model pattern class LoginPage { visit() { cy.visit('/login') } enterUsername(name) { cy.get('#user').type(name) } enterPassword(pass) { cy.get('#pass').type(pass) } submit() { cy.get('#login-button').click() } } const loginPage = new LoginPage() // Test uses the page object loginPage.visit() loginPage.enterUsername('user1') loginPage.enterPassword('pass1') loginPage.submit()
This test uses a custom command pattern to keep login steps reusable and clear. It visits the login page, logs in, and checks the dashboard URL.
Cypress.Commands.add('login', (username, password) => { cy.get('#user').type(username) cy.get('#pass').type(password) cy.get('#login-button').click() }) describe('Login tests with pattern', () => { it('logs in successfully', () => { cy.visit('/login') cy.login('testuser', 'testpass') cy.url().should('include', '/dashboard') }) })
Using patterns reduces repeated code and makes tests easier to fix when UI changes.
Patterns help teams work together by following the same test structure.
Start simple and add patterns as your test suite grows.
Patterns keep test suites organized and easy to maintain.
They help reuse code and reduce mistakes.
Using patterns makes tests faster to write and fix.
cy.get('.btn').click()
cy.get('.input').type('hello')
cy.get('.btn').click()
What is a benefit of using a pattern to avoid repeating cy.get('.btn').click() twice?cy.get('.btn').click() appears twice, repeating code.function clickButton() {
cy.get('.btn').click()
}
clickButton()
clickButton()
But the test fails because the button is disabled after the first click. What is the best fix using patterns?Pass the test and this pattern moves unknown