:: 在 selenium 中是什么意思
What is the meaning of :: in selenium
:: 的确切含义是什么?
除了parent,我们还能用到哪些不同的东西?
By.xpath("parent::*/parent::*")
这是 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
查看教程,尤其是关于轴的教程:
我能做到的最短答案
::
在 XPath 表达式中将轴名称与节点测试分开。
较长的答案
问“::
in 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
当然,这些不仅仅是名称,它们具有非常 clear-cut 的语义维度:它们中的每一个都定义了一种独特的方式来导航 XML 文档(或者更确切地说, tree-like 此类文档的表示)。在大多数情况下,它们的含义很简单,例如,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
如果当前context是root
元素节点,相对路径表达式只会找到person
元素节点。否则,它将无法定位任何东西。
您的 XPath 表达式
总结并使用我们目前所学:
By.xpath("parent::*/parent::*")
查找为当前节点的grandparent的元素节点。 parent 和 grandparent 节点的名称无关紧要(这就是 *
的用途)。开头没有/
,所以一定是相对路径。
1其实就是一个位置路径,一种特殊的XPath表达式。另外,我遗漏了一个重要的概念:谓词。好事总是成三件,XPath 表达式带有轴、节点测试和零个或多个谓词。
2 节点测试必须是 name test(测试节点的名称)或 kind test(测试节点的种类)。在 relevant part of the XPath specification.
中查找有关节点测试的大量信息
:: 的确切含义是什么? 除了parent,我们还能用到哪些不同的东西?
By.xpath("parent::*/parent::*")
这是 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
查看教程,尤其是关于轴的教程:
我能做到的最短答案
::
在 XPath 表达式中将轴名称与节点测试分开。
较长的答案
问“::
in 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
当然,这些不仅仅是名称,它们具有非常 clear-cut 的语义维度:它们中的每一个都定义了一种独特的方式来导航 XML 文档(或者更确切地说, tree-like 此类文档的表示)。在大多数情况下,它们的含义很简单,例如,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
如果当前context是root
元素节点,相对路径表达式只会找到person
元素节点。否则,它将无法定位任何东西。
您的 XPath 表达式
总结并使用我们目前所学:
By.xpath("parent::*/parent::*")
查找为当前节点的grandparent的元素节点。 parent 和 grandparent 节点的名称无关紧要(这就是 *
的用途)。开头没有/
,所以一定是相对路径。
1其实就是一个位置路径,一种特殊的XPath表达式。另外,我遗漏了一个重要的概念:谓词。好事总是成三件,XPath 表达式带有轴、节点测试和零个或多个谓词。
2 节点测试必须是 name test(测试节点的名称)或 kind test(测试节点的种类)。在 relevant part of the XPath specification.
中查找有关节点测试的大量信息