在硒中::的含义是什么?

时间:2015-01-01 19:03:43

标签: selenium xpath

::的确切含义是什么? 除了父母之外,我们还可以使用哪些不同的东西?

By.xpath("parent::*/parent::*")

2 个答案:

答案 0 :(得分:5)

我能管理的最短答案

::将轴名称与XPath表达式中的节点测试分开。

答案越长

在Selenium"中询问" ::的含义没有多大意义,因为它不是Selenium的特征。它属于XPath,它本身就是一个W3C规范,用于导航XML或XHTML文档。

By.xpath("   parent::*/parent::*    ")
    ^                 ^             ^
Selenium            XPath        Selenium

Selenium恰好将XPath嵌入到他们的Web应用程序框架中(这是一件好事!)。

所以,我已经冒昧地回答了这个问题: XPath中::的含义是什么?

XPath中::的含义

在XPath中,::并不代表任何内容,只有在有

时才有意义
  • 左侧有效的XPath轴标识符
  • 右侧有效的节点测试

例如,parent::*是一个有效的XPath表达式 1 。这里,parent是XPath轴名称,*是节点测试 2 - ::标记从轴到节点测试的转换。其他可能的轴是

ancestor              following-sibling
ancestor-or-self      namespace
attribute             parent
child                 preceding
descendant            preceding-sibling
descendant-or-self    self
following

当然,这些不只是名称,它们具有非常明确的语义维度:每个都定义了一种导航XML文档的独特方式(或者更确切地说,是这种文档的树状表示)。在大多数情况下,它们的含义是直截了当的,例如,following::标识了"跟随"当前的背景。

这些轴和节点测试的元组(或三元组,也计算谓词)可以被链接在一起"使用二进制/运算符来形成具有多个步骤的路径:

outermost-element/other/third

导航简单文档

<root>
    <person>James Clark</person>
    <person>Steve DeRose</person>
</root>

当然,导航可能在很大程度上取决于您当前的行踪。有绝对路径表达式和相对路径表达式。绝对路径表达式的一个例子是

/child::root/child::person      | abbreviated syntax:     /root/person

如您所见,绝对路径表达式的开头有/。它代表文档节点(树的最外面的节点,它不同于树的最外面的元素节点)。相对路径表达式看起来像

child::person                   | abbreviated syntax:     person

如果当前上下文person元素节点,则相对路径表达式只会找到root元素节点。否则,它将无法找到任何东西。

您的XPath表达式

总结和使用到目前为止我们学到的东西:

By.xpath("parent::*/parent::*")

找到作为当前节点祖父项的元素节点。父节点和祖父节点的名称无关紧要(*的用途是什么)。 /,所以必须是相对路径。


1 实际上,它是一个位置路径,一种特殊的XPath表达式。另外,我遗漏了一个重要的概念:谓词。好东西总是三分之一,XPath表达式带有轴,节点测试以及零或多个谓词。

2 节点测试必须是名称测试(测试节点名称)或种类测试(测试类型节点)。在relevant part of the XPath specification中找到有关节点测试的大量信息。

答案 1 :(得分:0)

这是xpath语法,您可以执行以下其他操作:

child::*            Selects all element children of  current node
attribute::*        Selects all attributes of  current node
child::text()   Selects all text node children of  current node
child::node()   Selects all children of current node

检查教程,特别是关于轴:

http://www.w3schools.com/xpath/xpath_axes.asp