The @dom-assertions/cypress-dom package provides custom assertions to make
your Cypress tests more declarative, readable, and
maintainable.
First, install the @dom-assertions/cypress-dom package.
npm install --save-dev @dom-assertions/cypress-dom
yarn add --dev @dom-assertions/cypress-dom
pnpm add --save-dev @dom-assertions/cypress-domThen, import it into cypress/support/commands.ts
import '@dom-assertions/cypress-dom'Note: We recommend using Cypress Testing Library with this library for writing more readable and accessibility-driven tests.
Asserts that the given element is invalid.
<div>
<label for="username">Username</label>
<input id="username" type="text" aria-invalid="true" />
</div>cy.findByLabelText('Username').should('be.invalid')Asserts that the given element is required.
<div>
<label for="username">Username</label>
<input id="username" type="text" required />
</div>cy.findByLabelText('Username').should('be.required')Asserts that the given element is valid.
<div>
<label for="username">Username</label>
<input id="username" type="text" />
</div>cy.findByLabelText('Username').should('be.valid')Asserts that the given element has the expected accessible description.
<button aria-describedby="trash-desc">Move to trash</button>
<p id="trash-desc">
Items in the trash will be permanently removed after 30 days.
</p>cy.findByRole('button', { name: 'Move to trash' }).should('have.description')
cy.findByRole('button', { name: 'Move to trash' }).should(
'have.description',
'Items in the trash will be permanently removed after 30 days.',
)Asserts that the given element has the expected
ARIA error message. Please
note that the element should indicate an error state using aria-invalid set to
true.
<label for="email">Email</label>
<input
type="email"
name="email"
id="email"
aria-invalid="true"
aria-errormessage="error-message"
/>
<span id="error-message">Enter a valid email address</span>cy.findByLabelText('Email').should('have.errorMessage')
cy.findByLabelText('Email').should(
'have.errorMessage',
'Enter a valid email address',
)Asserts that the given element has the expected accessible name.
<span
role="checkbox"
aria-checked="false"
tabindex="0"
aria-labelledby="label"
/>
<span id="label">I agree to the Terms and Conditions.</span>cy.findByRole('checkbox').should('have.name')
cy.findByRole('checkbox').should(
'have.name',
'I agree to the Terms and Conditions.',
)