Использование data-атрибутов является одной из ключевых практик в автоматизированном тестировании веб-приложений с Cypress. Они позволяют изолировать селекторы тестов от изменений стилей или структуры DOM, что обеспечивает стабильность и поддерживаемость тестов.
Data-атрибуты — это специальные атрибуты HTML, начинающиеся с
data-, которые предназначены для хранения дополнительной
информации об элементе, не влияя на его визуальное отображение или
поведение. Примеры:
<button data-cy="submit-button">Отправить</button>
<input type="text" data-test="username-field" />
Основные преимущества их использования в тестах:
Правильное именование data-атрибутов важно для читаемости и масштабируемости тестов. Рекомендуется:
data-cy,
data-test или data-testid.Примеры хороших и плохих практик:
<!-- Хорошо -->
<button data-cy="login-button">Войти</button>
<!-- Плохо -->
<button class="btn-primary" id="btn123">Войти</button>
Cypress позволяет использовать любой CSS-селектор, включая селекторы
по data-атрибутам. Это делается с помощью команды
cy.get():
cy.get('[data-cy="login-button"]').click();
cy.get('[data-test="username-field"]').type('user123');
Можно создавать функции-обертки, чтобы сделать тесты более читаемыми:
const getLoginButton = () => cy.get('[data-cy="login-button"]');
getLoginButton().click();
Это упрощает поддержку тестов при изменениях селекторов.
Data-атрибуты идеально подходят для реализации паттерна Page Object. Структура страницы в тестах может быть построена на методах, возвращающих элементы через data-атрибуты:
class LoginPage {
usernameField() {
return cy.get('[data-cy="username-input"]');
}
passwordField() {
return cy.get('[data-cy="password-input"]');
}
loginButton() {
return cy.get('[data-cy="login-button"]');
}
login(username, password) {
this.usernameField().type(username);
this.passwordField().type(password);
this.loginButton().click();
}
}
const loginPage = new LoginPage();
loginPage.login('user123', 'pass123');
Такой подход позволяет централизованно управлять селекторами и минимизировать дублирование кода.
data-cy или data-test)..header > .nav > button.Data-атрибуты позволяют работать с динамическими элементами, списками и повторяющимися компонентами:
<ul>
<li data-cy="todo-item" data-index="0">Купить молоко</li>
<li data-cy="todo-item" data-index="1">Позвонить другу</li>
</ul>
cy.get('[data-cy="todo-item"]').eq(1).should('contain.text', 'Позвонить другу');
Можно комбинировать несколько атрибутов для более точного выбора:
cy.get('[data-cy="todo-item"][data-index="0"]').click();
В сочетании с Cypress, data-атрибуты делают тесты устойчивыми к изменениям интерфейса, что критично для CI/CD:
Использование data-атрибутов превращает Cypress-тесты в долговечный инструмент проверки функциональности, позволяя сосредоточиться на логике приложения, а не на изменениях интерфейса.