
说明:本篇博客基于selenium 4.1.0
element_xpath = driver.find_element(By.XPATH, 'xpath表达式') 复制代码 xpath即为XML路径语言(XML Path Language),是由国际标准化组织W3C指定的,一种用来确定XML文档节点位置的语言
1.相较于其他定位方式,可支持更多定位方法,如:布尔逻辑判断、模糊定位等 2.可支持web定位、Android app原生页面定位
1.需要从头到尾解析整个页面,速度较慢
方法1:在浏览器开发者模式的elements中,Ctrl+F搜索栏输入xpath表达式 方法2:在浏览器开发者模式的console中,按如下格式可验证表达式
$x("xpath表达式") # 表达式中存在引号,则使用单引号,'$'可更换为'$$' 复制代码 在xpath中,有七种类型的节点(node):元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点) 在开始xpath语法前,我们需要简单了解这几种节点:
| 节点名称 | 说明 | 示例 |
|---|---|---|
| 元素节点 | 网页中的各个标签 | 如、 ... |
| 根节点 | 网页的第一个元素节点 | 网页的根节点通常为... |
| 属性节点 | 标签中的各个属性 | 如 ... ,id即为div节点的属性 |
| 文本节点 | 标签的文本 | 如 啦啦啦 ,'啦啦啦'即为div节点的文本 |
xpath使用路径表达式描述目标节点与网页头的关系
路径表达式有两种结构,分别为:
/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1] 复制代码 //input[@id='su'] 复制代码 对比两种表达式,可以发现:
因此,在项目中几乎都是使用相对路径进行定位
| 表达式 | 说明 | 示例 | 示例说明 |
|---|---|---|---|
| nodename | 选取此节点的所有子节点 | html | 选取根节点的所有子节点 |
| / | 从根节点选取,或者用来选择子节点 | /html/body/textarea | 选择中的所有 |
| // | 从匹配节点开始选取,或者选择后代节点 | /html/body//textarea | 选择中的所有 |
| | | 选择多个节点 | //div|//a | 选择所有 节点和节点 |
| .. | 选择当前节点的父节点 | //p/.. | 选择所有 的父节点 |
| * | 选择所有节点 | /html/body/* | 选择中的所有节点 |
谓语表达式(predicate):紧跟在节点后面,嵌入在[]中的一段表达式,可用来筛选多个同名节点 谓语表达式作用原理:获取节点信息,通过表达式判断节点是否符合要求,为True则返回该节点 谓语格式:
节点名称[谓语] 复制代码 | 常用谓语 | 说明 | 示例 | 示例说明 |
|---|---|---|---|
| n | 节点编号 | //div[2] | 选择所有 节点且该节点是其父级的第二个 节点 |
| last() | 最后一个节点 | //div[last()] | 选择所有 节点且该节点是其父级的最后一个子节点 |
| position() | 比较节点编号 | //div[position() < 3] | 选择所有 节点且该节点是其父级的前两个 节点 |
| @属性 | 属性 | //input[@id] | 选择所有节点且该节点带id属性 |
| @属性='属性值' | 比较属性 | //input[@id='kw'] | 选择所有节点且该节点id属性为'kw' |
| text() | 比较节点文本 | //a[text()='新闻'] | 选择所有节点且该节点文本为'新闻' |
| 谓语运算符 | 说明 | 示例 | 示例说明 |
|---|---|---|---|
| = != > < >= <= | 大小比较 | /html/body/div[position()=2] | 选择中的第2个 子节点 |
| + - *、 div mod | 加减乘除求余 | /html/body/div[last()-1] | 选择中的倒数第2个 子节点 |
| and or not() | 或、且、非运算 | //*[@id='kw' and @class='s_ipt'] | 选择所有id='kw'并且class='s_ipt'的节点 |
| contains() | 包含 | //*[contains(text(), '新闻')] | 选择所有文本带有'新闻'二字的节点 |
| starts-with() | 头部包含 | //*[starts-with(@id, 's')] | 选择所有文本以'新闻'开头的节点 |
备注:
轴:表示所选节点与当前节点之间的树关系,用来筛选对于当前节点有相同关系的一类节点 轴格式:
当前节点/轴名称::节点名称 复制代码 | 轴 | 说明 | 示例 | 示例说明 |
|---|---|---|---|
| ancestor | 先辈节点 | //input[@id='kw']/ancestor::\ * | 选择id='kw'的节点的所有先辈节点 |
| ancestor-or-self | 先辈节点以及当前节点 | 略 | 略 |
| attribute | 节点属性 | 略 | 略 |
| child | 子节点,等同于/ | /html/body/child::div | 选择中的所有 子节点 |
| descendant | 后代节点,等同于// | /html/body/descendant::div | 选择中的所有 后代节点 |
| descendant-or-self | 后代节点以及当前节点 | 略 | 略 |
| following | 结束标签之后的所有节点 | 略 | 略 |
| namespace | 命名空间 | 略 | 略 |
| parent | 父节点 | 略 | 略 |
| preceding | 开始标签之前的所有节点 | 略 | 略 |
| preceding-sibling | 当前节点之前的所有同级节点 | 略 | 略 |
| self | 当前节点 | 略 | 略 |
下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

资料获取方式 :
