Bird
Raised Fist0
Cypresstesting~5 mins

Waiting for requests (cy.wait with alias) in Cypress

Choose your learning style10 modes available
Introduction

Sometimes your test needs to pause until a web request finishes. This helps make sure the page is ready before checking things.

When your app sends data to the server and you want to wait for the response before continuing.
When loading data from an API and you want to check the results after the data arrives.
When clicking a button triggers a network request and you want to wait for it to complete.
When you want to avoid flaky tests caused by slow or delayed server responses.
Syntax
Cypress
cy.intercept('GET', '/api/data').as('getData')
cy.visit('/page')
cy.wait('@getData')

You first create an alias for the request using cy.intercept() and .as().

Then you use cy.wait() with the alias name prefixed by @ to pause until the request finishes.

Examples
Waits for the login POST request to finish after clicking the submit button.
Cypress
cy.intercept('POST', '/login').as('loginRequest')
cy.get('button[type=submit]').click()
cy.wait('@loginRequest')
Waits for the users API call to complete when visiting the users page.
Cypress
cy.intercept('GET', '/users').as('getUsers')
cy.visit('/users')
cy.wait('@getUsers')
Waits for a product details request after clicking the first product link.
Cypress
cy.intercept('GET', '/products/*').as('getProduct')
cy.get('.product-link').first().click()
cy.wait('@getProduct')
Sample Program

This test waits for the GET request to '/api/items' to finish before checking that the page shows some items.

Cypress
describe('Wait for API request example', () => {
  it('waits for data to load before checking', () => {
    cy.intercept('GET', '/api/items').as('getItems')
    cy.visit('/items')
    cy.wait('@getItems')
    cy.get('.item').should('have.length.greaterThan', 0)
  })
})
OutputSuccess
Important Notes

Always create the alias before the action that triggers the request.

You can wait for multiple requests by passing an array of aliases to cy.wait().

If the request fails or times out, the test will fail, helping catch issues early.

Summary

Use cy.intercept() with .as() to name requests.

Use cy.wait() with the alias to pause until the request finishes.

This makes tests more reliable by syncing with network activity.

Practice

(1/5)
1. What is the main purpose of using cy.wait() with an alias in Cypress tests?
easy
A. To log the test results to the console
B. To pause the test until a specific network request finishes
C. To reload the page automatically
D. To skip a test step temporarily

Solution

  1. Step 1: Understand cy.wait() with alias

    The cy.wait() command pauses the test until the network request with the given alias completes.
  2. Step 2: Purpose of waiting for requests

    This ensures the test runs only after the needed data is loaded, making tests reliable.
  3. Final Answer:

    To pause the test until a specific network request finishes -> Option B
  4. Quick Check:

    Waiting for request = pause test until done [OK]
Hint: Wait pauses test until named request finishes [OK]
Common Mistakes:
  • Thinking cy.wait skips steps
  • Confusing cy.wait with page reload
  • Using cy.wait without alias
2. Which of the following is the correct syntax to alias a network request in Cypress?
easy
A. cy.intercept('/api/data').alias('getData')
B. cy.route('/api/data').alias('getData')
C. cy.wait('/api/data').as('getData')
D. cy.intercept('/api/data').as('getData')

Solution

  1. Step 1: Identify correct alias method

    In Cypress, cy.intercept() is used to spy or stub requests, and .as() assigns an alias.
  2. Step 2: Check syntax correctness

    cy.intercept('/api/data').as('getData') uses cy.intercept('/api/data').as('getData'), which is the correct syntax.
  3. Final Answer:

    cy.intercept('/api/data').as('getData') -> Option D
  4. Quick Check:

    Alias uses .as() after intercept [OK]
Hint: Use .as() to alias intercept, not .alias() [OK]
Common Mistakes:
  • Using .alias() instead of .as()
  • Trying to alias cy.wait instead of cy.intercept
  • Using deprecated cy.route instead of cy.intercept
3. Given the code below, what will be the output in the test if the request takes 500ms to complete?
cy.intercept('GET', '/users').as('getUsers')
cy.visit('/users')
cy.wait('@getUsers').then(({ response }) => {
  console.log(response.status)
})
medium
A. 200
B. undefined
C. 500
D. 404

Solution

  1. Step 1: Understand intercept and wait behavior

    The cy.intercept() spies on the GET request to '/users' and aliases it as 'getUsers'.
  2. Step 2: Analyze the wait and response

    cy.wait('@getUsers') waits for the request to finish, then logs the response.status. A successful GET usually returns 200.
  3. Final Answer:

    200 -> Option A
  4. Quick Check:

    Wait logs response status 200 [OK]
Hint: Wait returns response object with status [OK]
Common Mistakes:
  • Confusing request duration with status code
  • Expecting wait to return undefined
  • Assuming 404 if request is slow
4. Identify the error in the following Cypress test code:
cy.intercept('POST', '/login').as('loginRequest')
cy.get('button#submit').click()
cy.wait('loginRequest')
medium
A. Missing @ symbol in cy.wait alias
B. Incorrect HTTP method in intercept
C. Alias name should be in double quotes
D. cy.get selector is invalid

Solution

  1. Step 1: Check cy.wait usage

    The cy.wait() command requires the alias to be prefixed with '@' to identify the request alias.
  2. Step 2: Identify the error

    The code uses cy.wait('loginRequest') missing the '@', which causes Cypress to not recognize the alias.
  3. Final Answer:

    Missing @ symbol in cy.wait alias -> Option A
  4. Quick Check:

    Alias in cy.wait needs '@' prefix [OK]
Hint: Always prefix alias with '@' in cy.wait [OK]
Common Mistakes:
  • Omitting '@' before alias in cy.wait
  • Using wrong HTTP method in intercept
  • Thinking quotes affect alias recognition
5. You want to test that after clicking a button, a POST request to '/submit' completes successfully before checking the page content. Which is the best way to write this in Cypress?
hard
A. cy.intercept('POST', '/submit').as('submitRequest') cy.wait('@submitRequest') cy.get('button#send').click() cy.contains('Success').should('be.visible')
B. cy.get('button#send').click() cy.wait('@submitRequest') cy.intercept('POST', '/submit').as('submitRequest') cy.contains('Success').should('be.visible')
C. cy.intercept('POST', '/submit').as('submitRequest') cy.get('button#send').click() cy.wait('@submitRequest') cy.contains('Success').should('be.visible')
D. cy.get('button#send').click() cy.contains('Success').should('be.visible') cy.intercept('POST', '/submit').as('submitRequest') cy.wait('@submitRequest')

Solution

  1. Step 1: Setup intercept before action

    You must call cy.intercept() and alias before triggering the request by clicking the button.
  2. Step 2: Wait for request before assertions

    Use cy.wait('@submitRequest') after clicking to pause until the POST completes, then check page content.
  3. Final Answer:

    Intercept first, click, wait, then assert success message -> Option C
  4. Quick Check:

    Intercept before action, wait after click [OK]
Hint: Always intercept before triggering request, then wait [OK]
Common Mistakes:
  • Waiting before intercepting
  • Asserting before request finishes
  • Interception after click triggers request
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard