告别定位困扰!测试工程师用 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 小时前
从漏洞到防护:如何为你的CronJob添加RBAC安全层?
云原生·kubernetes·测试
程序员二黑4 小时前
Web UI自动化王者:Selenium WebDriver 核心原理与API详解
单元测试·测试·ab测试
中草药z12 小时前
【自动化测试】Selenium详解-WebUI自动化测试
前端·功能测试·selenium·自动化·html·web·测试
程序员二黑1 天前
Pytest为何成为Python测试王者?Fixtures/Parametrize/Plugins三神器揭秘
单元测试·测试·ab测试
程序员二黑2 天前
单元测试三大神器:unittest vs JUnit vs Jest 终极对决
单元测试·测试·ab测试
转转技术团队3 天前
一键生成用例、Cursor 扫雷、接口异常自动化!AI 测试「三连击」实战全拆解
测试
kakwooi3 天前
易乐播播放器---压力测试
java·jmeter·测试
程序员二黑4 天前
手把手搭建自动化测试环境:10分钟搞定Python/Java双环境
java·python·测试
程序员二黑5 天前
(Python) vs (Java) vs(javaScript) 谁才是自动化测试的最佳拍档
单元测试·测试·ab测试
得物技术5 天前
AI质量专项报告自动分析生成|得物技术
openai·测试