07 元素的属性是动态变化的,比如 id 每次刷新都不一样,怎么定位?
2026/9/8...大约 2 分钟
07|元素的属性是动态变化的,比如 id 每次刷新都不一样,怎么定位?
开场先分类再给解法:动态属性分两类——部分固定部分变化(id 前缀固定后缀随机)和整体随机。两类解法不同,先问清楚或先观察规律再动手。
回答思路
第一步:部分固定的用模糊匹配
- xpath:
starts-with、contains、ends-with函数,匹配固定那段 - css:
^=、$=、*=对应同样语义
现场能报出这些操作符是基本功。
第二步:整体随机的换锚点
不用这个元素自己的属性,从它旁边的稳定元素出发——xpath 轴定位找父级、兄弟、祖先的后代,先定位稳定的邻居再相对定位到目标。这是本题的标准答案。
第三步:再给两条辅助路
- 结合多个条件组合定位(and 拼接 class 加 text)
- 请开发加稳定的测试专用属性(data-testid)——后者是最健康的解法,能主动说「推动开发加测试属性」的是有工程影响力的
收尾:补一句反模式
绝对路径 xpath(从 html 开始数层级)是最后手段——页面稍微一动就全挂。宁可和开发协商加属性,也不要写脆如纸的绝对路径。
考察重点
| 维度 | 说明 |
|---|---|
| 企业动机 | 阿里、字节自动化面试真题盘点的原题。现代前端框架(React、Vue)渲染的页面大量使用动态属性——不会处理等于做不了真实项目的 UI 自动化 |
| 过线标准 | 模糊匹配函数 + xpath 轴定位换锚点,两条路至少讲一条 |
| 区分度 | 主动提「让开发加 data-testid」的是有跨职能推动力的;只会 contains 一招的是没见过复杂场景 |
| 加分项 | 现场能写出 starts-with 或轴定位的语法示例 |
| 减分项 | 回答「刷新几次等 id 变回稳定的」,暴露对动态渲染机制完全不懂 |
来源
整理自知识星球帖《面试情报 03|自动化测试 20 题》,返回题库。