В Cypress поиск элементов по тексту и частичному совпадению является одной из ключевых техник для построения стабильных и гибких тестов. Такие методы позволяют выбирать элементы не только по строгим селекторам, но и по содержимому, что особенно полезно при динамических интерфейсах.
contains для поиска по текстуМетод cy.contains() позволяет находить элементы на
странице по их видимому тексту. В отличие от cy.get(),
который работает только с селекторами, cy.contains() ищет
совпадение текста в DOM.
Синтаксис:
cy.contains(content)
cy.contains(selector, content)
content — текст или регулярное выражение для
поиска.selector — CSS-селектор, ограничивающий область
поиска.Пример полного текста:
cy.contains('Войти').click();
В этом примере Cypress ищет элемент с текстом точно «Войти» и выполняет клик.
Пример с селектором:
cy.contains('button', 'Отправить').click();
Здесь поиск ограничен кнопками, и клик будет произведен только по кнопке с текстом «Отправить».
Для гибкого поиска по частичному совпадению используется передача регулярного выражения вместо строки. Это позволяет учитывать различия в регистре, пробелах и динамическом содержимом текста.
Пример поиска по части текста:
cy.contains(/Вход/i).click();
i делает поиск нечувствительным к регистру./Вход/ найдет любой элемент,
содержащий слово «Вход», независимо от дополнительных символов.Пример с динамическим текстом:
cy.contains(/Пользователь: \d+/).should('exist');
Такой поиск полезен для элементов, в которых идентификатор или число генерируется динамически.
cy.get() и cy.contains()Для повышения точности часто используется комбинация
cy.get() и cy.contains(). Сначала определяется
область поиска, затем выполняется поиск по тексту внутри этой
области.
Пример:
cy.get('.menu').contains('Настройки').click();
В этом случае Cypress сначала ищет контейнер .menu, а
затем ищет внутри него элемент с текстом «Настройки». Такой подход
снижает вероятность ложных срабатываний на странице с множеством
совпадающих элементов.
invoke('text') для проверки частичного текстаИногда требуется не кликать на элемент, а проверять наличие
определенного текста. Для этого можно использовать метод
invoke('text') и цепочку утверждений
should().
Пример:
cy.get('.notification')
.invoke('text')
.should('contain', 'успешно добавлен');
Метод contain проверяет, что текст элемента включает
указанную подстроку, что является типичным способом проверки частичного
совпадения.
В сложных интерфейсах текст элементов может меняться. Использование регулярных выражений и цепочек команд позволяет создавать устойчивые тесты.
Пример:
cy.get('.user-list')
.contains(new RegExp(`^${username}`, 'i'))
.should('be.visible');
Здесь username может приходить из данных теста, и
регулярное выражение ищет элемент, текст которого начинается с заданного
имени, игнорируя регистр.
cy.contains() по умолчанию чувствительны к регистру.
Регулярные выражения позволяют контролировать этот аспект.should('exist') или
should('contain') для ожидания появления элемента.Поиск по тексту и частичному совпадению в Cypress обеспечивает
высокую гибкость при тестировании интерфейсов с динамическим содержимым.
Методы cy.contains(), использование регулярных выражений и
комбинирование с cy.get() позволяют создавать надежные
тесты, которые остаются устойчивыми к изменениям разметки и текста.