We use cy.go() to move back or forward in the browser history during tests. It helps check if navigation works like when a user clicks back or forward buttons.
cy.go() for browser history in Cypress
cy.go(directionOrNumber) // directionOrNumber can be: // 'back' or -1 to go back one page // 'forward' or 1 to go forward one page // any number to go that many steps in history
You can use either a string like 'back' or a number like -1 to go back one page.
Using 0 reloads the current page.
cy.go('back')cy.go(-1)cy.go('forward')cy.go(2)This test visits a page, clicks a link to go to a new page, then uses cy.go('back') to go back to the first page and checks the URL. Then it uses cy.go('forward') to go forward again and checks the URL.
describe('Test browser history with cy.go()', () => { it('should navigate back and forward correctly', () => { cy.visit('https://example.cypress.io') cy.contains('type').click() // navigate to a new page cy.url().should('include', '/commands/actions') cy.go('back') cy.url().should('eq', 'https://example.cypress.io/') cy.go('forward') cy.url().should('include', '/commands/actions') }) })
Make sure the pages you navigate between are in the same domain to avoid cross-origin errors.
Use cy.url() assertions after cy.go() to confirm navigation worked.
Using cy.go(0) reloads the current page, which can be useful for testing refresh behavior.
cy.go() moves through browser history like back and forward buttons.
You can use strings ('back', 'forward') or numbers (-1, 1) to control navigation.
Always check the URL or page content after using cy.go() to confirm the page changed as expected.
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
