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

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

相关推荐
大话性能1 小时前
Python开源项目解读—ratelimit,限制函数单位时间内被调用次数
测试
阿尔泰科技官方1 天前
智能监测体系--护航 LNG 储罐安全!
测试·以太网·tcp·仪器仪表·数据采集卡·lng 储罐
货拉拉技术1 天前
货拉拉压测平台的建设与实践
测试
waves浪游2 天前
测试概念篇
测试
Apifox6 天前
如何在 Apifox 中调试 Socket.IO 接口?
前端·后端·测试
Apifox6 天前
一文讲透 MCP,开启 Apifox MCP Server 内测之旅
后端·测试·mcp
runningTurtle8 天前
白盒测试用例设计方法
测试
freejackman9 天前
UnitTest框架管理测试用例——python自动化测试
python·pycharm·测试
大话性能9 天前
Airflow,一个很强大的自动化工作流python库
测试