::的确切含义是什么?除了父母之外,还有什么不同的东西我们可以使用?
By.xpath("parent::*/parent::*")
Run Code Online (Sandbox Code Playgroud)
:: 在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中,::它本身并不意味着什么,只有在有意义时才有意义
例如,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规范的相关部分中查找有关节点测试的大量信息.
| 归档时间: |
|
| 查看次数: |
2180 次 |
| 最近记录: |