告别定位困扰!测试工程师用 XPath“|” 和 “or”

一、测试场景痛点与 XPath "或" 逻辑的价值

作为测试工程师,你是否遇到过以下困境?

  • 需求 1 :在百度搜索结果页,需要同时定位自然搜索结果的标题(位于<h3>标签)和广告结果的标题(位于带有class="c-ad"<div>标签)。
  • 需求 2:页面中存在多个相似结构的模块,需排除底部版权信息或广告干扰元素。
  • 需求 3 :元素属性动态变化(如idclass包含不同前缀),需动态匹配定位。

XPath 的|运算符和or条件能轻松解决这些问题,让你的测试脚本更简洁、健壮。


二、XPath "或" 逻辑核心语法解析

  1. |运算符:合并多路径结果 用于将多个 XPath 路径的结果合并为一个集合。 示例:在百度搜索页,同时定位自然搜索结果标题和广告标题:

    xpath

    xpath 复制代码
    //h3[@class="t"]/a | //div[@class="c-ad"]//h3/a

    该表达式会选取所有自然搜索结果的<h3>标题和广告模块中的标题元素。

  2. or条件:同一路径下的逻辑或 在 XPath 的谓语(条件判断)中使用,满足任一条件即可匹配元素。 示例:定位百度搜索框或搜索按钮:

    xpath

    xpath 复制代码
    //input[@id="kw" or @id="su"]

    该表达式会匹配idkw(搜索框)或su(搜索按钮)的元素。


三、实战案例:百度搜索页元素定位

场景 1:提取搜索结果标题与链接 需求:在百度搜索结果页,同时获取自然搜索结果和广告结果的标题及链接。 解决方案

xpath

xpath 复制代码
(//h3[@class="t"]/a | //div[@class="c-ad"]//h3/a)/@href  # 获取链接
(//h3[@class="t"]/a | //div[@class="c-ad"]//h3/a)/text()  # 获取标题

通过|合并两类元素路径,一次性提取目标数据。

场景 2:排除干扰元素 需求:在百度搜索页中,跳过底部版权信息和广告模块。 解决方案

xpath

xpath 复制代码
//div[not(self::footer or contains(@class, "c-ad"))]

使用not()结合or,排除所有<footer>标签和包含c-ad类的元素。

场景 3:动态属性匹配 需求:定位百度搜索结果中带有 "新" 标签或特定id的元素。 解决方案

xpath

xpath 复制代码
//div[contains(@class, "new") or starts-with(@id, "result_")]

该表达式会匹配class包含newidresult_开头的<div>元素。


四、测试工程师必知的避坑指南

  1. 路径结构一致性 使用|合并的路径需返回同类元素(如均为节点或属性),避免混合元素与属性导致结果混乱。 ❌ 错误示例://div | @class(混合元素与属性)。

  2. 逻辑优先级与括号 and的优先级高于or,建议用括号明确逻辑。 示例

    xpath

    xpath 复制代码
    //div[(@type="A" or @type="B") and @status="active"]
  3. 性能优化 避免使用//(全局搜索),尽量从最近的父节点开始定位,提升脚本执行效率。 推荐写法

    xpath

    xpath 复制代码
    //div[@id="content"]//h3 | //div[@class="sidebar"]//h3

五、工具推荐与测试实践

  1. Selenium + XPath 在自动化测试中,结合 Selenium 的find_elements_by_xpath()方法,可高效实现复杂元素定位。 示例代码(Python)

    python

    python 复制代码
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    elements = driver.find_elements_by_xpath('//input[@id="kw" or @id="su"]')
  2. 浏览器开发者工具 在 Chrome/Firefox 中按F12打开开发者工具,直接在 "Elements" 面板测试 XPath 表达式,实时验证定位结果。

  3. XPath 插件辅助 安装XPath Helper(Chrome 插件)或XPath Checker(Firefox 插件),帮助快速调试和优化 XPath 语句。


总结

掌握 XPath 的|or逻辑,能让测试工程师在面对复杂页面结构时游刃有余。关键在于:

  • 明确需求 :是需要合并多路径结果(|),还是在同一路径下设置多个条件(or)?
  • 结构检查:确保路径或条件逻辑的一致性,避免冗余。
  • 工具验证:利用浏览器开发者工具或插件提前测试 XPath,减少脚本调试时间。

通过以上技巧,你的自动化测试脚本将更高效、稳定!在百度搜索页或其他复杂网页的测试中,不妨试试这些方法,让元素定位不再成为卡点。

相关推荐
VyrnSynx4 小时前
CodeBuddy IDE震撼来袭:让开发更高效的全新工具,前沿内测大揭秘!
测试·笔记测评
莫魂魂1 天前
07.自动化测试常用函数
测试
胡斌附体1 天前
linux测试端口是否可被外部访问
linux·运维·服务器·python·测试·端口测试·临时服务器
智云软件测评服务2 天前
第三方软件测试检测机构能提供啥测试服务?功能测试了解下
测试·软件·
June bug3 天前
【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
经验分享·分布式·职场和发展·架构·学习方法·测试·软考
郝同学的测开笔记13 天前
从 "不支持的URL" 错误谈 IPv6 兼容性与 HTTPDNS 优化
测试
chao_78915 天前
作为测试人员,平时用什么大模型?怎么用?
面试·大模型·测试
chao_78917 天前
死锁相关知识
网络协议·游戏·测试·死锁
cooldream200917 天前
pytest 框架详解与实战指南
pytest·测试
大话性能17 天前
使用Python进行GRPC和Dubbo协议的高级测试
测试