XPath частичный атрибут известен
Я знаю частичное значение атрибута в документе,но не все. Есть ли символ, который я могу использовать для представления какой-либо ценности? Например, значением метки для ввода является "A. Choice 1". Я знаю, что он говорит "выбор 1", но не будет ли он говорить " A "или" B "перед"выбором 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", за исключением того, что A находится перед ним в HTML:
//td[label="Choice 1"]/input
Я не знаю, будет ли A в HTML A, B или C и т. д. Но я знаю, что правильный ввод всегда будет иметь текст выбора 1 рядом с ним. Как сказать, чтобы выбрать его, если метка содержит выбор 1, а не равных к выбор 1?
2 ответов
ваше выражение XPath должно выглядеть так:
//td[contains(@label, 'Choice 1')]/input
выделить все td
элементы, которые имеют метку, содержащую Choice 1
и выберите input
элементы внутри td
элементы.
редактировать: комментарий Томалака правильно предлагает улучшение, чтобы предотвратить матч против " выбора 11 "(или "выбора 12345",...).
нашел решение Рональда, пытаясь найти способ проверить, имеет ли узел атрибут "align", который не пуст, или атрибут "style", который содержит текстовое значение "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!='']