Как найти элемент по части текста, например «Привет» в строке «Привет, Геннадий»?

Пример XPath для конкретного span с поиском подстроки, нормализацией пробелов и пояснением различий между элементом, текстом и отдельным словом.

Короткий ответ

Что ответить на собеседовании

Для элемента span подойдет //span[contains(normalize-space(.), 'Привет')]. Если совпадений несколько, ограничьте контейнер или добавьте устойчивый атрибут. Такой XPath выбирает элемент, содержащий подстроку, а не отдельный фрагмент текстового узла. Contains не проверяет границы слова: совпадет и «Приветствие».

Подробный разбор

Ответ с пояснениями

Сначала нужно посмотреть реальную разметку: слово само по себе не обязательно является отдельным элементом. Для учебного примера предположим такой HTML:

<span data-testid="greeting">Привет, Геннадий</span>

Конкретный элемент можно найти XPath-выражением:

//span[@data-testid='greeting' and contains(normalize-space(.), 'Привет')]

Если устойчивого атрибута нет и подходящий span единственный в нужной области, достаточно //span[contains(normalize-space(.), 'Привет')]. Название тега в обоих случаях должно соответствовать реальной странице; data-testid здесь тоже является условием примера, а не фактом об исходном приложении.

contains проверяет наличие подстроки. normalize-space убирает начальные и конечные пробельные символы и сводит их последовательности к одному пробелу по правилам XPath. Точка обозначает текущий элемент; при преобразовании в строку учитывается текст его потомков. Семантика функций описана в спецификации XPath 1.0.

Это локатор элемента, а не выделение букв «Привет» внутри текстового узла. Он также не проверяет отдельное слово: строка «Приветствие» подойдет. Если важны границы слова, нужно отдельно определить правила для пунктуации и пробелов и выбрать соответствующую проверку текста.

Не начинайте с поиска по всем элементам документа: текст потомков может привести к совпадениям с крупными контейнерами и предками. Ограничивайте поиск конкретным компонентом и проверяйте число найденных элементов. В автотесте также разделяйте нахождение элемента, ожидание его нужного состояния и утверждение о тексте: успешный поиск сам по себе не подтверждает правильность всего сообщения.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку