一、测试场景痛点与 XPath "或" 逻辑的价值
作为测试工程师,你是否遇到过以下困境?
- 需求 1 :在百度搜索结果页,需要同时定位自然搜索结果的标题(位于
<h3>
标签)和广告结果的标题(位于带有class="c-ad"
的<div>
标签)。 - 需求 2:页面中存在多个相似结构的模块,需排除底部版权信息或广告干扰元素。
- 需求 3 :元素属性动态变化(如
id
或class
包含不同前缀),需动态匹配定位。
XPath 的|
运算符和or
条件能轻松解决这些问题,让你的测试脚本更简洁、健壮。
二、XPath "或" 逻辑核心语法解析
-
|
运算符:合并多路径结果 用于将多个 XPath 路径的结果合并为一个集合。 示例:在百度搜索页,同时定位自然搜索结果标题和广告标题:xpath
xpath//h3[@class="t"]/a | //div[@class="c-ad"]//h3/a
该表达式会选取所有自然搜索结果的
<h3>
标题和广告模块中的标题元素。 -
or
条件:同一路径下的逻辑或 在 XPath 的谓语(条件判断)中使用,满足任一条件即可匹配元素。 示例:定位百度搜索框或搜索按钮:xpath
xpath//input[@id="kw" or @id="su"]
该表达式会匹配
id
为kw
(搜索框)或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
包含new
或id
以result_
开头的<div>
元素。
四、测试工程师必知的避坑指南
-
路径结构一致性 使用
|
合并的路径需返回同类元素(如均为节点或属性),避免混合元素与属性导致结果混乱。 ❌ 错误示例://div | @class
(混合元素与属性)。 -
逻辑优先级与括号
and
的优先级高于or
,建议用括号明确逻辑。 示例:xpath
xpath//div[(@type="A" or @type="B") and @status="active"]
-
性能优化 避免使用
//
(全局搜索),尽量从最近的父节点开始定位,提升脚本执行效率。 推荐写法:xpath
xpath//div[@id="content"]//h3 | //div[@class="sidebar"]//h3
五、工具推荐与测试实践
-
Selenium + XPath 在自动化测试中,结合 Selenium 的
find_elements_by_xpath()
方法,可高效实现复杂元素定位。 示例代码(Python):python
pythonfrom selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com") elements = driver.find_elements_by_xpath('//input[@id="kw" or @id="su"]')
-
浏览器开发者工具 在 Chrome/Firefox 中按
F12
打开开发者工具,直接在 "Elements" 面板测试 XPath 表达式,实时验证定位结果。 -
XPath 插件辅助 安装
XPath Helper
(Chrome 插件)或XPath Checker
(Firefox 插件),帮助快速调试和优化 XPath 语句。
总结
掌握 XPath 的|
和or
逻辑,能让测试工程师在面对复杂页面结构时游刃有余。关键在于:
- 明确需求 :是需要合并多路径结果(
|
),还是在同一路径下设置多个条件(or
)? - 结构检查:确保路径或条件逻辑的一致性,避免冗余。
- 工具验证:利用浏览器开发者工具或插件提前测试 XPath,减少脚本调试时间。
通过以上技巧,你的自动化测试脚本将更高效、稳定!在百度搜索页或其他复杂网页的测试中,不妨试试这些方法,让元素定位不再成为卡点。