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

case-round-trip

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

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

연동 도구Playwright
설치 방법 보기

포함된 파일(1)

  • SKILL.md3.6 KB

SKILL.md(원문)

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

Case Round Trip — 用例往返闭合

仅适用 Playwright + pytest。

核心规则

共享 page(scope > function 的 fixture)下,用例离开起点页后必须在末尾通过真实 UI 返回并断言;不要在复位 fixture 里做 goto 兜底。

何时适用

  • 多个用例共享一个 page / browser context(class/module/session scope)
  • 用例会进入"脱离门户布局"的页面(子路由、沉浸式页面、跨子域)
  • 复位 fixture 依赖门户布局才有的元素(侧边栏 / 顶部 nav)

做法

  1. 给每个会"脱离门户布局"的 PageObject 加 click_back_to_<landing>(),走真实 UI 返回按钮
  2. 用例主断言后显式调用返回方法,并再次断言起点页加载
  3. 复位 fixture 保持最简单形态(仅走门户导航),不做 goto 兜底
def test_enter_detail(self):
    self.home.click_first_item()
    detail = DetailPage(self.page)
    assert detail.is_page_loaded(), "详情页未加载"

    detail.click_back_to_home()
    assert self.home.is_page_loaded(), "返回起点页失败"

起点 is_page_loaded 的严格判据

复位 fixture 通常判断 if not start.is_page_loaded(): start.click_back_to_landing()。若 is_page_loaded() 仅校验"页面骨架可见"(title / 容器),切到其他 tab/子路由后骨架仍在 → 返回 True → 复位永不触发 → 下一用例起点错乱。

规则:起点 PageObject 的 is_page_loaded() 必须包含"当前停留在起点状态"判据(起点 tab 激活态 / 起点 URL / 起点独有内容),而不仅是"骨架存在"。

# ❌ 只校验骨架 — 切到其他 tab 后仍返回 True,复位失效
def is_page_loaded(self) -> bool:
    return self.is_visible(self.PAGE_TITLE) and self.is_visible(self.TAB_BAR)

# ✅ 加"当前在起点 tab"判据 — tab 切换后返回 False,触发复位
def is_page_loaded(self) -> bool:
    return (
        self.is_visible(self.PAGE_TITLE)
        and self.is_visible(self.TAB_BAR)
        and self.is_visible(self.LANDING_TAB_ACTIVE_MARK)   # 关键第 3 条
    )

LANDING_TAB_ACTIVE_MARK 的 selector 必须用 text= 等锁定到具体起点 tab(如 .tab.active >> text=<起点 tab 名>),否则 .active 会匹配任意激活 tab,同样失效(见 locator-strategy.md 状态类 selector 必须配 text 锁定)。

决策

跳转目标是否仍保留起点页的门户导航?
├─ 是 → 依赖复位 fixture 即可
└─ 否 → PageObject 必须提供返回方法 + 用例末尾显式返回 + 断言

❌ 反例

  • 进入沉浸式页面后只断言进入,不返回 → 后续用例复位 fixture 点不到门户导航
  • page.goto(<landing_url>) 绕过返回按钮 → 失去对返回按钮的回归覆盖
  • if not visible: goto(...) 塞进复位 fixture → 掩盖"用例未闭合"真问题

检查清单

  • 跳转目标脱离门户布局 → 本规则适用
  • PageObject 提供 click_back_to_<landing>()
  • 用例末尾调用返回方法并断言起点页加载
  • 测试顺序打乱仍全部通过

项目落地参考

项目中脱离门户布局的 PageObject(需实现 click_back_to_<landing>)见 docs/pages-catalog.md 与 docs/regression-points.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일 업데이트

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

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

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

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

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

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

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

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

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

DanielSuo117의 스킬 모두 보기

이 스킬의 문제 신고