Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
selenium xpath-如何选择具有特定内容的表的最后一行?_Xpath_Selenium - Fatal编程技术网

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集成,非常有用。