Выбор ответа Middle Локаторы обновлено

Почему не находится кнопка по text()

Вопрос

Разметка: <button><span>Войти</span></button>. Почему //button[text()="Войти"] ничего не находит?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: text() берёт прямые текстовые узлы button, а текст лежит в span. text() выбирает текстовые узлы-дети самого элемента.

Варианты ответа

  1. XPath ищет по тексту лишь в атрибутах, для содержимого нужен CSS
  2. Нужно писать @text, а text() относится к атрибуту value
  3. text() берёт прямые текстовые узлы button, а текст лежит в spanправильный ответ
  4. Кириллица в XPath 1.0 не поддерживается без экранирования

Разбор

text() выбирает текстовые узлы-дети самого элемента. Здесь у button ребёнок span, поэтому прямого текста нет. Решение: //button[normalize-space()="Войти"] или //button[.="Войти"], где берётся строковое значение со всеми потомками. @text это атрибут, его нет. С кириллицей XPath работает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме