我正在调试其他人的Selenium代码。
他们的xpath类似td['6']
。这是失败的。我使用了直觉并将其更改为td[6]
,从而解决了该问题。但是,td['6']
并没有给出我认为的错误。它找到了一个元素,但与没有引号的元素完全不同。
因此,我不得不思考,将数字加上引号,例如td['6']
到底意味着什么?
答案 0 :(得分:2)
XPath 1.0规范指出,“ td”是轴(例如子级)和 node-test (标记名称TD),方括号内的所有内容都是predicate-expression,其被评估为布尔值(是或否),或者在特殊情况下,其数字被评估为节点集的位置过滤器:>
如果结果不是数字,则结果将被转换,就像通过调用布尔函数一样。因此,位置路径para [3]等同于para [position()= 3]。
td[6]
选择第6个子表数据元素,因为数字6
被评估为谓词position()=6
的简写。
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
类型的第六个孩子。”