XPath定位手册
XPath定位手册
一、XPath核心定位方法
1.基础路径定位
(1)绝对路径定位
从根节点开始的完整路径,以/开头:
/html/body/div/form/input[@name='password']
(2)相对路径定位
以//开头,从当前节点开始搜索:
//input[@name='password']
2.位置索引定位
通过在 [] 中填写规则进行定位:
//ol/li[3] (第三个li元素)
//table/tr[last()] (最后一行)
//tr[position()<4] (前三行)
3. 属性定位法
通过元素属性值精准匹配,@+属性名=xx值:
//a[@href='https://example.com']
//img[@alt='logo']
//div[@class='header active']
4. 逻辑运算定位
通过逻辑运算匹配出符合条件的元素:
//div[@class='error' or @id='alert']
//input[@type='checkbox' and not(@disabled)]
5. 文本内容定位
(1)精确匹配
通过 text()= 进行精准匹配:
//p[text()='欢迎光临']
(2)模糊匹配
通过 contains() 或 starts-with() 或 ends-with() 进行模糊匹配:
//a[contains(@href, 'logout')]
//h1[starts-with(@class, 'heading-')]
6. 层级关系定位
(1)父子关系
//div[@id='parent']/child::span
(2)祖先-后代关系
//form//input[@type='submit'] (form下的任意层级input)
(3)兄弟关系
//h2[@class='title']/following-sibling::p
//ul[@id='menu']/li[1]/preceding-sibling::li
二、XPath定位黄金原则
1. 稳定性优先原则
- 避免绝对路径:优先使用相对路径
- 慎用位置索引:优先通过属性/文本定位
- 规避动态属性:如style、onclick等易变属性
2. 性能优化原则
- 缩短路径长度:避免全文档扫描
//* - 优先ID/Class:浏览器对标准属性优化更好
- 减少函数调用:
contains()比正则更高效
3. 容错设计原则
- 多方案备份:准备2-3种定位方式
# Python示例:备选定位策略
try:
element = driver.find_element(By.XPATH, "//a[@id='primary']")
except:
element = driver.find_element(By.XPATH, "//nav//a[text()='首页']")
- 模糊匹配:对动态ID采用部分匹配
//div[starts-with(@id, 'temp-')]
4. 跨浏览器兼容原则
- 避免XPath 2.0+特性:如if-then-else
- 慎用轴定位:如following-axis在某些浏览器支持差
- 优先CSS选择器:对简单定位可混合使用
附录:函数汇总
1. 字符串处理函数
| 函数 | 作用 | 示例 |
|---|---|---|
| contains() | 检查字符串是否包含子串 | //div[contains(@id, 'temp-')] |
| starts-with() | 检查字符串是否以子串开头 | //input[starts-with(@name, 'user-')] |
| ends-with() | 检查字符串是否以子串结尾(XPath 2.0+) | //a[ends-with(@href, '.pdf')] |
| normalize-space() | 去除首尾空格并合并中间空格 | //p[normalize-space(text())='Hello'] |
| substring() | 截取字符串 | //div[@id=substring('abc-123', 5)] |
| translate() | 字符替换 | //input[@value=translate('HELLO', 'HEL', 'hel')] |
2. 逻辑运算函数
| 函数 | 作用 | 示例 | 含义 |
|---|---|---|---|
| not() | 逻辑非 | //input[not(@disabled)] | 选择所有没有 `disabled` 属性的 `input` 元素 |
| boolean() | 转换为布尔值 | //div[boolean(@data-valid)] | 选择所有具有 `data-valid` 属性的 `div` 元素 |
| and | 逻辑与 | input[@type='text' and @value='email'] | 选择所有 `type` 属性等于 `text` 且 `value` 属性等于 `email` 的 `input` 元素 |
| or | 逻辑或 | input[@type='text' or @type='email'] | 选择所有 `type` 属性等于 `text` 或 `type` 属性等于 `email` 的 `input` 元素 |
3. 数值计算函数
| 函数 | 作用 | 示例 |
|---|---|---|
| count() | 统计节点数 | //table[count(tr) > 5] |
| sum() | 求和(XPath 2.0+) | sum(//price) |
4. 轴函数
| 函数 | 方向 | 作用 | 示例 |
|---|---|---|---|
| child:: | 向下 | 所有子节点(默认轴,可省略) | child::p 或 p |
| parent:: | 向上 | 直接父节点 | //h2/parent::div |
| ancestor:: | 向上 | 所有祖先节点(父节点、祖父节点等) | //td/ancestor::table |
| descendant:: | 向下 | 所有后代节点(子节点、孙节点等) | //td/descendant::span |
| following:: | 文档顺序向后 | 当前节点之后的所有节点(不包括后代) | //h2/following::p[1] |
| following-sibling:: | 向后 | 当前节点之后的同级兄弟节点(同一父节点下) | //h2/following-sibling::li |
| preceding:: | 文档顺序向前 | 当前节点之前的所有节点(不包括祖先) | //li[last()]/preceding::li |
| preceding-sibling:: | 向前 | 当前节点之前的同级兄弟节点(同一父节点下) | //li[last()]/preceding-sibling::a |
XPath定位手册的更多相关文章
- appium -- Xpath定位元素
如文章<Appium基于安卓的各种FindElement的控件定位方法实践>所述,Appium拥有众多获取控件的方法.其中一种就是根据控件所在页面的XPATH来定位控件. 本文就是尝试通过 ...
- java selenium (六) XPath 定位
xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. 阅读目录 什么是xpath xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面, ...
- 常用的CSS定位,XPath定位和JPath定位
CSS定位 举例 描述 div#menu id为menu的div元素 div.action-btn.ok-btn class为action-btn和ok-btn的div元素 table#emailLi ...
- selenium之xpath定位和input文本
selenium之xpath定位和input文本 xpath简单定位: 打开浏览器的F12 在自己需要定位的元素的那里右键 选择copy->xpath selenium获取input下的文本: ...
- 5.5.8 XPath定位
1.什么是XPath XPath定位方式是自动化测试定位技术中的必杀技,几乎可以解决所有的定位难题.它是XML Path语言的缩写,主要用于在XML 文档中选择文档中的节点.基于XML树状文档结构,X ...
- selenium+python自动化之xpath定位
在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. 什么是 ...
- Xpath定位大全
selenium使用Xpath定位之完整篇 其中有一片文章提到了xpath元素定位,但是该文章中有些并不能适应一些特殊与个性化的场景.在文本中提供xpath元素的定位终极篇,你一定能在这里找到你需 ...
- appium的xpath定位
做自动化,元素定位是我们遇到的第一个困难.总是会有各种各样的问题,导致我们定位不到元素.前面一篇博客也写了元素定位的几种方法,今天主要分享一下xpath的定位方法. 这里我们仍然拿计算器举例. 比如我 ...
- Selenium-Python学习——通过XPath定位元素
用Xpath定位元素的方法总是记不住,经常要翻出各种文档链接参考,干脆把需要用到的内容整到这个笔记中方便查找. Xpath是在XML文档中定位节点的语言.使用 XPath 的主要原因之一是当想要查找的 ...
- Robot Framework与Web界面自动化测试学习笔记:利用xpath定位元素
在rf中,利用selinum2的关键字进行用例编写时,很多关键字的参数是html元素的定位标识. 最简单的方式,是通过id 或name来描述元素定位信息,如 click button id=l ...
随机推荐
- C#网络编程(二)----网络层/链路层
网络层协议 网络层(Network Layer) 的主要功能是实现主机之间的逻辑寻址.路由选择和分组转发,确保数据在不同网络(如局域网.广域网)之间的传输 协议类别 核心协议 路由协议 辅助协议 扩展 ...
- 最强AI数字人,口型、表情、动作全同步!Kairos下载介绍
在数字化浪潮汹涌澎湃的今天,视频合成技术如同一颗璀璨的明星,照亮了内容创作的广阔天地 Kairos是一款顶级数字人制作工具,它基于先进的 AI 算法,能够快速克隆出用户的数字分身,并且精准匹配外貌.声 ...
- 凯撒密码--java实现
关于凯撒密码的介绍我就不多说了,感兴趣的可以看什么是凯撒密码?,我主要说的是java如何实现. 我发现网上有写java加密解密的,写的时候发现只需要一个转换函数就可以了,可以作为加密用,也可以用作解密 ...
- 智表 ZCELL 插件快速入门指南(原创)
一.认识智表 ZCELL 插件 智表 ZCELL 是一款免费的前端 EXCEL 插件,它凝聚了多年工作经验与成果,旨在为用户带来极致的操作体验.该插件具备诸多优势,如轻量体积小,在浏览器端效率高:使用 ...
- 双向 和 多重 RNN
前面已经对 RNN (递归神经网络) 的变体 (主要为解决 梯度消失和梯度爆炸) 接触了两个比较流行的 LSTM 和 GRU, 其核心思想呢, 是通过其所谓 **"gate" ** ...
- 用JavaScript打造全新编程语言:从无到有的完整实践指南
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 为什么我们痴迷于令人兴奋的 ChatGPT AI 聊天机器人
.markdown-body { color: rgba(89, 89, 89, 1); font-size: 15px; font-family: -apple-system, system-ui, ...
- 梯度下降(Gradient Descent)法
梯度下降法(Gradient Descent)是求解无约束最优化问题最常用的方法之一,它是一种迭代方法,每一步的主要操作就是求解目标函数的梯度向量,将当前位置的负梯度方向作为搜索方向. 直观的表示可用 ...
- HanioTower(java)
package javaBasic; import java.util.Scanner; public class HanioTower { public static void main(Strin ...
- excel/wps, 转code128字体宏, 部分字符串出现空格, 导致条码断裂无法扫描的解决方案
原宏是网上抄的, 传播比较广的那个. 后来发现, 部分条码出现空格断裂, 导致PDA无法扫描, 经搜索在一个帖子里, 发现是因为: 宏计算条码时, 会出现校验位刚好是空格的情况, 而空格在code12 ...