::的确切含义是什么? 除了父母之外,我们还可以使用哪些不同的东西?
By.xpath("parent::*/parent::*")
答案 0 :(得分:5)
::
将轴名称与XPath表达式中的节点测试分开。
在Selenium"中询问" ::
的含义没有多大意义,因为它不是Selenium的特征。它属于XPath,它本身就是一个W3C规范,用于导航XML或XHTML文档。
By.xpath(" parent::*/parent::* ")
^ ^ ^
Selenium XPath Selenium
Selenium恰好将XPath嵌入到他们的Web应用程序框架中(这是一件好事!)。
所以,我已经冒昧地回答了这个问题: 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
检查教程,特别是关于轴: