Cypress предоставляет мощный набор инструментов для автоматизации взаимодействия с элементами формы, включая чекбоксы и радиокнопки. Эти элементы HTML имеют специфические свойства, которые важно учитывать при тестировании: чекбоксы могут быть отмечены или сняты, радиокнопки — выбираются в группе по одному значению.
Для работы с чекбоксами в Cypress используется команда
.check() для установки флага и .uncheck() для
его снятия. Эти команды автоматически проверяют текущее состояние
элемента и выполняют действие только если оно необходимо, что упрощает
написание устойчивых тестов.
// Отметить один чекбокс
cy.get('#subscribe').check();
// Снять отметку с чекбокса
cy.get('#subscribe').uncheck();
Можно работать с несколькими чекбоксами одновременно, используя
массив значений атрибута value:
// Отметить несколько чекбоксов по значению
cy.get('input[type="checkbox"]').check(['news', 'updates']);
Важно учитывать, что .check() и .uncheck()
работают только с интерактивными элементами, которые не
имеют атрибута disabled. Для проверки состояния
используется команда .should():
cy.get('#subscribe').should('be.checked'); // Проверка, что чекбокс отмечен
cy.get('#subscribe').should('not.be.checked'); // Проверка, что чекбокс не отмечен
Радиокнопки в HTML объединяются по атрибуту name. Выбор
радиокнопки с помощью Cypress осуществляется через .check()
с указанием значения атрибута value или через выбор
конкретного элемента.
// Выбрать радиокнопку по значению
cy.get('input[name="gender"]').check('female');
// Проверить, что радиокнопка выбрана
cy.get('input[name="gender"][value="female"]').should('be.checked');
Если в группе радиокнопок выбрать другой вариант, Cypress автоматически снимает выбор с предыдущего элемента, что соответствует поведению браузера.
На современных веб-сайтах часто используются стилизованные элементы,
где внешний <div> заменяет стандартный
<input>. В таких случаях стандартные методы
.check() и .uncheck() не работают, так как
Cypress не видит интерактивный input.
Для работы с ними применяются события клика:
cy.get('.custom-checkbox').click();
cy.get('.custom-radio[value="option2"]').click();
После этого рекомендуется проверить состояние через атрибуты,
например aria-checked или класс:
cy.get('.custom-checkbox').should('have.attr', 'aria-checked', 'true');
cy.get('.custom-radio[value="option2"]').should('have.class', 'selected');
Для надёжных тестов важно сочетать действия с проверкой состояния. Например, после выбора нескольких чекбоксов можно проверить, что именно они отмечены:
cy.get('input[type="checkbox"]').check(['news', 'updates']);
cy.get('input[value="news"]').should('be.checked');
cy.get('input[value="updates"]').should('be.checked');
cy.get('input[value="offers"]').should('not.be.checked');
Для радиокнопок проверка обычно ограничивается выбранным элементом:
cy.get('input[name="gender"]').check('male');
cy.get('input[name="gender"][value="male"]').should('be.checked');
cy.get('input[name="gender"][value="female"]').should('not.be.checked');
Чекбоксы и радиокнопки могут быть динамически изменяемыми, например через JavaScript или AJAX. В таких случаях используется ожидание состояния элемента:
cy.get('#subscribe', { timeout: 10000 }).should('be.visible').check();
Использование таймаутов и ассерций повышает стабильность тестов на сложных страницах, предотвращая ошибки, связанные с задержкой загрузки элементов.
.check() и .uncheck() для
стандартных input-элементов..click() и проверять
состояние через атрибуты или классы.Такой подход обеспечивает точное и надёжное тестирование всех видов чекбоксов и радиокнопок, сохраняя соответствие поведению пользователя в браузере.