元素定位练习 · XPATH 定位

练习 By.XPATH 定位方法的核心实操与效果验证

首页 定位导航

练习说明

本页面提供 By.XPATH 定位方法的完整练习场景。页面包含练习要求描述卡(方法概念 + Selenium 示例 + 练习清单)和定位后操作效果展示区域,在输入框输入内容、点击按钮、勾选选择框时,效果展示区会实时显示对应卡片。

方法 7:By.XPATH — 通过 XPath 表达式定位

最强大通用的定位方法,支持相对路径、属性组合、文本匹配、父子兄弟轴、索引、函数等,适用 99% 场景。

练习要求 · 方法 7:By.XPATH
📌 方法概念
原理:在 XML/HTML DOM 树中用路径表达式导航到节点;支持相对路径 //、索引 [n](从 1 开始)、属性 [@attr='val']、函数 contains() / starts-with() / text() / normalize-space() / last()、逻辑运算 and/or、轴定位 parent::*/following-sibling::*
适用场景:表格行按内容找操作按钮、动态 id、多属性组合、父子兄弟轴相对定位、找不到稳定 CSS 选择器时兜底。
注意事项:优先用相对路径 // 而不是绝对路径 /html/body/...;索引用括号包起来再 [n];单双引号嵌套避免报错。
💻 Selenium 示例(Python)
from selenium import webdriver
from selenium.webdriver.common.by import By
# 1) 多属性:商品表格,通过 name + data‑cat 属性组合完成元素定位
p = driver.find_element(By.XPATH, "//*[@data-name='无线鼠标' and @data-cat='数码配件']")
# 2) 轴定位:先匹配订单号以202608开头的元素节点,再使用following‑sibling兄弟轴,筛选获取同订单卡片下的付款按钮
btn = driver.find_element(By.XPATH,
    "//*[starts-with(@data-oid,'NO202608')]/following-sibling::div//button[@data-act='pay']")
# 3) 购物商城分类侧边栏:利用contains(.,'电子产品')定位侧边栏分类项,通过父子层级关系,向下查找该分类下对应的商品。
cat = driver.find_element(By.XPATH, "//*[@class='xc-sidebar']//*[contains(normalize-space(),'电子产品')]")
items = driver.find_elements(By.XPATH, "//div[contains(@class,'xc-goods')]")
📋 本节练习清单
  • ✅ 练习目标 1:商品管理表格 — 根据 data-id/data-cat/data-status 等属性组合定位「查看/编辑/删除」按钮://tr[@data-id='P003']//button//tr[td[contains(.,'键盘')]]//button[@data-act='edit']
  • ✅ 练习目标 2:会员资料表单 — ① 读取 disabled 元素 //input[@disabled](会员编号) ② 读取已勾选 radio //input[@type='radio' and @checked](保密) ③ 读取已勾选兴趣 checkbox //input[@type='checkbox' and @checked](默认 2 个);试试 //input[starts-with(@name,'xc_') and @checked],为什么多了 1 个? ④ 点击读取按钮
  • ✅ 练习目标 3:订单卡片 — ① starts-with 匹配订单号前缀 //*[starts-with(@data-oid,'NO202608')] ② @data-status 过滤待付款 //*[@data-status='pending'](命中 2 张:NO20260802 / NO20260806) ③ 点击「立即付款」按钮:按钮没有 data 属性,推荐用"先拿卡片容器 → 容器内找按钮文字"的组合定位;进阶用 ancestor 轴从订单号跳到按钮
  • ✅ 练习目标 4:购物商城 — 依次定位分类侧边栏筛选商品 → 加入购物车 → 立即结算(计算小计/运费/满减)→ 去支付(模拟付款)

练习目标 1:商品管理表格(共 6 行,表格行具有data-id、data‑cat、data‑status业务属性)

操作步骤:
① 用 data-id 属性锁定行 → //tr[@data-id='P003']
② 文本包含匹配 → //tr[td[contains(.,'键盘')]]
③ 组合定位行内按钮 → //tr[@data-id='P003']//button[@data-act='edit']
④ 点击任意行的「查看/编辑/删除」按钮,观察效果区记录

SKU商品名分类库存状态操作
SKU-001机械键盘数码配件128在售
SKU-002无线鼠标数码配件256在售
SKU-003A4 打印纸(箱)办公用品0缺货
SKU-004精品咖啡豆食品饮料77在售
SKU-005Selenium 实战圣经图书文娱32下架
SKU-006USB-C 扩展坞数码配件41在售

练习目标 2:会员资料表单(disabled + radio checked + starts-with 练习)

操作步骤:
① 读取 disabled 会员编号 → driver.find_element(By.XPATH, "//input[@disabled]").get_attribute("value")
② 读取已勾选性别 radio → driver.find_element(By.XPATH, "//input[@type='radio' and @checked]").get_attribute("value")(页面默认是 O=保密)
③ 读取已勾选兴趣 checkbox → hobby_list = driver.find_elements(By.XPATH, "//input[@type='checkbox' and @checked]"),默认勾选 2 个;试试改成 //input[starts-with(@name,'xc_') and @checked],为什么变成 3 个了?(因为把已勾选 radio 也算进去了,starts-with 是前缀匹配,不管 type)
④ 点击「读取当前表单」观察效果区输出

会员资料

练习 XPath:disabled 属性、@checked、starts-with(@name,'xc_')、多属性 and 组合


练习目标 3:订单卡片(6 张;starts-with NO202608 + data-status + 轴定位「付款」按钮)

操作步骤:
① 用 starts-with 批量匹配订单号前缀 NO202608 → //*[starts-with(@data-oid,'NO202608')](6 张全命中)
② 叠加 data-status 过滤待付款 → //*[starts-with(@data-oid,'NO202608') and @data-status='pending'](命中 2 张:NO20260802 和 NO20260806)
点击「立即付款」按钮 —— 这里的难点:按钮没有 data 属性,怎么定位?
   a) 先定位到 pending 卡片容器 → pending = driver.find_element(By.XPATH, "//*[@data-status='pending']")(默认取第一张)
   b) 在容器内找按钮文字 → pending.find_element(By.XPATH, ".//button[text()='立即付款']").click()(注意 XPath 要以 . 开头表示"从当前节点往下找",否则又是全局搜索)
   c) 也可以用 following-sibling 轴从订单号跳到按钮://span[contains(.,'NO20260802')]/ancestor::*[@data-status='pending']//button[text()='立即付款']
④ 点击后观察:Toast 提示「发起支付流程」+ 效果区新增一行「订单卡片操作」日志(页面状态不会真的变化,这只是演示交互)

NO20260801已付款
商品:机械键盘 ×1
金额:¥399
下单时间:2026-08-22 10:12
NO20260802待付款
商品:4K 显示器 ×1
金额:¥1899
下单时间:2026-08-22 11:34
NO20260803已取消
商品:无线鼠标 ×2
金额:¥258
下单时间:2026-08-21 22:47
NO20260804已发货
商品:笔记本支架 ×1
金额:¥89
下单时间:2026-08-21 18:05
NO20260805已付款
商品:精品咖啡豆 ×3
金额:¥297
下单时间:2026-08-20 09:20
NO20260806待付款
商品:USB-C 扩展坞 ×1
金额:¥459
下单时间:2026-08-19 20:15

练习目标 4:购物商城(分类筛选 → 加购 → 结算 → 支付)

操作步骤:
① 点击侧边栏分类按钮筛选商品 → //aside[@id='xc_sidebar']//button
② 修改商品数量后加购 → //button[contains(@class,'btn-add-cart')]
③ 点击「立即结算」打开结算模态 → //div[@id='xc_checkout_modal'],查看小计/运费/满减计算
④ 点击「去支付」打开支付模态 → //div[@id='xc_pay_modal'],模拟付款完成

5 种商品
购物车:0
数码
机械键盘(青轴)
¥399
办公
A4 复印纸 5 包装
¥128
食品
精品咖啡豆 500g
¥99
图书
圣经(和合本精装)
¥69
数码
USB-C 扩展坞 12 合 1
¥459
XPath 定位效果展示

当前尚无操作记录

请尝试:① 商品表 view/edit/del 或库存合计 ② 读取/提交/重置会员资料 ③ 订单卡付款/详情/取消/确认收货 ④ 购物商城分类→加减数量→加购→结算→支付