XPath中的.//和// *有什么区别?

时间:2016-02-24 15:51:29

标签: xml selenium xpath selenium-webdriver automated-tests

通过Firebug找到相对的XPath:它创建类似

  1. sort -n -k 1.10,1.23 filename ---------如果我们在开始时不使用dot表示该怎么办?

  2. 只需在Xpath中添加.//*[@id='Passwd'] - 它突出了---各种页面元素----------它意味着什么?

  3. 以下是Gmail密码字段的XPath。 //*的重要性是什么?

    • *

    • .//*[@id='Passwd']

4 个答案:

答案 0 :(得分:30)

这里有几个不同的关键XPath概念......

绝对与相对XPath(/ vs .

  • /引入绝对位置路径,从文档的根开始。
  • .引入了一个相对位置路径,从上下文节点开始。

命名元素与任何元素(ename vs *

  • /ename选择ename根元素
    • ./ename选择当前节点的所有ename子元素。
  • /*选择根元素,无论名称如何。
    • ./**选择上下文节点的所有子元素,无论名称如何。

后代或自我轴(//*

  • //ename选择文档中的所有ename元素。
    • .//ename选择上下文节点或其下的所有ename元素。
  • //*选择文档中的所有元素,无论名称如何。
    • .//*选择上下文节点或其下的所有元素,无论名称如何。

考虑到这些概念,以下是您具体问题的答案......

  • .//*[@id='Passwd']表示选择所有元素 当前上下文节点,其id属性值等于 'Passwd'
  • //child::input[@type='password']可以简化为 //input[@type='password']并且意味着选择所有input元素 在type属性值等于'password'的文档中。

答案 1 :(得分:20)

这些表达式都选择不同的节点集:

  

.//* [@ ID ='的passwd']

'。'在开头意味着当前处理从当前节点开始。 ' *'选择从当前节点下降的所有元素节点,@id - 属性值等于' Passwd'。

  

如果我们在开始时不使用dot表示该怎么办?

然后,您选择@id - 属性值等于' Passwd'的所有元素节点。在整个文档中。

  

只需在XPath中添加// * - 它会突出显示---各种页面元素

这将选择整个文档中的所有元素节点。

  

下面提到:Gmail密码字段的XPatht是真的有什么意义*?

.//*[@id='Passwd']

这将选择从当前节点下降的所有元素节点@id - 属性值等于' Passwd'。

  

//子::输入[@type ='密码']

这将选择名为input的所有子元素节点@type - 属性值等于'密码'。可以省略child::轴前缀,因为它是默认行为。

here at w3school.com解释了选择适当表达式的语法。

并解释了Axes(处理中的当前点)here at another w3school.com page

答案 2 :(得分:2)

XPath中的点称为“上下文项表达式”。如果在表达式的开头加上一个点,它将使其特定于上下文。换句话说,它将在您通过XPath调用“find元素”方法的节点的上下文中使用id="Passwd"搜索元素。

*中的.//*[@id='Passwd']有助于将任何元素id='Passwd'匹配。

答案 3 :(得分:1)

  1. 第一个问题:关于上下文的全部内容。您可以看到Syntax了解'。',' ..'等等意味着。另外,我打赌你找不到比This Link更好的解释。
  2. 第二个问题的简化答案:您通常会使用hd标签找到节点,如td,a,li,div等。但是' *'意思是,找到符合您给定财产的任何标签。当你确定一个给定的属性而不是关于该元素可能带有的那个标签时,它主要用于,比如假设我想要一个ID为' xyz'的所有元素的列表。无论是任何标签。
  3. 希望有所帮助:)