Bird
Raised Fist0
Cypresstesting~15 mins

CSS assertions in Cypress - Build an Automation Script

Choose your learning style10 modes available
Verify CSS properties of a button on the homepage
Preconditions (2)
Step 1: Open the homepage URL in a browser
Step 2: Locate the button with id 'submit-btn'
Step 3: Check that the button's background color is '#007bff'
Step 4: Check that the button's font size is '16px'
Step 5: Check that the button's border radius is '4px'
✅ Expected Result: The button with id 'submit-btn' has the background color '#007bff', font size '16px', and border radius '4px'
Automation Requirements - Cypress
Assertions Needed:
Verify background-color CSS property
Verify font-size CSS property
Verify border-radius CSS property
Best Practices:
Use cy.get() with id selector for locating elements
Use should('have.css', property, value) for CSS assertions
Avoid hardcoding CSS values in multiple places; keep them consistent
Use descriptive test names
Include comments for clarity
Automated Solution
Cypress
describe('CSS Assertions for Submit Button', () => {
  beforeEach(() => {
    cy.visit('https://example.com'); // Replace with actual homepage URL
  });

  it('should have correct CSS properties on submit button', () => {
    // Locate the button by id
    cy.get('#submit-btn')
      // Assert background color
      .should('have.css', 'background-color', 'rgb(0, 123, 255)')
      // Assert font size
      .and('have.css', 'font-size', '16px')
      // Assert border radius
      .and('have.css', 'border-radius', '4px');
  });
});

This Cypress test suite named CSS Assertions for Submit Button runs on the homepage URL.

The beforeEach hook opens the homepage before each test.

The test locates the button with id submit-btn using cy.get('#submit-btn').

It then asserts the CSS properties using should('have.css', property, value):

  • background-color is checked as rgb(0, 123, 255) because browsers return colors in rgb format.
  • font-size is checked as 16px.
  • border-radius is checked as 4px.

Using chaining with .and() keeps the assertions clean and readable.

This approach follows Cypress best practices for CSS assertions and element selection.

Common Mistakes - 4 Pitfalls
{'mistake': "Using hex color code directly in CSS assertion like '#007bff'", 'why_bad': 'Browsers return computed colors in rgb format, so the assertion will fail.', 'correct_approach': "Use the rgb equivalent 'rgb(0, 123, 255)' in the assertion."}
{'mistake': "Using generic selectors like 'button' instead of specific id selectors", 'why_bad': 'May select multiple elements causing flaky tests or wrong assertions.', 'correct_approach': "Use specific selectors like '#submit-btn' to target the exact element."}
{'mistake': 'Not waiting for the page to load before assertions', 'why_bad': 'Assertions may run before elements are ready, causing false failures.', 'correct_approach': "Use cy.visit() and Cypress's automatic waits to ensure elements are ready."}
Hardcoding CSS values in multiple tests without centralizing
Bonus Challenge

Now add data-driven testing to verify CSS properties for three different buttons with ids 'submit-btn', 'cancel-btn', and 'reset-btn' each having different expected CSS values.

Show Hint

Practice

(1/5)
1. What does the Cypress command cy.get('button').should('have.css', 'color', 'rgb(255, 0, 0)') check?
easy
A. It checks if the button is clickable.
B. It checks if the button's text color is red.
C. It checks if the button has a red background.
D. It checks if the button is visible on the page.

Solution

  1. Step 1: Understand the CSS property being checked

    The command checks the CSS property 'color', which controls the text color of the element.
  2. Step 2: Interpret the value 'rgb(255, 0, 0)'

    This RGB value represents the color red.
  3. Final Answer:

    It checks if the button's text color is red. -> Option B
  4. Quick Check:

    CSS property 'color' = text color [OK]
Hint: Check the CSS property name to know what style is tested [OK]
Common Mistakes:
  • Confusing 'color' with 'background-color'
  • Assuming it checks visibility instead of style
  • Mixing RGB values with hex codes incorrectly
2. Which of the following is the correct Cypress syntax to assert that an element has a font size of 16 pixels?
easy
A. cy.get('p').should('css', 'font-size', '16px')
B. cy.get('p').should('have.style', 'font-size', '16px')
C. cy.get('p').assert('font-size', '16px')
D. cy.get('p').should('have.css', 'font-size', '16px')

Solution

  1. Step 1: Identify the correct assertion method

    The correct Cypress assertion to check CSS is should('have.css', property, value).
  2. Step 2: Match the syntax with the options

    cy.get('p').should('have.css', 'font-size', '16px') uses should('have.css', 'font-size', '16px'), which is correct syntax.
  3. Final Answer:

    cy.get('p').should('have.css', 'font-size', '16px') -> Option D
  4. Quick Check:

    Use should('have.css') for CSS assertions [OK]
Hint: Use 'should' with 'have.css' for CSS property checks [OK]
Common Mistakes:
  • Using 'should' without 'have.css'
  • Using 'assert' which is not a Cypress command
  • Confusing 'have.style' with 'have.css'
3. Given the following Cypress code snippet, what will be the test result if the element's background color is actually 'rgb(0, 128, 0)'?
cy.get('.alert').should('have.css', 'background-color', 'rgb(255, 0, 0)')
medium
A. The test will fail because the background color does not match 'rgb(255, 0, 0)'.
B. The test will pass because the element has a background color.
C. The test will throw a syntax error.
D. The test will be skipped automatically.

Solution

  1. Step 1: Understand the expected CSS value

    The test expects the background color to be 'rgb(255, 0, 0)', which is red.
  2. Step 2: Compare with actual CSS value

    The actual background color is 'rgb(0, 128, 0)', which is green, so it does not match.
  3. Final Answer:

    The test will fail because the background color does not match 'rgb(255, 0, 0)'. -> Option A
  4. Quick Check:

    CSS value mismatch causes test failure [OK]
Hint: Match exact CSS values to avoid test failures [OK]
Common Mistakes:
  • Assuming any color presence passes the test
  • Confusing RGB values for different colors
  • Expecting Cypress to auto-correct CSS mismatches
4. Identify the error in this Cypress CSS assertion and choose the fix:
cy.get('#header').should('have.css', 'font-weight', 700)
medium
A. The font-weight value should be a string: '700'.
B. The selector '#header' is invalid and should be '.header'.
C. The method 'have.css' should be replaced with 'css'.
D. The assertion should use 'expect' instead of 'should'.

Solution

  1. Step 1: Check the type of CSS value in assertion

    Cypress expects the CSS value as a string, so 700 should be '700'.
  2. Step 2: Verify other parts of the command

    The selector '#header' is valid, and 'should' with 'have.css' is correct syntax.
  3. Final Answer:

    The font-weight value should be a string: '700'. -> Option A
  4. Quick Check:

    CSS values must be strings in assertions [OK]
Hint: Always quote CSS values in Cypress assertions [OK]
Common Mistakes:
  • Passing numbers instead of strings for CSS values
  • Changing valid selectors unnecessarily
  • Confusing assertion methods in Cypress
5. You want to verify that a button with class .submit-btn has a border radius of 5 pixels and a background color that is not transparent. Which Cypress code correctly asserts both styles?
hard
A. cy.get('.submit-btn').should('have.css', 'border-radius', '5px').and('have.css', 'background-color').not('transparent')
B. cy.get('.submit-btn').should('have.css', 'border-radius', '5px').and('have.css', 'background-color', 'rgba(0, 0, 0, 0)')
C. cy.get('.submit-btn').should('have.css', 'border-radius', '5px').and('have.css', 'background-color').should(value => expect(value).not.to.equal('rgba(0, 0, 0, 0)'))
D. cy.get('.submit-btn').should('have.css', 'border-radius', 5).and('have.css', 'background-color', 'transparent')"

Solution

  1. Step 1: Assert border-radius with correct value and type

    Use should('have.css', 'border-radius', '5px') to check border radius as a string with units.
  2. Step 2: Assert background-color is not transparent

    Since 'transparent' can be represented as 'rgba(0, 0, 0, 0)', use a callback assertion to check the value is not equal to that.
  3. Step 3: Review options for correctness

    cy.get('.submit-btn').should('have.css', 'border-radius', '5px').and('have.css', 'background-color').should(value => expect(value).not.to.equal('rgba(0, 0, 0, 0)')) uses a callback with should and expect to verify background-color is not transparent, which is correct.
  4. Final Answer:

    cy.get('.submit-btn').should('have.css', 'border-radius', '5px').and('have.css', 'background-color').should(value => expect(value).not.to.equal('rgba(0, 0, 0, 0)')) -> Option C
  5. Quick Check:

    Use callback assertions for negative CSS checks [OK]
Hint: Use callback assertions to check CSS values are not equal [OK]
Common Mistakes:
  • Passing numeric values without units for CSS properties
  • Trying to chain 'not' directly after 'have.css' without callback
  • Checking for exact transparent string instead of rgba value
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