Cypress предоставляет удобные методы для работы с атрибутами
элементов на странице, что позволяет тестировать состояние интерфейса и
корректность HTML-разметки. Атрибуты могут включать стандартные
HTML-поля (id, class, href,
src и др.), пользовательские атрибуты (data-*)
и свойства элементов (disabled, checked,
value).
Метод .should() и команда .invoke()
позволяют проверять или получать значения атрибутов. Самый простой
способ — использовать
invoke('attr', '<название_атрибута>'). Пример:
cy.get('a.nav-link')
.invoke('attr', 'href')
.should('eq', '/home');
В данном примере Cypress получает атрибут href у ссылки
с классом nav-link и проверяет, что он равен
/home. Метод invoke возвращает значение
атрибута напрямую, что удобно для дальнейших сравнений и логики
теста.
Для проверки, присутствует ли атрибут, применяется метод
.should('have.attr', '<название>', '<значение>')
или .should('have.attr', '<название>') без указания
значения:
cy.get('input[type="checkbox"]')
.should('have.attr', 'checked');
Если атрибут должен иметь конкретное значение:
cy.get('button.submit')
.should('have.attr', 'type', 'submit');
data-*Современные приложения часто используют атрибуты data-*
для тестирования. Cypress отлично поддерживает их проверку:
cy.get('[data-test="login-button"]')
.should('have.attr', 'data-test', 'login-button');
Для динамических значений удобно использовать
invoke:
cy.get('[data-test="user-id"]')
.invoke('attr', 'data-user-id')
.then((id) => {
expect(Number(id)).to.be.greaterThan(0);
});
Некоторые состояния элементов напрямую отражаются в атрибутах:
disabled, checked, readonly,
selected. Их проверка особенно важна для форм и
интерактивных элементов.
cy.get('input[name="email"]')
.should('be.disabled');
cy.get('input[type="checkbox"]')
.should('be.checked');
Методы be.disabled и be.checked работают
через атрибуты и свойства DOM, что обеспечивает корректную проверку на
разных браузерах.
Cypress позволяет проверять изменения атрибутов после взаимодействия с элементом. Например, кнопка может становиться активной после заполнения формы:
cy.get('input[name="username"]').type('testuser');
cy.get('input[name="password"]').type('password123');
cy.get('button.login')
.should('not.be.disabled')
.click();
После клика можно проверить, что атрибут изменился:
cy.get('button.login')
.should('have.attr', 'aria-pressed', 'true');
Проверка атрибутов часто используется вместе с другими командами
Cypress: .contains(), .find(),
.within(). Это позволяет локализовать элемент внутри
контейнера и убедиться в корректности его состояния.
cy.get('form#signup').within(() => {
cy.get('input[name="email"]').should('have.attr', 'placeholder', 'Введите email');
});
Cypress позволяет проверять несколько атрибутов одновременно,
используя цепочку команд .should():
cy.get('img.logo')
.should('have.attr', 'src', '/images/logo.png')
.and('have.attr', 'alt', 'Company Logo');
Это упрощает тестирование комплексных элементов без необходимости дублирования кода.
should('have.attr', '<название>', '<значение>').invoke('attr', '<название>') с последующей проверкой
через then.data-* атрибутов делает тесты более
стабильными и независимыми от внешнего CSS или классов.Использование этих техник позволяет строить точные, надежные и легко поддерживаемые тесты пользовательского интерфейса.