Xpath выбирает входное радио на основе следующего текста

У меня есть этот HTML-код:

<input type="radio" class="inputs-highlight" name="country"><h2>Russia</h2>
<input type="radio" class="inputs-highlight" name="country"><h2>USA</h2>
<input type="radio" class="inputs-highlight" name="country"><h2>Other</h2>

Я пытаюсь выбрать входное радио, где текст равен «Другое».

Я пробовал с:

 .//input[./@type = 'radio']/following::*[text() = "Other"]

Но это возвращает элемент H2, а не элемент Input Radio.

И с этим:

 //input[@type='radio' and following-sibling::text() = 'Other']

нет результата.

Спасибо за помощь заранее.


person LeMoussel    schedule 31.05.2014    source источник


Ответы (2)


Вы должны выбрать первое вхождение:

//input[@type="radio"][following-sibling::*[1]/text()='Other']

поскольку верно, что существует элемент, содержащий Other после выбранного input. Вышеприведенное выражение выбирает только те входные данные, где следующий одноуровневый элемент содержит Other.

person helderdarocha    schedule 31.05.2014

Решение от @helderdarocha работает только потому, что текст поиска находится в тегах «h2». Более гибким решением, которое не заботится о том, как «упакован» следующий текст, было бы:

//input[@type='radio'][following-sibling::node()[position() = 1 and normalize-space(.) = 'Other']]

С помощью: http://jkotests.wordpress.com/2013/02/08/getting-a-checkbox-by-its-adjacent-text-node/

person cdanzmann    schedule 17.10.2014