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

当通过Firebugfind相对的XPath时:它会创build类似的

  1. .//*[@id='Passwd'] ———如果我们在开始的时候不使用点,它表示什么?

  2. 只需在Xpath中添加//* – 它突出显示了各种页面元素———-它是什么意思?

以下是Gmail密码字段的XPath。 *意义是什么?

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

  • //child::input[@type='password']

这些expression式都select不同的节点集:

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

'。' 开始意味着当前处理从当前节点开始 。 '*'select当前节点下降的所有元素节点,其中@id-attribute-value等于'Passwd'。

如果我们在开始时不使用dot,它表示什么呢?

然后在整个文档中select所有元素节点的@id -attribute-value等于“Passwd”。

只需在XPath中添加// *即可突出显示各种页面元素

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

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

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

这将select从当前节点递减的所有元素节点,其中@id-attribute-value等于“Passwd”。

//子::input[@types= '密码']

这将select所有名为input子元素节点,其@type@type -values等于'password'。 child:: axis前缀可以省略,因为它是默认行为。

在w3school.com上解释select适当expression式的语法。

轴(处理中的当前点) 在另一个w3school.com页面上解释。

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

绝对vs相对XPaths( / vs。)

  • /引入绝对位置path,从文档的根部开始。
  • . 从上下文节点开始引入相对位置path。

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

  • /enameselect一个ename根元素
    • ./enameselect当前节点的所有ename子元素。
  • /*select根元素,而不考虑名称。
    • ./**select上下文节点的所有子元素,而不pipe名称如何。

后裔或自我轴( //*

  • //enameselect文档中的所有ename元素。
    • .//ename enameselect上下文节点处或下方的所有ename元素。
  • //*select文档中的所有元素,而不考虑名称。
    • .//*select所有元素,而不pipe名称,在上下文节点处或之下。

记住这些概念,这里是你的具体问题的答案…

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

XPath中的点称为“上下文项expression式” 。 如果你在expression式的开始处放一个点,就会使它具有特定的上下文。 换句话说,它将在您要调用“通过XPath查找元素”方法的节点上下文中search带有id="Passwd"的元素。

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

  1. 对于第一个问题 :这是关于上下文的。 你可以看到Syntax来知道'。','..'等等的意思。 另外,我敢打赌,你不会find比这个链接更好的解释。
  2. 第二个问题的简单答案 :您通常会find使用像td,a,li,div等html标签的节点。但'*'表示find与您的给定属性匹配的任何标签。 它主要用于确定给定的属性,但不包括元素可能随附的标签,比如假设我想要一个ID为“xyz”的所有元素的列表。

希望它有助于:)