一键导入
gen-page-test
One-click generation of PageObject + matching tests. Trigger: new page, generate page, gen page, create page, add page object.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
One-click generation of PageObject + matching tests. Trigger: new page, generate page, gen page, create page, add page object.
用 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.
Replace placeholder locators with real selectors (six-level priority). Trigger: replace locator, locator, selector, locator failed, element not found, DOM analysis.
| name | gen-page-test |
| description | One-click generation of PageObject + matching tests. Trigger: new page, generate page, gen page, create page, add page object. |
User input: Generate a page object and tests for <PageName> (URL: https://...), test points: click A, fill B, view C
| Parameter | Required | Description | Example |
|---|---|---|---|
| Page name | Yes | Business name | Course Management Page |
| Page URL | Yes | Real accessible page URL (authenticated state) | https://example.com/xxx |
| Role | Yes | An existing role in the project (e.g. <role>) | Corresponding role |
| Class name | No (auto-derived) | PascalCase | <Role><Page>Page |
| Regression test points | Yes | Interaction elements to cover | Click create, search, delete |
Class name derivation rules:
Page suffix (e.g. <Feature>Page)<Role> + English translation → PascalCase + Page suffix (e.g. <Role><Feature>Page)<role>_ (e.g. <role>_<feature>_page.py)For the list of existing class names in the project, see docs/pages-catalog.md.
browser_navigate (prepend /entry?token=xxx if needed) → browser_snapshot → browser_evaluate to extract elements. Select stable locators using the six-level priority (P0 → P5) from locator-replacer.
Create pages/<snake_name>_page.py:
# Page name: <PageName>
from pages.base_page import BasePage
class <ClassName>(BasePage):
# Locators — from real page (<date>, URL: <page URL>)
<LOCATOR_1> = "<real locator>" # P<0-5>: description
<LOCATOR_2> = "<real locator>" # P<0-5>: description
PAGE_IDENTIFIER = "<page identifier locator>" # P<0-5>: description
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>
# Append "<ClassName>" to the __all__ list
Target file: the Test<Role>Flow class in the corresponding role's tests/<role>/test_<role>_flow.py (inheriting <Role>BaseTest).
Example for a role:
@allure.story("<Page Name>")
def test_<snake_name>(self):
page_obj = <ClassName>(self.<role>_page)
self.<role>_page.goto("<page URL>")
assert page_obj.is_page_loaded(), "<Page Name> failed to load"
page_obj.click_<method_1>()
...
If the navigation target leaves the portal layout, apply round-trip closure (see case-round-trip):
@allure.story("<Page Name>")
def test_<snake_name>(self):
self.<role>_home.click_<navigation>()
page_obj = <ClassName>(self.<role>_page)
assert page_obj.is_page_loaded(), "<Page Name> failed to load"
page_obj.click_<method_1>()
page_obj.click_back_to_<landing>()
assert self.<role>_home.is_page_loaded(), "Failed to return to start page"
pytest tests/<role>/test_<role>_flow.py --env=<pre|prod> -v -k "test_<snake_name>"
⚠️ Confirm --env with the user before running (see agent-behavior.md P0.2).
On failure → use locator-replacer to re-extract locators, or test-runner to analyze failure type.
docs/docs/pages-catalog.md: append new page class + method tabledocs/regression-points.md: append regression points table + key locator sectionGeneral checks (naming/imports/is_page_loaded/allure) → coding-conventions.md "New Test Checklist"
pytest tests/<role>/test_<role>_flow.py --env=<pre|prod> -v -k "test_<name>" passesdocs/pages-catalog.md has been updateddocs/regression-points.md has been updated