将整数放在xpath的引号中

时间:2019-02-19 19:07:50

标签: java xpath

我正在调试其他人的Selenium代码。 他们的xpath类似td['6']。这是失败的。我使用了直觉并将其更改为td[6],从而解决了该问题。但是,td['6']并没有给出我认为的错误。它找到了一个元素,但与没有引号的元素完全不同。

因此,我不得不思考,将数字加上引号,例如td['6']到底意味着什么?

2 个答案:

答案 0 :(得分:2)

XPath 1.0规范指出,“ td”是(例如子级)和 node-test (标记名称TD),方括号内的所有内容都是predicate-expression,其被评估为布尔值(是或否),或者在特殊情况下,其数字被评估为节点集的位置过滤器

  

如果结果不是数字,则结果将被转换,就像通过调用布尔函数一样。因此,位置路径para [3]等同于para [position()= 3]。

情况1:数字作为谓词

td[6]选择第6个子表数据元素,因为数字6被评估为谓词position()=6的简写。

情况2:用引号引起来的字符串作为谓词

td['6']选择每个子表数据元素,因为字符串'6'不为空或长度为非零,因此求值为true(请参见boolean-conversion) 。因此,TD元素的节点集不会进一步过滤(因为谓词始终为真)。

我将研究并提供在线样本 ..

答案 1 :(得分:1)

td[predicate]的意思是:

  

返回谓词为td的第一个true节点。

每个非空字符串都返回true,因此td['6']将选择DOM中找到的第一个td节点。

td[6]td[position()=6]表达式的简写,表示:

  

返回td,它是td类型的第六个孩子。”