顺序谓词和组合谓词之间的区别

时间:2018-11-01 08:52:19

标签: selenium xpath

在Selenium中,我写了xpath,他们两个都检索到相同的结果。

//a[@role='tab'][text()=' Assets']
//a[@role='tab' and text()=' Assets']

它们是否具有相同的含义?

3 个答案:

答案 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]

  • 如果对bc的评估由于动态错误而失败,则行为可能有所不同。这里的确切规则取决于您使用的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运算符的,因此它验证两个都是正确的。

相关问题