在Selenium中,我写了xpath
,他们两个都检索到相同的结果。
//a[@role='tab'][text()=' Assets']
//a[@role='tab' and text()=' Assets']
它们是否具有相同的含义?
答案 0 :(得分:2)
在大多数情况下,a[b][c]
与a[b and c]
具有完全相同的效果。有两个例外需要注意:
如果谓词是数字或对position()
或last()
有依赖性(我称这些位置谓词),则它们不是等效的。例如,a[@x][1]
选择具有a
属性的第一个@x
元素,而a[1][@x]
选择具有a
的第一个@x
元素属性(否则不选择任何内容)。相比之下,a[1 and @x]
将整数1转换为布尔值true()
,因此它仅表示a[@x]
。
如果对b
或c
的评估由于动态错误而失败,则行为可能有所不同。这里的确切规则取决于您使用的XPath版本,并且老实说,这些规则会给实现留有余地,但是如果要确保在b
为假的情况下,则需要格外小心, c
未评估。 (这在XPath 1.0中几乎没有关系,因为很少有表达式会引发动态错误。)
答案 1 :(得分:1)
当您在XPath中添加方括号([])时,您正在添加条件,因此
第一行添加2个条件
产生与使用and
添加条件相似的结果
通常您不使用第一行,因为它的可读性较差
主要是因为此语法用其他语言表示Matrix
// return a random m-by-n matrix with values between 0 and 1 public static double[][] random(int m, int n) {
请参见tutorial:
5个具有谓词的 XPaths
谓词是可以为真或为假的表达式
它会在[...]内附加到给定的位置路径,并将优化结果
一个以上谓词可以附加到位置路径中(!)并在其中!
答案 2 :(得分:0)
第一个是谓词,这意味着它检查a[@role='tab']
是否为真,然后进行到[text()=' Assets']
第二个是只使用and
运算符的,因此它验证两个都是正确的。