cy.go() for browser history in Cypress - Build an Automation Script
describe('Browser history navigation with cy.go()', () => { it('should navigate back and forward correctly', () => { cy.visit('/home'); cy.get('a[href="/about"]').click(); cy.url().should('include', '/about'); cy.go('back'); cy.url().should('include', '/home'); cy.go('forward'); cy.url().should('include', '/about'); }); });
The test starts by visiting the homepage using cy.visit('/home'). Then it clicks the About page link using a clear CSS selector a[href="/about"]. After clicking, it asserts the URL includes '/about' to confirm navigation.
Next, cy.go('back') simulates the browser back button, and the test asserts the URL returns to '/home'. Then cy.go('forward') simulates the forward button, and the URL is checked again to confirm it is '/about'.
This approach uses Cypress best practices: clear selectors, URL assertions, and no hardcoded waits, relying on Cypress's automatic waiting for commands to complete.
Now add data-driven testing with 3 different page pairs to test back and forward navigation.
Practice
cy.go('back') do during a test?Solution
Step 1: Understand
Thecy.go()usagecy.go()command controls browser history navigation, similar to back and forward buttons.Step 2: Interpret the argument 'back'
Using 'back' tells Cypress to go to the previous page in the browser history.Final Answer:
It navigates the browser to the previous page in history. -> Option BQuick Check:
cy.go('back')= previous page [OK]
- Confusing 'back' with 'forward'
- Thinking it reloads the page
- Assuming it opens a new tab
cy.go()?Solution
Step 1: Recall
cy.go()argumentscy.go()accepts 'back', 'forward' or numbers like -1, 1 to move in history.Step 2: Identify correct forward syntax
To move forward one page, use 'forward' or 1. Among options, onlycy.go('forward')is correct syntax.Final Answer:
cy.go('forward') -> Option AQuick Check:
Forward navigation = 'forward' [OK]
- Using negative number to go forward
- Using 'back' instead of 'forward'
- Using 0 which does nothing
cy.visit('/page1')
cy.visit('/page2')
cy.go(-1)
cy.url().should('include', '/page1')What will the assertion check after
cy.go(-1) executes?Solution
Step 1: Trace navigation commands
First, the test visits '/page1', then '/page2', so browser history has '/page1' then '/page2'.Step 2: Understand
cy.go(-1)cy.go(-1)moves back one page in history, so it goes back from '/page2' to '/page1'.Step 3: Check the assertion
The assertion checks that the URL includes '/page1', which is true after going back.Final Answer:
The URL includes '/page1' -> Option AQuick Check:
cy.go(-1) = back one page = '/page1' [OK]
- Assuming URL stays at '/page2'
- Confusing -1 with forward navigation
- Expecting URL to be '/page3' which was never visited
cy.visit('/home')
cy.visit('/about')
cy.go(2)
cy.url().should('include', '/contact')But the test fails. What is the likely reason?
Solution
Step 1: Analyze browser history after visits
After visiting '/home' then '/about', browser history has two pages: '/home' then '/about'. No forward pages exist.Step 2: Understand
cy.go(2)behaviorcy.go(2)tries to go forward two pages, but since no forward history exists, navigation fails.Step 3: Reason test failure
The URL does not change to '/contact' because forward navigation is impossible, causing the assertion to fail.Final Answer:
cy.go(2) tries to go forward two pages but no forward history exists. -> Option DQuick Check:
Forward navigation beyond history length fails [OK]
- Thinking cy.go(2) reloads page
- Assuming cy.go(2) goes back
- Believing cy.go(2) is invalid syntax
cy.visit('/start')
cy.visit('/middle')
cy.visit('/end')
cy.go(-2)
cy.url().should('include', '/start')What does
cy.go(-2) do here, and why is the assertion correct?Solution
Step 1: Understand the navigation history
Visiting '/start', then '/middle', then '/end' creates a history stack: ['/start', '/middle', '/end'].Step 2: Interpret
cy.go(-2)cy.go(-2)moves back two pages in history, from '/end' back to '/start'.Step 3: Confirm the assertion
After moving back two pages, the URL should include '/start', so the assertion is correct.Final Answer:
cy.go(-2) moves back two pages from '/end' to '/start', so URL includes '/start'. -> Option CQuick Check:
Negative number moves back multiple pages [OK]
- Confusing negative with forward navigation
- Thinking cy.go(-2) reloads pages
- Assuming it moves back only one page
Ready to prove it?
Pass the test and this pattern moves unknown
