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

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

相关推荐
洞窝技术2 天前
增量代码自动Review工具:洞窝在AI上的探索和实践
jenkins·ai编程·测试
littleplayer2 天前
iOS 单元测试与 UI 测试详解-DeepSeek
前端·单元测试·测试
陈哥聊测试3 天前
开发认为测试不及时,测试吐槽工作量太大?
后端·测试·devops
咖啡配辣条3 天前
MySQL数据库教程03
数据库·测试
郝同学的测开笔记4 天前
SQL查询深度解析:获取上周完课机构统计
mysql·测试
大话性能4 天前
使用枚举(Enum)提升你的python代码质量
测试
公子测试4 天前
Trae版本更新 | 测试小白使用trae完成jira和飞书联动
测试
哔哩哔哩技术5 天前
B站端侧DCDN容灾演练实践
测试·cdn
WebInfra5 天前
🔥 Midscene 重磅更新:支持 AI 驱动的 Android 自动化
android·前端·测试