告别定位困扰!测试工程师用 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,减少脚本调试时间。

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

相关推荐
JenniferSmiling1 天前
Midscene初体验
测试
烧冻鸡翅QAQ2 天前
测试中的Bug
bug·测试
草莓熊Lotso4 天前
《从 0 建立测试开发认知:先搞懂 “是什么”,再学 “怎么做”》
经验分享·笔记·其他·测试
cat_with_cat4 天前
测试:BUG篇
bug·测试
佚明zj5 天前
渗透测试(Penetration Testing)入门指南
测试
Apifox6 天前
如何让 Apifox 发布的在线文档具备更好的调试体验?
前端·后端·测试
康谋自动驾驶7 天前
告别数月等待:数字孪生场景生成从此进入“日级”时代
汽车·测试·数字孪生·仿真·建模·3dgs
漫谈测试7 天前
秒杀系统数据分层校验
测试
虫无涯8 天前
【分享】AgileTC测试用例管理平台使用分享
测试