Xpath: как выбрать опцию на основе свойства текста, а не значения? - PullRequest
22 голосов
/ 11 октября 2009

рассмотрим оба типа:

<select name="garden">
    <option>Flowers</option>
    <option selected="selected">Shrubs</option>
    <option>Trees</option>
    <option selected="selected">Bushes</option>
    <option>Grass</option>
    <option>Dirt</option>
</select>

Является ли @val для фактического указания атрибута value=""?

Является ли @value для указания значения innerText?

например, что произойдет, если <option> не содержит никакого свойства value="". как бы ты выбрал его тогда?

select/option[@value = "Grass"] 

Xpath автоматически игнорирует пробелы в описанном выше случае? Это должно быть урезано?

EDIT:

для выбора нескольких вариантов этого будет достаточно?

select/option[normalize-space(text())="Grass" or normalize-space(text())="Trees"]

Ответы [ 2 ]

27 голосов
/ 11 октября 2009

Для выбора по текстовому значению вы можете использовать функцию text(). И нормализовать пробелы требуется, потому что они не удаляются по умолчанию. Вот пример:

select/option[normalize-space(text())="Grass"]

@value - значение атрибута "значение"

@val - значение атрибута "val"

normalize-space() - функция возвращает строку аргумента с пробелами, нормализованными путем удаления начальных и конечных пробелов и замены последовательностей пробельных символов одним пробелом

12 голосов
/ 11 октября 2009

Хорошо, если пробелы не проблема:

/select/option[.='Grass']

Хотя мне нужно проверить пробелы. Вы всегда можете нормализовать:

/select/option[normalize-space(.)='Grass']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...