본문으로 건너뛰기
cccskills
무료GitHub에 공개

locator-replacer

替换占位定位符为真实选择器(六级优先级)。触发:替换定位符、locator、selector、定位失败、元素找不到、DOM 分析。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(3)

  • SKILL.md4.3 KB
  • references/priority-levels.md3.7 KB
  • references/troubleshooting.md595 B

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Locator Replacer — 定位符替换 Skill

适用场景

  • 将页面对象中 text= 占位定位符替换为真实选择器
  • 前端构建后原有选择器失效,需要重新定位
  • 新增页面元素需要选择最佳定位策略

定位符选择策略(六级优先级)

按优先级从高到低,逐级尝试,选中即停。优先使用页面上已有的语义化信息, 避免依赖需要前端额外配合的属性。

级别策略抗什么代价
P0ARIA role + 可见文本CSS 重构、构建哈希文案变更需同步
P1可见文本CSS 重构、构建哈希文案变更需同步、可能不唯一
P2表单特有属性(name/placeholder/type)样式与文案变更仅适用于表单控件
P3语义化 CSS class / id文案变更样式重构即失效
P4data-testid几乎全部需前端配合添加
P5相对 XPath / CSS 结构——最脆弱,最后手段

完整写法、判断依据与代码示例 → references/priority-levels.md

执行流程

Step 1: 分析目标页面 DOM

使用 agent-browser 打开目标页面,获取交互元素信息(工具选型遵循 agent-behavior P0.4,agent-browser 未安装时降级到 Playwright MCP):

操作步骤:
1. browser_navigate → 访问目标页面(已认证状态)
2. browser_snapshot → 获取页面无障碍树(accessibility tree)
3. browser_evaluate → 执行 JS 提取元素属性:
   - document.querySelectorAll('[data-testid]')  → 已有 testid
   - document.querySelectorAll('[role]')          → ARIA role
   - document.querySelectorAll('button, a, input') → 交互元素

Step 2: 为每个元素选择定位策略

对照页面对象中的每个占位定位符,按 P0→P5 逐级尝试,命中即停:

检查顺序条件使用
P0有 role + namerole=button[name='...']
P1text= 唯一且稳定text=...(标记"已验证唯一")
P2表单属性(placeholder/name/type)[placeholder='...']
P3稳定 CSS class(非哈希)css=.xxx
P4有 data-testid[data-testid='...']
P5以上均无相对 XPath(≤3 层)

Step 3: 更新页面对象

class <PageName>(BasePage):
    # 定位符 — 已替换为真实选择器(<日期>)
    <PRIMARY_ACTION_BTN> = "role=button[name='<按钮文案>']"  # P0: ARIA role
    <SECONDARY_LINK> = "text=<链接文案>"                      # P1: text(已验证唯一)
    PAGE_IDENTIFIER = "role=heading[name='<页面标题>']"       # P0: ARIA role

更新规则:

  • 在定位符行尾注释标注选择级别(# P0: ARIA role / # P1: text / ... / # P4: testid / # P5: XPath)
  • 如果 text= 经验证确实稳定且唯一,注释标记 # P1: text(已验证唯一)
  • 删除原来的 # 定位符 — 后续替换为实际选择器 注释
  • 更新为 # 定位符 — 已替换为真实选择器(日期)

Step 4: 验证

# 在对应角色的回归文件中跑指定用例(运行前向用户确认 --env,见 agent-behavior P0.2)
pytest framework/tests/<role>/test_<role>_flow.py --env=<pre|prod> -v -k "test_<story_name>"

Step 5: 同步更新文档

更新 docs/regression-points.md 中对应 PageObject 的"关键定位符"段。


定位符质量检查清单

替换完成后,逐项确认:

  • 没有使用绝对 XPath(/html/body/...)
  • 没有使用哈希类名(sc-xxx, css-xxx, _module_xxx)
  • 没有使用纯数字索引(div[3],除非列表取第 N 项)
  • 每个定位符行尾标注了选择级别(# P0 ~ # P5)
  • XPath 层级不超过 3 层
  • 主流程测试在真实环境通过

常见问题处理

同一文本重复、元素无稳定属性、构建后批量失效等症状的处理方式 → references/troubleshooting.md

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

为已有 PageObject 增量添加回归测试点。触发:新增测试点、添加回归点、add test point、增加覆盖、扩展页面方法。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

DanielSuo117/velocitai1592026년 9월 28일 업데이트

POM 分层与 context 共享决策树。触发:架构、分层、POM、Page Object、基类设计、新增角色。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

DanielSuo117/velocitai1592026년 9월 28일 업데이트

浏览器 viewport / headless / 超时分层配置。触发:viewport、浏览器配置、导航超时、headless、slow_mo、incognito。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

DanielSuo117/velocitai1592026년 9월 28일 업데이트

共享 page 下用例离开起点后必须 UI 返回并断言。触发:往返闭合、case round trip、复位超时、scope 共享 page。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

DanielSuo117/velocitai1592026년 9월 28일 업데이트

AST 知识图谱:变更审查、探索、调试、重构。触发:知识图谱、代码审查、影响分析、爆炸半径、重构。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

DanielSuo117/velocitai1592026년 9월 28일 업데이트

一键生成 PageObject + 配套测试。触发:新增页面、生成页面、gen page、create page、添加页面对象。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

DanielSuo117/velocitai1592026년 9월 28일 업데이트

DanielSuo117의 스킬 모두 보기

이 스킬의 문제 신고