From qa
Reusable logic to write/maintain a Playwright Java Page Object (Screen) + <Feature>Tests class + smoke/regression runner following the 3-layer POM, with correct locator priority and isDisplayed(), and NO assert in the Screen. Used by the cook/plan-tests command (creating a new feature or extending one). Hooks the missing-ids skill for elements lacking data-testid; verifies via the build-verify skill.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qa:cook-webThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Reusable capability: from the element catalog (`find-elements-web` skill) + plan → code following the 3-layer POM correctly. Standards: [design-pattern.md](../../rules/web/design-pattern.md), [coding-rules.md](../../rules/web/coding-rules.md), [design-system.md](../../rules/web/design-system.md).
Reusable capability: from the element catalog (find-elements-web skill) + plan → code following the 3-layer POM correctly. Standards: design-pattern.md, coding-rules.md, design-system.md.
<feature> slug → camel package) + the list of screens. One sub-screen = one separate Screen.src/main/java/.../screens/<feature>/<Name>Screen.java):
extends BaseScreen; constructor takes Page via super(page).submitButton, amountInput), chosen by priority getByRole > getByTestId > getByLabel/Placeholder/[name=] > getByText/heading > semantic CSS. NO xpath-index, .nth(), auto-generated classes.screenKeyLocator() = 1 key element (heading/marker, language-proof).this (fluent) or the next Screen; navigation → return the new Screen.isXxx) return a boolean, never throw an exception; wait with WaitUtils.isVisibleWithin(..., config.elementTimeout()), NO Thread.sleep.data-testid/id → temporarily use the best available locator + RECORD via the missing-ids skill (status:"missing" + suggestedTestId). Keycloak realm → external-sso.<Feature>Tests (src/test/java/.../tests/<feature>/<Feature>Tests.java): extends BaseTests, takes Page via super(page), NO @Test. Each method = 1 scenario, calls screen(Class) + contains ALL assertions (org.testng.Assert) with a message clearly stating the expectation + the actual value. Tests must be DEEP (design-pattern §2b): cross-checked figures match the source, click-through asserts a URL/heading change, expander reveals more data — not just isDisplayed().smoke/<feature>/<Feature>SmokeTest.java (extends BaseSmokeTest) + regressions/<feature>/<Feature>RegressionTest.java (extends BaseRegressionTest) — only @Test(groups=...) methods that call back into the functions in Tests (auth feature → extends BaseTest). Register into the suite configs/suites/*.xml.sitemap/screens/<id>.json for the screen just built.build-verify skill (mvn -q -B test-compile green) → re-run the class just written until green.This skill WRITES code; checking conformance is the
review-auditskill, fixing errors is thefix-by-layerskill. Reference templates:LoginScreen.java/LoginTests.java/LoginRegressionTest.java.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub hominhtuong/qa-claude-plugins --plugin qa