У меня есть HTML похож на это:Как я могу написать лучшее выражение xpath?
<tr>
<td>
<span>
<span class = "x28w"></span>
</span>
<td>
<span>
<a>
<span>3899393</span>
</a>
</span>
</td>
</tr>
<tr>
<td>
<span>
</span>
<td>
<span>
<a>
<span>3899394</span>
</a>
</span>
</td>
</tr>
Поэтому в основном первый пролет пустым, но будет отображаться значок, если имеется подзаголовок пролет под ним с классом "x28w"
. Второй (то есть 3899393
) является номером корпуса.
Я хочу написать метод selenium в Java List<String>getCasesWithAlert()
.
Я могу сделать findElements(By.xpath("//tr"))
, прокрутить элементы, проверить, есть ли td/span/span[contains(@class,'x28w')]
для текущего tr.
Если есть, то возьмите строку, найдите дочерние элементы td, получите вторую и найдите элемент a/span, а затем получите текст. Но это немного сложно.
Есть ли какое-то выражение xpath, которое я могу использовать (например, следующий-брат или что-то еще), чтобы найти случаи, содержащие значки предупреждений (класс x28w) в одном выражении?
Спасибо. Это фактически внутри более html, поэтому вместо tr это // div [содержит (@ id, 't1 :: db') или содержит (@ id, 't2 :: db')]/table [1]/tbody [1]/tr ", но я предполагаю, что могу просто экстраполировать ваш путь, правильно? – user3257891
@ user3257891 yup, идея остается прежней, я использовал HTML, который вы предоставили для тестирования, - работал для меня. ваш реальный код HTML, если у вас возникнут трудности с применением решения. Спасибо. – alecxe
Как получить обратное? Те, у кого нет x28w? Тогда нет второго x28w. Я не могу использовать span [not содержит ... потому что не будет внутреннего промежутка. – user3257891