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 顺序谓词和组合谓词的区别_Selenium_Xpath - Fatal编程技术网

Selenium 顺序谓词和组合谓词的区别

Selenium 顺序谓词和组合谓词的区别,selenium,xpath,Selenium,Xpath,在Selenium中,我编写了一个xpath,它们都检索相同的结果 //a[@role='tab'][text()=' Assets'] //a[@role='tab' and text()=' Assets'] 这两个词的意思相同吗 第一个是谓词,这意味着它检查a[@role='tab']是否为true,然后进入[text()='Assets'] 第二个是一个只使用和运算符的函数,因此它会验证这两个运算符都是真的。在XPath中添加方括号([])时,就是在添加一个条件,所以 第一行添加2个条

在Selenium中,我编写了一个
xpath
,它们都检索相同的结果

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

这两个词的意思相同吗

第一个是谓词,这意味着它检查
a[@role='tab']
是否为true,然后进入
[text()='Assets']


第二个是一个只使用
运算符的函数,因此它会验证这两个运算符都是真的。

在XPath中添加方括号([])时,就是在添加一个条件,所以

第一行添加2个条件

与使用

通常不使用第一行,因为它可读性较差

主要是因为这种语法在其他语言中表示

见:

5带有谓词的XPath

谓词是可以为真或假的表达式

它将在[…]内附加到给定的位置路径,并将优化结果

可以将多个谓词追加到位置路径及其(!)内


在大多数情况下,
a[b][c]
的效果与
a[b和c]
完全相同。有两个例外情况需要注意:

  • 如果其中一个谓词是数字的,或者依赖于
    position()
    last()
    (我称这些位置谓词),那么它们就不等价。例如,
    a[@x][1]
    选择具有
    @x
    属性的第一个
    a
    元素,而
    a[1][@x]
    选择具有
    @x
    属性的第一个
    a
    元素(并且不选择其他属性)。相比之下,
    a[1和@x]
    将整数1转换为布尔值
    true()
    ,因此它只表示
    a[@x]

  • 如果对
    b
    c
    的评估失败并出现动态错误,则行为可能会有所不同。这里的精确规则取决于您使用的XPath版本,老实说,这些规则给实现留下了一些余地,但是如果您想确保在
    b
    为false的情况下,
    c
    不会被计算,则需要小心。(这在XPath 1.0中并不重要,因为很少有表达式抛出动态错误。)


如果你在阅读XPath时认为符号的含义与你在过去遇到的其他语言中的含义相同,那么你就让自己的生活变得非常困难。@MichaelKay没有说这不会发生,特别是如果在java代码中使用XPath,谢谢你的回答,所以简化:不要将数字与
一起使用,因为这样会ignored@user7294900,如果要将节点索引与其他谓词一起使用,请将其用作
[position()=1和@x]
,但不要将其用作
[1和@x]
@use7294900否它不会被忽略,它将被转换为布尔值。0=错误,其他一切=正确。
// return a random m-by-n matrix with values between 0 and 1
public static double[][] random(int m, int n) {