次のようなテーブルがあります。
<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
avalue
は 0、つまりゼロ エラーです。
ただし、エラーのある行を考慮する必要がありますが、エラーがゼロの「最後の」行 (領域) を見てください。
この場合、
//table//tr//td[contains(text(),'school')]/following::td
は、23 個のエラーがある最初の行を誤って選択します。
使ってみたtr[last()]
-
//table//tr[last()]//td[contains(text(),'school')]/following::td[2]
しかし問題は、これが学生用の最後のテーブル行を選択することです。学校用の最後のテーブル行が必要です (実際には、すべての行の最後のテーブル行の 2 番目です)。
私も試しました:
//table//td[contains(text(),'school')][last()]/following::td[2]
しかし、それは機能しませんでした (まだ「最初の」学校の行が選択されています)。
1 つの学校の行、2 つの学校の行、および 2 つ以上の学校の行を説明できるようにする必要があるため、それを処理するのに十分な動的な式が必要です。