Часть XPath атрибута известна - PullRequest
17 голосов
/ 14 мая 2009

Я знаю частичное значение атрибута в документе, но не все. Есть ли символ, который я могу использовать, чтобы представить любое значение? Например, значение метки для входа - «A. Выбор 1». Я знаю, что это говорит «Вариант 1», но не то, будет ли оно говорить «А.» или «Б.» перед «Вариант 1». Ниже приведен соответствующий HTML. Существуют и другие атрибуты для ввода и метки, но они не совпадают при каждом отображении страницы, поэтому я не могу использовать их в качестве ссылок:

<tr>
<td><input type="checkbox" /><label>A. Choice 1</label></td>
</tr><tr>
    <td><input type="checkbox" /><label>B. Choice 2</label></td>
</tr><tr>
<td><input type="checkbox" /><label>C. Choice 3</label></td>
</tr><tr>
     <td><input type="checkbox" /><label>D. Choice 4</label></td>
</tr>

Это выражение XPath , которое я использую для выбора ввода рядом с меткой со значением «Вариант 1», за исключением того, что в HTML перед ним стоит A:

//td[label="Choice 1"]/input

Я не знаю, будет ли A в HTML буквой A, B или C и т. Д. Но я знаю, что правильный ввод всегда будет содержать текст Варианта 1 рядом с ним. Как сказать выбрать его, если метка содержит Вариант 1, в отличие от , равного Вариант 1?

Ответы [ 2 ]

35 голосов
/ 14 мая 2009

Ваше выражение XPath должно выглядеть так:

//td[contains(@label, 'Choice 1')]/input

Вы выбираете все элементы td с меткой, содержащей Choice 1, а затем выбираете элементы input внутри этих элементов td.

РЕДАКТИРОВАТЬ : Комментарий Томалака правильно предлагает улучшение, предотвращающее совпадение с «Выбором 11» (или «Выбором 12345», ...).

5 голосов
/ 17 августа 2011

Нашел решение Рональда, пытаясь найти способ проверить, есть ли у узла атрибут «выравнивание», который не является пустым, или атрибут «стиль», содержащий текстовое значение «text-align». Это «узлы», о которых идет речь:

<node> 
  <p>This is left-aligned.</p> 
  <div align="left" >This is aligned LEFT using HTML attribute.</div> 
  <p style="text-align: center;" >This is centered using CSS style attribute.</p> 
  <div align="center" >This is CENTERED.</div> 
  <p style="text-align: right;" >This is right-aligned.</p> 
</this>

Это выражение xpath сработало - благодаря ответу Рональда, который указал мне правильное направление:

//*[contains(@style, 'align') or @align!='']
...