Bird
Raised Fist0
Cypresstesting~15 mins

Data cleanup approaches in Cypress - Build an Automation Script

Choose your learning style10 modes available
Clean up test data after user creation test
Preconditions (1)
Step 1: Log in as admin user with username 'admin' and password 'AdminPass!'
Step 2: Navigate to the user management page
Step 3: Search for the user with username 'testuser123'
Step 4: Select the user from the search results
Step 5: Click the delete button to remove the user
Step 6: Confirm the deletion in the confirmation dialog
✅ Expected Result: The user 'testuser123' is removed from the system and no longer appears in the user list
Automation Requirements - Cypress
Assertions Needed:
Verify the user 'testuser123' does not appear in the user list after deletion
Verify the confirmation dialog appears before deletion
Best Practices:
Use explicit waits for elements to appear before interacting
Use data attributes for selectors (e.g., data-cy) instead of classes or ids
Use custom commands for repeated actions like login
Clean up test data in afterEach or after hooks to keep tests independent
Automated Solution
Cypress
/// <reference types="cypress" />

// Custom command to login as admin
Cypress.Commands.add('loginAsAdmin', () => {
  cy.visit('/login');
  cy.get('[data-cy=email-input]').type('admin');
  cy.get('[data-cy=password-input]').type('AdminPass!');
  cy.get('[data-cy=login-button]').click();
  cy.url().should('include', '/dashboard');
});

describe('Data cleanup: Delete test user', () => {
  before(() => {
    cy.loginAsAdmin();
  });

  it('Deletes user testuser123 from user management', () => {
    cy.visit('/user-management');

    // Wait for search input and type username
    cy.get('[data-cy=user-search-input]').should('be.visible').type('testuser123');

    // Click search button
    cy.get('[data-cy=user-search-button]').click();

    // Wait for user row to appear
    cy.get('[data-cy=user-row-testuser123]').should('be.visible');

    // Click delete button for the user
    cy.get('[data-cy=delete-user-testuser123]').click();

    // Confirm deletion dialog appears
    cy.get('[data-cy=confirm-delete-dialog]').should('be.visible');

    // Click confirm delete button
    cy.get('[data-cy=confirm-delete-button]').click();

    // Verify user no longer appears in the list
    cy.get('[data-cy=user-row-testuser123]').should('not.exist');
  });
});

The code starts by adding a custom Cypress command loginAsAdmin to reuse the login steps easily. This helps keep the test clean and avoids repeating login code.

In the test suite, the before hook logs in as admin once before running the test. This ensures the test starts with the right user context.

The test visits the user management page, waits for the search input to be visible, and types the username testuser123. It clicks the search button and waits for the user row to appear.

Then it clicks the delete button for that user, waits for the confirmation dialog, and confirms the deletion. Finally, it asserts that the user row no longer exists, confirming the user was deleted.

Selectors use data-cy attributes for stability and clarity. Explicit waits with should('be.visible') ensure elements are ready before interacting, avoiding flaky tests.

This approach follows best practices by using custom commands, explicit waits, and stable selectors to automate data cleanup reliably.

Common Mistakes - 4 Pitfalls
Using CSS classes or IDs that may change as selectors
{'mistake': 'Not waiting for elements before interacting', 'why_bad': 'Trying to click or type before elements appear causes test failures.', 'correct_approach': "Use explicit waits like should('be.visible') to ensure elements are ready."}
Hardcoding login steps in every test
Not cleaning up test data after tests
Bonus Challenge

Now add data-driven testing to delete three different test users: 'testuser123', 'testuser456', and 'testuser789'.

Show Hint

Practice

(1/5)
1. Why is data cleanup important in Cypress tests?
easy
A. It makes tests run slower
B. It increases the number of test failures
C. It keeps tests independent and reliable
D. It removes the need for assertions

Solution

  1. Step 1: Understand test independence

    Tests should not depend on data left by previous tests to avoid false results.
  2. Step 2: Recognize reliability benefits

    Cleaning data ensures each test starts fresh, making results trustworthy.
  3. Final Answer:

    It keeps tests independent and reliable -> Option C
  4. Quick Check:

    Data cleanup = test independence and reliability [OK]
Hint: Data cleanup ensures fresh start for each test [OK]
Common Mistakes:
  • Thinking cleanup slows tests
  • Believing cleanup causes more failures
  • Assuming cleanup removes assertions
2. Which Cypress hook is best to use for cleaning test data after each test?
easy
A. afterEach
B. beforeEach
C. before
D. after

Solution

  1. Step 1: Identify hooks for cleanup timing

    afterEach runs after every test, ideal for cleanup after each test.
  2. Step 2: Compare other hooks

    before and beforeEach run before tests; after runs once after all tests.
  3. Final Answer:

    afterEach -> Option A
  4. Quick Check:

    Cleanup after each test = afterEach [OK]
Hint: Use afterEach to clean after every test [OK]
Common Mistakes:
  • Using before for cleanup
  • Confusing beforeEach with cleanup hook
  • Using after which runs only once
3. What will happen if you use this code snippet in Cypress?
after(() => {
  cy.request('DELETE', '/api/test-data')
})
medium
A. Test data is never cleaned
B. Test data is cleaned once after all tests finish
C. Test data is cleaned after each test
D. Test data is cleaned before each test

Solution

  1. Step 1: Understand after hook behavior

    after runs once after all tests in the suite complete.
  2. Step 2: Analyze the API request timing

    The DELETE request runs only once after all tests, cleaning data once at the end.
  3. Final Answer:

    Test data is cleaned once after all tests finish -> Option B
  4. Quick Check:

    after = cleanup once after all tests [OK]
Hint: after runs once after all tests finish [OK]
Common Mistakes:
  • Thinking after runs after each test
  • Confusing after with afterEach
  • Assuming cleanup runs before tests
4. You wrote this code to clean test data after each test:
afterEach(() => {
  cy.request('DELETE', '/api/test-data')
})

But test data is not cleaned properly. What is the likely problem?
medium
A. The API endpoint URL might be incorrect or unavailable
B. The afterEach hook is not supported in Cypress
C. You should use beforeEach instead of afterEach
D. The DELETE method is not allowed in HTTP

Solution

  1. Step 1: Verify afterEach hook validity

    afterEach is valid and commonly used for cleanup in Cypress.
  2. Step 2: Check API request issues

    If data is not cleaned, the DELETE request may fail due to wrong URL or server issues.
  3. Final Answer:

    The API endpoint URL might be incorrect or unavailable -> Option A
  4. Quick Check:

    Failed cleanup often means API endpoint problem [OK]
Hint: Check API URL if cleanup fails [OK]
Common Mistakes:
  • Thinking afterEach is unsupported
  • Using wrong HTTP method assumptions
  • Switching hooks unnecessarily
5. You want to ensure test data is cleaned efficiently before and after each test in Cypress. Which approach is best?
hard
A. Manually delete data in each test without hooks
B. Use only before hook to clean data once before all tests
C. Use after hook to clean data once after all tests finish
D. Use beforeEach to create data and afterEach to delete data via API requests

Solution

  1. Step 1: Understand test data lifecycle

    Creating data before each test and cleaning after each test keeps tests isolated and reliable.
  2. Step 2: Use API requests in hooks

    API calls in beforeEach and afterEach efficiently manage test data per test.
  3. Final Answer:

    Use beforeEach to create data and afterEach to delete data via API requests -> Option D
  4. Quick Check:

    Setup and cleanup per test = beforeEach + afterEach [OK]
Hint: Use beforeEach and afterEach with API calls [OK]
Common Mistakes:
  • Cleaning data only once before or after all tests
  • Not using hooks for cleanup
  • Manually deleting data inside tests
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