Поиск элементов является одной из ключевых задач при автоматизированном тестировании. Cypress предоставляет гибкие и мощные инструменты для нахождения элементов DOM, позволяя взаимодействовать с ними, проверять их свойства и состояние. Эффективный поиск элементов снижает вероятность нестабильных тестов и упрощает поддержку автотестов.
Cypress использует селекторы, основанные на CSS, тексте, атрибутах и XPath (через сторонние плагины). Основные методы поиска элементов:
cy.get(selector) – выбор элементов по CSS-селектору.
Возвращает один или несколько элементов, соответствующих селектору.
cy.get('.btn-primary').click();cy.contains(content) – поиск элемента по текстовому
содержимому.
cy.contains('Submit').click();cy.find(selector) – поиск элементов внутри уже
найденного элемента.
cy.get('.form').find('input[name="email"]').type('test@example.com');cy.get(selector).within(callback) – ограничение
поиска внутри конкретного блока DOM.
cy.get('.modal').within(() => {
cy.get('input').type('Hello');
cy.contains('Save').click();
});Для стабильности тестов рекомендуется использовать
data-атрибуты (data-cy,
data-test, data-testid). Они позволяют
изолировать тесты от изменений внешнего вида страницы.
cy.get('[data-cy=login-button]').click();
cy.get('[data-test="user-email"]').type('user@example.com');
Cypress поддерживает сложные CSS-селекторы, что позволяет точно идентифицировать элементы:
cy.get('.nav > ul > li.active > a').should('have.text', 'Home');
Можно комбинировать атрибуты и псевдоклассы:
cy.get('input[type="checkbox"]:checked[data-cy=terms]').should('exist');
Cypress автоматически повторяет поиск элементов до заданного таймаута (по умолчанию 4 секунды), что упрощает работу с динамическим контентом.
cy.get('.loader', { timeout: 10000 }).should('not.exist');
cy.get('.item').should('have.length.greaterThan', 0);
Методы .should() и .then() позволяют
контролировать состояние найденных элементов и выполнять действия после
их появления.
Метод cy.contains() подходит для кнопок, ссылок и других
элементов с текстовым содержимым. Можно уточнить тип элемента:
cy.contains('button', 'Submit').click();
cy.contains('h1', 'Welcome');
Cypress предоставляет методы для перемещения по DOM-иерархии:
parent() – получение родительского элементаchildren() – получение прямых дочерних элементовsiblings() – получение соседних элементовclosest(selector) – поиск ближайшего родителя,
соответствующего селекторуcy.get('.child').parent().should('have.class', 'container');
cy.get('.item').siblings().should('have.length', 3);
Метод filter() позволяет уточнять выборку:
cy.get('.list li').filter('.active').should('have.length', 1);
Метод first() и last() помогают работать с
крайними элементами:
cy.get('.carousel img').first().should('be.visible');
cy.get('.carousel img').last().should('have.attr', 'alt', 'Last Image');
cy.get,
cy.contains) перед чистым
document.querySelector, чтобы сохранить преимущества
автоматического ожидания.Эффективный поиск элементов позволяет создавать надежные тесты, легко поддерживать их при изменениях интерфейса и минимизировать ложные ошибки при запуске автотестов.