У меня есть таблица вроде этого:selenium xpath - как выбрать последнюю строку таблицы с определенным контентом?
<table>
<th>
<td>Area</td><td># of errors</td>
</th>
<tr><td>school</td><td>23</td></tr>
<tr><td>student</td><td>0</td></tr>
<tr><td>school</td><td>17</td></tr>
<tr><td>student</td><td>0</td></tr>
</table>
Как я могу выбрать последнюю строку для области 'Школ.
До недавнего времени я использовал assert_text с
//table//tr//td[contains(text(),'school')]/following::td
и value
из 0, то есть нулевые погрешности.
Однако теперь мне нужно учесть строки, которые имеют ошибки, но все равно посмотрите на «последнюю» строку - для области - с нулевыми ошибками.
Для этого случая, используя
//table//tr//td[contains(text(),'school')]/following::td
неправильно выбирает первый ряд, который имеет 23 ошибки.
Я попытался с помощью tr[last()]
-
//table//tr[last()]//td[contains(text(),'school')]/following::td[2]
но проблема в том, что выбрать последнюю строку таблицы - что для студентов. Я хочу, чтобы последняя строка таблицы была для школ (это фактически следующая строка из последней строки из всех строк).
Я также попытался:
//table//td[contains(text(),'school')][last()]/following::td[2]
, но это не работает (он все еще выбирает «первый» школьный ряд).
Мне нужно учесть только одну школьную строку, две школьные строки и более 2 школьных рядов, поэтому мне нужно, чтобы выражение было достаточно динамичным, чтобы справиться с этим.
Странно, что вы должны работать тогда. Какую версию селена вы используете, и какой API? – Ardesco
@ Ардеско в принципе прав. В свете повторного отредактированного примера попробуйте следующее: '(// tr [td [. = 'School']]]) [last()]/follow :: tr/td [2]'. –
Или еще один Росс тоже будет работать :) – Ardesco