软件测试学习笔记丨Selenium学习笔记:xpath定位

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22512
本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~
说明:本篇博客基于selenium 4.1.0

selenium-xpath定位

element_xpath = driver.find_element(By.XPATH, 'xpath表达式')

xpath定位说明

xpath即为XML路径语言(XML Path Language),是由国际标准化组织W3C指定的,一种用来确定XML文档节点位置的语言

xpath定位优点

1.相较于其他定位方式,可支持更多定位方法,如:布尔逻辑判断、模糊定位等
2.可支持web定位、Android app原生页面定位

xpath定位缺点

1.需要从头到尾解析整个页面,速度较慢

xpath调试方法

方法1:在浏览器开发者模式的elements中,Ctrl+F搜索栏输入xpath表达式
方法2:在浏览器开发者模式的console中,按如下格式可验证表达式

$x("xpath表达式")   # 表达式中存在引号,则使用单引号,'$'可更换为'$$'

xpath节点

在xpath中,有七种类型的节点(node):元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)
在开始xpath语法前,我们需要简单了解这几种节点:

节点名称说明示例
元素节点网页中的各个标签<textarea>…</textarea>、<p>…</p>
根节点网页的第一个元素节点网页的根节点通常为<html>…<html>
属性节点标签中的各个属性<div id=‘su’ >…</div>,id即为div节点的属性
文本节点标签的文本<div>啦啦啦</div>,'啦啦啦’即为div节点的文本

xpath语法

xpath使用路径表达式描述目标节点与网页头的关系

绝对路径 & 相对路径

路径表达式有两种结构,分别为:

  • 绝对路径:从根节点/html开始往下,一层层的表示出来直到需要的节点为止。以百度输入框为例,表达式为:
/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]
  • 相对路径:从任意节点开始,根据节点描述信息找到需要的节点。同样以百度输入框为例,表达式为:
//input[@id='su']

对比两种表达式,可以发现:

  • 相对路径更简洁,方便阅读
  • 相对路径更稳定,当前端页面有结构变动就容易引起绝对路径发生变化

因此,在项目中几乎都是使用相对路径进行定位

xpath基本表达式

表达式说明示例示例说明
nodename选取此节点的所有子节点html选取<html>根节点的所有子节点
/从根节点选取,或者用来选择子节点/html/body/textarea选择<body>中的所有<textarea>子节点
//从匹配节点开始选取,或者选择后代节点/html/body//textarea选择<body>中的所有<textarea>后代节点
选择多个节点//div丨//a选择所有<div>节点和<a>节点
选择当前节点的父节点//p/…选择所有<p>的父节点
*选择所有节点/html/body/*选择<body>中的所有节点

xpath谓语表达式

谓语表达式(predicate):紧跟在节点后面,嵌入在中的一段表达式,可用来筛选多个同名节点
谓语表达式作用原理:获取节点信息,通过表达式判断节点是否符合要求,为True则返回该节点
谓语格式:

节点名称[谓语]
常用谓语说明示例示例说明
n节点编号//div[2]选择所有<div>节点且该节点是其父级的第二个
节点
last()最后一个节点//div[last()]选择所有<div>节点且该节点是其父级的最后一个子节点
position()比较节点编号//div[position() < 3]选择所有<div>节点且该节点是其父级的前两个<div>节点
@属性属性//input[@id]选择所有<input>节点且该节点带id属性
@属性=‘属性值’比较属性//input[@id=‘kw’]选择所有<input>节点且该节点id属性为’kw’
text()比较节点文本//a[text()=‘新闻’]选择所有<a>节点且该节点文本为’新闻’
谓语运算符说明示例示例说明
= != > < >= <=大小比较/html/body/div[position()=2]选择<body>中的第2个<div>子节点
+ - *、 div mod加减乘除求余/html/body/div[last()-1]选择<body>中的倒数第2个<div>子节点
and or not()或、且、非运算//*[@id=‘kw’ and @class=‘s_ipt’]选择所有id='kw’并且class='s_ipt’的节点
contains()包含//*[contains(text(), ‘新闻’)]选择所有文本带有’新闻’二字的节点
starts-with()头部包含//*[starts-with(@id, ‘s’)]选择所有文本以’新闻’开头的节点

备注:

  1. last()、position()、text()、not()这类带有括号的表达式,实质都是xpath提供的函数,本篇文章只列出了常用函数
  2. 根据W3C标准,第一个节点编号应该是[1],但在IE5及更高版本中第一个节点编号是[0]

xpath轴(axis)

轴:表示所选节点与当前节点之间的树关系,用来筛选对于当前节点有相同关系的一类节点
轴格式:

当前节点/轴名称::节点名称
说明示例示例说明
ancestor先辈节点//input[@id=‘kw’]/ancestor::\ *选择id='kw’的<input>节点的所有先辈节点
ancestor-or-self先辈节点以及当前节点
attribute节点属性
child子节点,等同于//html/body/child::div选择<body>中的所有<div>子节点
descendant后代节点,等同于///html/body/descendant::div选择<body>中的所有<div>后代节点
descendant-or-self后代节点以及当前节点
following结束标签之后的所有节点
namespace命名空间
parent父节点
preceding开始标签之前的所有节点
preceding-sibling当前节点之前的所有同级节点
self当前节点

在这里插入图片描述

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值