当前位置:网站首页>UI自动化定位利器-xpath实战
UI自动化定位利器-xpath实战
2022-06-23 03:53:00 【小梧敲代码】
简介
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快地被开发者采用来当作小型查询语言。
语法
选取节点 XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。
下面列出了最有用的路径表达式:
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。
实例:
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
选取未知节点
XPath 通配符可用来选取未知的 XML 元素。
实例:
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
选取若干路径
通过在路径表达式中使用“|”运算符,您可以选取若干个路径。
实例:
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

表达式
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。路径表达式是从一个XML节点(当前的上下文节点)到另一个节点、或一组节点的书面步骤顺序。
这些步骤以“/”字符分开,每一步有三个构成成分:
轴描述(用最直接的方式接近目标节点)
节点测试(用于筛选节点位置和名称)
节点描述(用于筛选节点的属性和子节点特征)
一般情况下,我们使用简写后的语法。虽然完整的轴描述是一种更加贴近人类语言,利用自然语言的单词和语法来书写的描述方式,但是相比之下也更加啰嗦。
运算符
下面列出了可用在 XPath 表达式中的运算符:
标准函数
XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值,日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。
使用:
XPath 是 XSLT 标准中的主要元素。如果没有 XPath 方面的知识,您就无法创建 XSLT 文档。
XQuery 和 XPointer 均构建于 XPath 表达式之上。XQuery 1.0 和 XPath 2.0 共享相同的数据模型,并支持相同的函数和运算符。
标准:
XPath 于 1999年11月16日 成为 W3C 标准。
XPath 被设计供 XSLT、XPointer 以及其他 XML 解析软件使用。
轴定义
轴可定义相对于当前节点的节点集。(以当前节点为轴心)
位置路径表达式
位置路径可以是绝对的,也可以是相对的。
绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:
绝对位置路径:/step/step/…
相对位置路径:step/step/…
每个步均根据当前节点集之中的节点来进行计算
每个步均根据当前节点集之中的节点来进行计算
步(step)包括:
轴(axis)
定义所选节点与当前节点之间的树关系
节点测试(node-test)
识别某个轴内部的节点
零个或者更多谓语(predicate)
更深入地提炼所选的节点集
步的语法:轴名称::节点测试[谓语]
实例:
节点关系
节点(Node)是XPath 的术语。
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
父(Parent)
每个元素以及属性都有一个父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
子(Children)
元素节点可有零个、一个或多个子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
同胞(Sibling)(兄弟)
拥有相同的父的节点
在下面的例子中,title、author、year 以及 price 元素都是同胞:
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
先辈(Ancestor)
某节点的父、父的父,等等。
在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:
<bookstore>
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
后代(Descendant)
某个节点的子,子的子
在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:
<bookstore>
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
存取函数
fn:node-name(node) 返回参数节点的节点名称。
fn:nilled(node) 返回是否拒绝参数节点的布尔值。
fn:data(item.item,…) 接受项目序列,并返回原子值序列。
fn:base-uri()
fn:base-uri(node)
返回当前节点或指定节点的 base-uri 属性的值。
fn:document-uri(node)
返回指定节点的 document-uri 属性的值。
语言升级
在 W3C 建议下,XPath 1.0于 1999年 11月16日 发表。XPath 2.0 正在W3C审核过程的最终阶段。XPath 2.0表达了XPath语言在大小与能力上显著的增加。
最值得一提的改变是XPath 2.0有了更丰富的型别系统;XPath 2.0支持不可分割型态,如在 XML Schema 内建型态定义一样,并且也可自纲要(schema)导入用户自定型别。每个值都是一个序列(一个单一不可分割值或节点都被视为长度一的序列)。XPath 1.0节点组被节点序列取代,它可以是任何顺序。
为了支持更丰富的型别组,XPath 2.0提供相当延展的函式与操作子群。
XPath 2.0实际上是 XQuery 1.0 的子集合。它提供了一个for表达式。该式是XQuery里“FLWOR”表达式的缩减版。利用列出XQuery省去的部分来描述该语言是可能的。主要范例是查询前导语(query prolog)、元素和属性建构式、“FLWOR”语法的余项式、以及typeswitch表达式。
实例
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year> <price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author> <year>2003</year>
<price>39.95</price>
</book>
</bookstore>
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
| 点击文末小卡片领取 |
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
自学推荐B站视频:
零基础转行软件测试:25天从零基础转行到入职软件测试岗,今天学完,明天就业。【包括功能/接口/自动化/python自动化测试/性能/测试开发】
边栏推荐
- 2022 simulated examination question bank and answers for safety management personnel of metal and nonmetal mines (open pit mines)
- Non return to zero code NRZ
- Icer Skill 02makefile script Running VCS Simulation
- Notepad++ find replace group replace retain
- Apache atlas quick start
- apache atlas 快速入门
- 395. redundant path
- Three operation directions of integral mall
- The solution to prompt "this list creation could be rewritten as a list literal" when adding elements to the list using the append() method in pychart
- Thinkphp6 solving jump problems
猜你喜欢

云原生数据库如荼如火,未来可期

Abnova actn4 purified rabbit polyclonal antibody instructions

【论文阅读】Semi-Supervised Learning with Ladder Networks

Dsp7 environment

实战| 记一次借Viper来多重内网渗透

Shadertoy basic teaching 01. Circle drawing (explanation of smoothstep() function)
![[OFDM communication] simulation of OFDM multi-user resource allocation based on MATLAB [including Matlab source code 1902]](/img/ad/91a81c7f413484a86adcff8fc84e3b.jpg)
[OFDM communication] simulation of OFDM multi-user resource allocation based on MATLAB [including Matlab source code 1902]

20000 words + 20 pictures | details of nine data types and application scenarios of redis

dolphinscheduler海豚调度升级代码改造-UpgradeDolphinScheduler

Emergency response HW review
随机推荐
Current relay hdl-a/1-110vdc-1
QT elidedtext only works for Chinese conformity, but not for English
Shadertoy basic teaching 01. Circle drawing (explanation of smoothstep() function)
1183. electricity
How to better organize the minimum web api code structure
20000 words + 20 pictures | details of nine data types and application scenarios of redis
[paper reading] semi supervised learning with ladder networks
云原生数据库如荼如火,未来可期
Thinkphp6 solving jump problems
怎样利用数据讲一个精彩故事?
Arduino温湿度传感器DHT11(含代码)
【图像融合】基于非凸罚分的稀疏正则化实现图像融合附matlab代码
ApiPost接口测试的用法之------Post
Question bank and answers of 2022 hoisting machinery safety management examination
DO280OpenShift命令及故障排查--常见故障排除和章节实验
What are the types of independent station chat robots? How to quickly create your own free chat robot? It only takes 3 seconds!
dolphinscheduler 2.0.5 任务测试(spark task)报错:Container exited with a non-zero exit code 1
Thesis reading_ Relation extraction_ CASREL
rtklib2.4.3 b34 单点定位的一个bug
ICER skills 03design compile