selenium xpath-如何选择具有特定内容的表的最后一行?
我有一张这样的桌子:selenium xpath-如何选择具有特定内容的表的最后一行?,xpath,selenium,Xpath,Selenium,我有一张这样的桌子: <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>
<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>
以及值
为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]
但这并没有起作用(它仍然选择“第一”学校行)
我需要能够解释一个学校行、两个学校行和两个以上的学校行,因此我需要表达式具有足够的动态性来处理这个问题。使用您的最终XPath,它对我有效,并且确实选择了最后一个“学校”。所以我会去问你正在使用的所有东西的版本,浏览器等等 此外,有时在使用XPath时,位置索引器可能会有点麻烦,那么
(//td[contains(text(),'School')])[last()]/following::td[2]
您正在搜索包含文本“school”的元素,但标记包含文本“school”,XPath区分大小写 您可以通过将大写字母转换为小写字母来解决此问题,这将使您的XPath如下所示:
//td[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'school')][last()]/following::td[2]
*注意*
我没有使用XPath2 lower-case()函数,因为它不能在所有浏览器中工作
*编辑*
为新标记更新了不区分大小写的xpath:
//tr[td[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'school')]][last()]/td[2]
//tr[td[contains(., 'school')]][last()]/td[2]
或者,不区分大小写的更简化版本是:
//tr[td[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'school')]][last()]/td[2]
//tr[td[contains(., 'school')]][last()]/td[2]
(.是text()的简写,如果愿意,可以交换)
你也可能逃脱惩罚
//tr[td[.='school']][last()]/td[2]
奇怪的是,你所拥有的应该是有用的。您使用的是哪个版本的selenium,哪个API?@Ardesco基本上是正确的。根据重新编辑的示例,请尝试以下内容:
(//tr[td[.='school')]])[last()]/following::tr/td[2]
。我想知道问题是否出在IDE上。你能在Firebug中运行这个XPath吗?寻找另一个名为firepath的插件。它与firebug集成,非常有用。