在自动化测试中,使用Selenium定位网页元素是至关重要的。XPath是一种强大的定位方法,允许您通过元素的路径来精确定位,无论其在DOM(文档对象模型)中的位置如何。
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>、
…
根节点网页的第一个元素节点网页的根节点通常为<html>…<html>属性节点标签中的各个属性如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选择所有
的父节点*选择所有节点/html/body/*选择<body>中的所有节点
xpath谓语表达式
谓语表达式(predicate):紧跟在节点后面,嵌入在[]中的一段表达式,可用来筛选多个同名节点
谓语表达式作用原理:获取节点信息,通过表达式判断节点是否符合要求,为True则返回该节点
谓语格式:
节点名称[谓语]
常用谓语说明示例示例说明n节点编号//div[2]选择所有
谓语运算符说明示例示例说明= !=
<
= <=大小比较/html/body/div[position()=2]选择<body>中的第2个子节点+ - 、
div mod加减乘除求余/html/body/div[last()-1]选择<body>中的倒数第2个子节点and or not()或、且、非运算//[@id=‘kw’ and @class=‘s_ipt’]选择所有id='kw’并且class='s_ipt’的节点contains()包含//[contains(text(), ‘新闻’)]选择所有文本带有’新闻’二字的节点starts-with()头部包含//[starts-with(@id, ‘s’)]选择所有文本以’新闻’开头的节点
备注:
- last()、position()、text()、not()这类带有括号的表达式,实质都是xpath提供的函数,本篇文章只列出了常用函数
- 根据W3C标准,第一个节点编号应该是[1],但在IE5及更高版本中第一个节点编号是[0]
xpath轴(axis)
轴:表示所选节点与当前节点之间的树关系,用来筛选对于当前节点有相同关系的一类节点
轴格式:当前节点/轴名称::节点名称
轴说明示例示例说明ancestor先辈节点//input[@id=‘kw’]/ancestor::\ *选择id='kw’的<input>节点的所有先辈节点ancestor-or-self先辈节点以及当前节点略略attribute节点属性略略child子节点,等同于//html/body/child::div选择<body>中的所有
子节点descendant后代节点,等同于///html/body/descendant::div选择<body>中的所有后代节点descendant-or-self后代节点以及当前节点略略following结束标签之后的所有节点略略namespace命名空间略略parent父节点略略preceding开始标签之前的所有节点略略preceding-sibling当前节点之前的所有同级节点略略self当前节点略略总结
XPath是一个强大的工具,但也需要谨慎使用,因为Xpath方法查找元素较慢,一般情况下优先选择是其他定位方法,希望本文能够帮到大家!
更多Python基础语法趣味学习视频,请点击!
本文转载自: https://blog.csdn.net/Hogwartstester/article/details/135000245
版权归原作者 霍格沃兹测试开发学社 所有, 如有侵权,请联系我们删除。发表评论
“软件测试/人工智能/全日制|详解selenium xpath定位”的评论:
还没有评论