بنقرة واحدة
gen-page-test
一键生成 PageObject + 配套测试。触发:新增页面、生成页面、gen page、create page、添加页面对象。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
一键生成 PageObject + 配套测试。触发:新增页面、生成页面、gen page、create page、添加页面对象。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Incrementally add regression test points to an existing PageObject. Trigger: add test point, add regression point, add test point, increase coverage, extend page methods.
POM layering and context sharing decision tree. Trigger: architecture, layering, POM, Page Object, base class design, add new role.
Browser viewport / headless / timeout layered configuration. Trigger: viewport, browser config, navigation timeout, headless, slow_mo, incognito.
Under a shared page, a test case that leaves the start page must return via the UI and assert. Trigger: round-trip closure, case round trip, reset timeout, scope shared page.
AST knowledge graph: change review, exploration, debugging, refactoring. Trigger: knowledge graph, code review, impact analysis, blast radius, refactoring.
One-click generation of PageObject + matching tests. Trigger: new page, generate page, gen page, create page, add page object.
| name | gen-page-test |
| description | 一键生成 PageObject + 配套测试。触发:新增页面、生成页面、gen page、create page、添加页面对象。 |
用户输入:为 <中文页面名>(URL: https://...)生成页面对象和测试,测试点:点击A、填写B、查看C
| 参数 | 必填 | 说明 | 示例 |
|---|---|---|---|
| 页面名称 | 是 | 中文业务名称 | 课程管理页 |
| 页面 URL | 是 | 真实可访问的页面 URL(已认证态) | https://example.com/xxx |
| 角色 | 是 | 项目中已有的角色(如 <role>) | 对应角色 |
| 类名 | 否(自动推导) | PascalCase | <Role><Page>Page |
| 回归测试点 | 是 | 需要覆盖的交互元素 | 点击新建、搜索、删除 |
类名推导规则:
Page 后缀(如 <Feature>Page)<Role> + 英文翻译 → PascalCase + Page 后缀(如 <Role><Feature>Page)<role>_(如 <role>_<feature>_page.py)项目中已有的具体类名清单见 docs/pages-catalog.md。
browser_navigate(必要时先 /entry?token=xxx)→ browser_snapshot → browser_evaluate 提取元素。按 locator-replacer 六级优先级(P0 → P5)选出稳定定位符。
创建 pages/<snake_name>_page.py:
# 页面名称:<中文名>
from pages.base_page import BasePage
class <ClassName>(BasePage):
# 定位符 — 来自真实页面(<日期>,URL: <页面URL>)
<LOCATOR_1> = "<真实定位符>" # P<0-5>: 说明
<LOCATOR_2> = "<真实定位符>" # P<0-5>: 说明
PAGE_IDENTIFIER = "<页面标识定位符>" # P<0-5>: 说明
def click_<method_1>(self):
self.click(self.<LOCATOR_1>)
def click_<method_2>(self):
self.click(self.<LOCATOR_2>)
def is_page_loaded(self) -> bool:
return self.is_visible(self.PAGE_IDENTIFIER)
pages/__init__.pyfrom pages.<snake_name>_page import <ClassName>
# 在 __all__ 列表中追加 "<ClassName>"
目标文件:对应角色 tests/<role>/test_<role>_flow.py(继承 <Role>BaseTest)中的 Test<Role>Flow 类。
对应角色示例:
@allure.story("<页面中文名>")
def test_<snake_name>(self):
page_obj = <ClassName>(self.<role>_page)
self.<role>_page.goto("<页面URL>")
assert page_obj.is_page_loaded(), "<页面中文名>加载失败"
page_obj.click_<method_1>()
...
对应角色使用 self.<role>_page,且若脱离门户布局须往返闭合(见 case-round-trip):
@allure.story("<页面中文名>")
def test_<snake_name>(self):
self.<role>_home.click_<navigation>()
page_obj = <ClassName>(self.<role>_page)
assert page_obj.is_page_loaded(), "<页面中文名>加载失败"
page_obj.click_<method_1>()
page_obj.click_back_to_<landing>()
assert self.<role>_home.is_page_loaded(), "返回起点失败"
pytest tests/<role>/test_<role>_flow.py --env=<pre|prod> -v -k "test_<snake_name>"
⚠️ 运行前向用户确认 --env(见 agent-behavior.md P0.2)。
失败时 → locator-replacer 重新抽取定位符,或 test-runner 分析失败类型。
docs/docs/pages-catalog.md:追加新页面类 + 方法表docs/regression-points.md:追加回归点表 + 关键定位符段通用检查(命名/导入/is_page_loaded/allure)→ coding-conventions.md "新增测试检查清单"
pytest tests/<role>/test_<role>_flow.py --env=<pre|prod> -v -k "test_<name>" 通过docs/pages-catalog.md 已追加docs/regression-points.md 已追加