:: 在 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

查看教程,尤其是关于轴的教程:

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

我能做到的最短答案

:: 在 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

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

您的 XPath 表达式

总结并使用我们目前所学:

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

查找为当前节点的grandparent的元素节点。 parent 和 grandparent 节点的名称无关紧要(这就是 * 的用途)。开头没有/,所以一定是相对路径。


1其实就是一个位置路径,一种特殊的XPath表达式。另外,我遗漏了一个重要的概念:谓词。好事总是成三件,XPath 表达式带有轴、节点测试和零个或多个谓词。

2 节点测试必须是 name test(测试节点的名称)或 kind test(测试节点的种类)。在 relevant part of the XPath specification.

中查找有关节点测试的大量信息