Bird
Raised Fist0
Cypresstesting~15 mins

Headless mode in Cypress - Build an Automation Script

Choose your learning style10 modes available
Verify login functionality in headless mode
Preconditions (2)
Step 1: Open the login page URL
Step 2: Enter 'testuser' in the username input field with id 'username'
Step 3: Enter 'Test@1234' in the password input field with id 'password'
Step 4: Click the login button with id 'loginBtn'
Step 5: Wait for the dashboard page to load
Step 6: Verify that the URL contains '/dashboard'
Step 7: Verify that the element with id 'welcomeMessage' contains text 'Welcome, testuser!'
✅ Expected Result: User is successfully logged in and redirected to the dashboard page with a welcome message displayed.
Automation Requirements - Cypress
Assertions Needed:
URL contains '/dashboard' after login
Welcome message contains 'Welcome, testuser!'
Best Practices:
Use explicit Cypress commands and assertions
Use data-test or id attributes for selectors
Run tests in headless mode using Cypress CLI
Avoid hardcoded waits; use Cypress automatic waits
Automated Solution
Cypress
describe('Login Test in Headless Mode', () => {
  it('should log in successfully and show welcome message', () => {
    cy.visit('https://example.com/login');
    cy.get('#username').type('testuser');
    cy.get('#password').type('Test@1234');
    cy.get('#loginBtn').click();
    cy.url().should('include', '/dashboard');
    cy.get('#welcomeMessage').should('contain.text', 'Welcome, testuser!');
  });
});

// To run this test in headless mode, use the command:
// npx cypress run --headless --spec 'cypress/e2e/login_spec.cy.js'

This Cypress test script automates the login process as described in the manual test case.

First, it visits the login page URL. Then it types the username and password into the input fields identified by their id attributes, which is a best practice for stable selectors.

After clicking the login button, it waits automatically for the page to load and verifies the URL contains /dashboard to confirm navigation.

Finally, it checks that the welcome message contains the expected text, confirming successful login.

The test is designed to run in headless mode by using the Cypress CLI command with the --headless flag, which runs the browser without opening a visible window, useful for automated pipelines.

Common Mistakes - 3 Pitfalls
Using hardcoded waits like cy.wait(5000) instead of relying on Cypress automatic waits
Using CSS selectors that are brittle or likely to change, like complex class names
{'mistake': 'Not specifying the headless mode in the test run command', 'why_bad': 'Tests run with the browser UI open, which is slower and not suitable for CI pipelines.', 'correct_approach': "Run tests with the command 'npx cypress run --headless' to execute tests without opening the browser window."}
Bonus Challenge

Now add data-driven testing with 3 different sets of valid username and password combinations.

Show Hint

Practice

(1/5)
1. What is the main benefit of running Cypress tests in headless mode?
easy
A. Tests run faster without opening the browser window
B. Tests show detailed browser UI for debugging
C. Tests require manual interaction during execution
D. Tests only run on mobile devices

Solution

  1. Step 1: Understand headless mode purpose

    Headless mode runs tests without opening the browser window, making execution faster.
  2. Step 2: Compare options with headless mode features

    Options B and C describe interactive or visible tests, which are not headless. Tests only run on mobile devices is unrelated.
  3. Final Answer:

    Tests run faster without opening the browser window -> Option A
  4. Quick Check:

    Headless mode = faster tests without UI [OK]
Hint: Headless means no browser window visible during tests [OK]
Common Mistakes:
  • Thinking headless mode shows browser UI
  • Confusing headless with manual testing
  • Assuming headless only runs on specific devices
2. Which command correctly runs Cypress tests in headless mode?
easy
A. npx cypress run --headless
B. npx cypress open --headless
C. npx cypress start --headless
D. npx cypress test --headless

Solution

  1. Step 1: Recall Cypress commands for running tests

    The correct command to run tests in headless mode is npx cypress run --headless.
  2. Step 2: Eliminate incorrect commands

    open launches the interactive GUI, start and test are not valid Cypress commands.
  3. Final Answer:

    npx cypress run --headless -> Option A
  4. Quick Check:

    Run + --headless = correct command [OK]
Hint: Use 'run' command with --headless flag [OK]
Common Mistakes:
  • Using 'open' instead of 'run' for headless
  • Typing invalid commands like 'start' or 'test'
  • Omitting the --headless flag
3. What will happen if you run npx cypress run --headless in your terminal?
medium
A. Cypress opens the browser window and runs tests interactively
B. Tests run in the background without showing the browser UI
C. Tests fail because --headless is not a valid option
D. Cypress opens a GUI to select tests manually

Solution

  1. Step 1: Understand the effect of --headless flag

    The --headless flag runs tests without opening the browser window, so tests run in the background.
  2. Step 2: Match options with expected behavior

    Cypress opens the browser window and runs tests interactively and D describe interactive modes, which do not happen with --headless. Tests fail because --headless is not a valid option is incorrect because --headless is valid.
  3. Final Answer:

    Tests run in the background without showing the browser UI -> Option B
  4. Quick Check:

    --headless = background test run [OK]
Hint: Headless runs tests silently without UI [OK]
Common Mistakes:
  • Expecting browser window to open
  • Thinking --headless is invalid
  • Confusing headless with interactive mode
4. You ran npx cypress run --headless but tests did not start. Which is the most likely cause?
medium
A. Headless mode requires a GUI environment
B. You forgot to install Cypress globally
C. You used cypress open --headless instead of run
D. Your test files are missing or misnamed

Solution

  1. Step 1: Check the command used

    Using cypress open --headless is invalid because open does not support --headless.
  2. Step 2: Evaluate other options

    Installing Cypress globally is not required with npx. Missing test files cause errors but not silent failure. Headless mode does not require GUI.
  3. Final Answer:

    You used cypress open --headless instead of run -> Option C
  4. Quick Check:

    Use 'run' command with --headless [OK]
Hint: Use 'run' not 'open' with --headless [OK]
Common Mistakes:
  • Using 'open' command with --headless
  • Assuming global install is mandatory
  • Thinking headless needs GUI
5. You want to integrate Cypress tests into a CI pipeline to run automatically without UI. Which approach is best?
hard
A. Run npx cypress open and manually start tests
B. Use npx cypress run without --headless to see browser
C. Run tests only on local machines with GUI
D. Run npx cypress run --headless in the pipeline script

Solution

  1. Step 1: Understand CI pipeline needs

    CI pipelines require automated, non-interactive test runs without UI.
  2. Step 2: Choose the command that fits automation

    npx cypress run --headless runs tests automatically without opening browser UI, ideal for CI.
  3. Step 3: Eliminate other options

    Run npx cypress open and manually start tests requires manual start, C limits tests to local GUI, D shows browser UI which slows CI.
  4. Final Answer:

    Run npx cypress run --headless in the pipeline script -> Option D
  5. Quick Check:

    CI automation = run with --headless [OK]
Hint: Use headless run for CI automation [OK]
Common Mistakes:
  • Running tests manually in CI
  • Expecting GUI in CI environment
  • Omitting --headless in automated runs
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