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

JAV*_*PER 1 selenium xpath

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

By.xpath("parent::*/parent::*")
Run Code Online (Sandbox Code Playgroud)

Mat*_*ler 5

我能管理的最短答案

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

答案越长

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

By.xpath("   parent::*/parent::*    ")
    ^                 ^             ^
Selenium            XPath        Selenium
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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

outermost-element/other/third
Run Code Online (Sandbox Code Playgroud)

浏览一个简单的文档

<root>
    <person>James Clark</person>
    <person>Steve DeRose</person>
</root>
Run Code Online (Sandbox Code Playgroud)

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

/child::root/child::person      | abbreviated syntax:     /root/person
Run Code Online (Sandbox Code Playgroud)

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

child::person                   | abbreviated syntax:     person
Run Code Online (Sandbox Code Playgroud)

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

你的XPath表达式

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

By.xpath("parent::*/parent::*")
Run Code Online (Sandbox Code Playgroud)

找到作为当前节点祖父项的元素节点.父节点和祖父节点的名称无关紧要(这就是为什么*)./一开始没有,所以它必须是相对路径.


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

2节点测试必须是名称测试(测试节点名称)或种类测试(测试节点类型).在XPath规范相关部分中查找有关节点测试的大量信息.