Playwright Page Objects
bartstc/vite-ts-react-template
A skill your agent uses when creating page objects or refactoring Playwright E2E tests for better maintainability with Page Object Model patterns.
TypeScript enum conventions for the Playwright scaffold — PascalCase enum names, SCREAMINGSNAKECASE members, location rules for app-specific (enums/{area}/) vs shared/utility (enums/util/)…
$ npx skills add idavidov13/agentic-playwright --skill enums -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install idavidov13/agentic-playwright enums --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/idavidov13/agentic-playwright.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/enums .claude/skills/enums && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "enums" agent skill from https://github.com/idavidov13/agentic-playwright/tree/main/.claude/skills/enums into .claude/skills/enums/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enums", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/idavidov13/agentic-playwright/tree/main/.claude/skills/enumsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add idavidov13/agentic-playwright --skill enums -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install idavidov13/agentic-playwright enums --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/idavidov13/agentic-playwright.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/enums .agents/skills/enums && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "enums" agent skill from https://github.com/idavidov13/agentic-playwright/tree/main/.claude/skills/enums into .agents/skills/enums/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enums", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add idavidov13/agentic-playwright --skill enums -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install idavidov13/agentic-playwright enums --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/idavidov13/agentic-playwright.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/enums .cursor/skills/enums && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "enums" agent skill from https://github.com/idavidov13/agentic-playwright/tree/main/.claude/skills/enums into .cursor/skills/enums/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enums", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/idavidov13/agentic-playwright.git --path .claude/skills/enums--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add idavidov13/agentic-playwright --skill enums -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install idavidov13/agentic-playwright enums --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/idavidov13/agentic-playwright.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/enums .gemini/skills/enums && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "enums" agent skill from https://github.com/idavidov13/agentic-playwright/tree/main/.claude/skills/enums into .gemini/skills/enums/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enums", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install idavidov13/agentic-playwright enumsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add idavidov13/agentic-playwright --skill enums -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/idavidov13/agentic-playwright.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/enums .github/skills/enums && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "enums" agent skill from https://github.com/idavidov13/agentic-playwright/tree/main/.claude/skills/enums into .github/skills/enums/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enums", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add idavidov13/agentic-playwright --skill enums -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install idavidov13/agentic-playwright enums --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/idavidov13/agentic-playwright.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/enums .opencode/skills/enums && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "enums" agent skill from https://github.com/idavidov13/agentic-playwright/tree/main/.claude/skills/enums into .opencode/skills/enums/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enums", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
enumsTypeScript enum conventions for the Playwright scaffold — PascalCase enum names, SCREAMINGSNAKECASE members, location rules for app-specific (enums/{area}/) vs shared/utility (enums/util/)…
Enums is an agent skill from idavidov13/agentic-playwright. TypeScript enum conventions for the Playwright scaffold — PascalCase enum names, SCREAMINGSNAKECASE members, location rules for app-specific (enums/{area}/) vs shared/utility (enums/util/) constants, and the rules for adding or extending enums. Use when adding a new API endpoint path, UI message, role, storage-state path, route, or any repeated string constant defined by the application; when deciding whether a new value belongs in enums/, config/, or test-data/static/; or when extending an existing enum. For…
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering REST APIs, Browser testing and Test data and fixtures. It works with Playwright and TypeScript. The repository describes itself as: Production-grade Playwright + TypeScript Scaffold for Agentic Testing. Harness for all major AI coding agents baked in. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f6cbf35. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Enums loads about 3k tokens when it runs. Until then it costs about 173 tokens; SKILL.md has 1,298 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from idavidov13/agentic-playwright at commit f6cbf35, republished under its MIT licence (© idavidov13). 1,298 words, ~2,985 tokens.
.claude/skills/enums/SKILL.md (or your agent's skills folder).enum — the scaffold uses the language construct enum, not as const object literals. Stay consistent.Messages, ApiEndpoints, Roles, StorageStatePaths).LOGIN_SUCCESS, CURRENT_USER, APP).enums/{area}/*.ts; cross-app constants go in enums/util/*.ts. Do not invent a new top-level folder.playwright-cli from the live app, not guessed.refactor-values. Renaming a key or changing a value cascades through tests, page objects, and schemas.
{area}is a placeholder. Before creating or referencing any path below, runls enums/to discover the real subdirectory names in this repo (e.g.,front-office,back-office) and use those instead.
| Type | Directory | Naming | Scaffold examples |
|---|---|---|---|
| App-specific enums | enums/{area}/ | [name].ts | Messages, ApiEndpoints, StorageStatePaths (in enums/app/app.ts) |
| Shared / utility enums | enums/util/ | [name].ts | Roles (in enums/util/roles.ts) |
Use this decision table. Each row points to the canonical home — use it to prevent enums/ from overlapping with config/ or test-data/static/.
| Value kind | Home |
|---|---|
Endpoint path (/api/users/login), route (/login), storage-state path | enums/{area}/* |
| UI message the app defines (error, success, validation, label, page title) | enums/{area}/* — verify text against the live app via playwright-cli |
Role / permission name (admin, user, guest) | enums/util/* (shared across apps) |
| HTTP status code, well-known cross-app constant | enums/util/* |
| URL of the app or a utility service, credentials, tokens | config/ + env var — not an enum (see the config skill) |
| Curated test inputs (invalid emails, weak passwords, out-of-range numbers) | test-data/static/ — not an enum (see the data-strategy skill) |
| Timeouts, retries, workers, project-wide Playwright tuning | playwright.config.ts — not an enum |
| String literal used in exactly one place (single assertion, single setup) | Inline in the consumer — do not promote to an enum |
If the value fits none of these rows, stop and ask. Do not invent a new location.
Prefer extending an existing enum file within the same domain over creating a new file. The goal is to keep related constants together so consumers have one predictable import per domain.
Messages), add it there.checkout domain that warrants its own file), create enums/{area}/checkout.ts and add one or more enums to it.enums/util/*.ts.Messages, ApiEndpoints, Roles, StorageStatePaths).Correct:
export enum ApiEndpoints {
LOGIN = '/api/users/login',
CURRENT_USER = '/api/users/me',
}Incorrect:
| Wrong | Problem | Correct |
|---|---|---|
export enum API_ENDPOINTS { ... } | Enum name is SCREAMING_SNAKE instead of PascalCase | export enum ApiEndpoints { ... } |
export enum apiEndpoints { ... } | Enum name is camelCase instead of PascalCase | export enum ApiEndpoints { ... } |
LOGIN_Success = '...' | Member mixes cases | LOGIN_SUCCESS = '...' |
loginSuccess = '...' | Member is camelCase instead of SCREAMING_SNAKE_CASE | LOGIN_SUCCESS = '...' |
LOGIN = '/api/users/Login' | Value case drifted from the real app path (/login) | LOGIN = '/api/users/login' |
When the enum mirrors UI text (error messages, success messages, validation text, button labels, page titles), the string value must come from observing the live application — not from assumptions, design specs, or guesses.
Workflow:
playwright-cli skill (.claude/skills/playwright-cli/SKILL.md).playwright-cli to trigger the relevant action in the app.If the app is unavailable, add the value with a // FIXME: unverified comment and flag it for confirmation once exploration is possible. Do not ship unverified message values.
Every enum declaration gets a JSDoc comment describing the group:
/** Common UI messages displayed to the user */
export enum Messages {
LOGIN_SUCCESS = 'Successfully logged in',
LOGIN_ERROR = 'Invalid email or password',
}Re-use the pattern from enums/app/app.ts. The file itself may also carry a top-level JSDoc with an @example block (as the existing enums/app/app.ts does) when useful.
When you need to change an enum member's string value or rename a member key, the change cascades through tests, page objects, API schemas, and data-driven loops.
Read the refactor-values skill (.claude/skills/refactor-values/SKILL.md) before touching an existing enum. It owns the impact-analysis and cascading-update workflow.
User says: "Add tests for POST /api/products."
Actions:
enums/{area}/* (app-specific).ApiEndpoints already exists in enums/app/app.ts → extend it, don't create a new file.PRODUCTS = '/api/products' (PascalCase enum, SCREAMING_SNAKE_CASE member, exact path case).ApiEndpoints already covers the group; no extra JSDoc needed for a single new member.ApiEndpoints.PRODUCTS (never hardcode /api/products).User says: "Assert the payment-failed message shows after a failed checkout."
Actions:
enums/{area}/*.Messages already exists in enums/app/app.ts → extend it.playwright-cli, trigger the failed-payment flow, capture the exact rendered text.PAYMENT_FAILED = '<captured text>'.await expect(page.getByText(Messages.PAYMENT_FAILED)).toBeVisible();.User says: "Support a moderator role in the test matrix."
Actions:
enums/util/*.Roles already exists in enums/util/roles.ts → extend it.MODERATOR = 'moderator' (value is the exact wire string the app uses).I'm about to hardcode /api/users/login in a test.
Fix: Use ApiEndpoints.LOGIN from enums/app/app.ts. Any endpoint path used in more than one place must come from an enum.
I'm about to hardcode an error message like 'Invalid credentials' in an assertion.
Fix: Use Messages.* from enums/app/app.ts. Verify the exact text via playwright-cli first (Phase 4); add a new member if needed.
My enum value doesn't match the real UI text and a test fails at expect(...).toBeVisible().
Fix: Re-run playwright-cli to capture the actual rendered string (case, punctuation, whitespace). Update via the refactor-values workflow — do not fix it with a local find-and-replace that misses other consumers.
I need to rename an enum member (e.g., LOGIN_FAILED → LOGIN_REJECTED).
Fix: Stop. Read the refactor-values skill first. Use its impact-analysis workflow to find every consumer before renaming.
My new value is an array (e.g., [...invalid emails]).
Fix: That's not an enum — enums are named string constants, not collections of data. Put it in test-data/static/{area}/*.ts as an as const export (see the data-strategy skill).
I want to put a URL like https://staging.example.com in an enum.
Fix: URLs are environment-dependent and belong in config/ + process.env.* (see the config skill). Enums are for source-controlled app-defined values.
TypeScript complains about enum in my linter config.
Cause: Some TS style guides discourage enum in favour of as const objects.
Fix: The scaffold's convention is TypeScript enum. If the linter flags it, configure the lint rule to allow enum at the repo level rather than migrating one file.
config skill — where URLs, credentials, and env-driven settings live (not enums).data-strategy skill — where curated arrays of test inputs live (not enums).playwright-cli skill — how to capture the real UI text before encoding it as a message enum value.refactor-values skill — impact analysis and cascading update workflow for enum renames and value changes.api-testing skill — consumer of ApiEndpoints.* for all endpoint references.debugging skill — when an assertion fails because Messages.X drifted from the live UI text, or when a test calls the wrong endpoint because ApiEndpoints.X is stale.© idavidov13, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/enums of idavidov13/agentic-playwright.
Open the folder on GitHubat commit f6cbf35
Enums next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Enums this skillidavidov13/agentic-playwright | 223 | — | ~3k | Automated safety check: Pass | MIT | |
| Playwright Page Objectsbartstc/vite-ts-react-template | 122 | — | ~1k | Automated safety check: Notes | MIT | |
| RStudio Selenium to Playwright Migrationrstudio/rstudio | 5.1k | — | ~3.6k | Automated safety check: Pass | Custom licence | |
| Playwright Coretestdino-hq/playwright-skill | 386 | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Svelte Testingspences10/sveltest | 113 | — | ~579 | Automated safety check: Pass | MIT | |
| API Testingfugazi/test-automation-skills-agents | 247 | — | ~1.5k | Automated safety check: Pass | MIT |
bartstc/vite-ts-react-template
A skill your agent uses when creating page objects or refactoring Playwright E2E tests for better maintainability with Page Object Model patterns.
rstudio/rstudio
Converts RStudio Python Selenium electron tests into TypeScript Playwright tests, checking each against a live RStudio before counting it as migrated.
testdino-hq/playwright-skill
Battle-tested Playwright patterns for writing and debugging reliable E2E, API, component, visual, accessibility, and security tests.
spences10/sveltest
Fix and create Svelte 5 tests with vitest-browser-svelte and Playwright.
fugazi/test-automation-skills-agents
Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java).
andrewyng/context-hub
Collects reusable Playwright patterns for logging in during end-to-end tests: password forms, OAuth redirects, saved browser state and TOTP two-factor codes.
idavidov13/agentic-playwright
Sole entry-point router for AI-assisted work on this Playwright scaffold — owns the 8-phase main workflow (classify → route → explore → plan+confidence → human gate → apply → verify → report), the…
idavidov13/agentic-playwright
Copy-paste AI prompt templates for common Playwright scaffold development tasks — adding page objects, functional/E2E/API tests, Zod schemas, factories, fixtures, and components.
idavidov13/agentic-playwright
Test data strategy for the Playwright scaffold — Faker + Zod factories for dynamic happy-path data, static TS files (.ts with as const exports — never .json) for domain-specific curated invalid…
idavidov13/agentic-playwright
Page Object Model pattern for the Playwright scaffold — class structure, get-accessor locator pattern, action-method conventions, component composition, registration via the page-object fixture, and…
idavidov13/agentic-playwright
Selector strategy, exploration-first workflow, locator priority order (getByRole then getByLabel then getByPlaceholder then getByText then getByTestId), and feedback/validation-message selector…
idavidov13/agentic-playwright
Spec file conventions for the Playwright scaffold — imports from test-options.ts, test file structure (describe / beforeEach / test / test.step), single-tag rule, functional vs E2E vs API vs setup…
Works with
Categories
TypeScript enum conventions for the Playwright scaffold — PascalCase enum names, SCREAMINGSNAKECASE members, location rules for app-specific (enums/{area}/) vs shared/utility (enums/util/)…. Enums is an agent skill from idavidov13/agentic-playwright. TypeScript enum conventions for the Playwright scaffold — PascalCase enum names, SCREAMINGSNAKECASE members, location rules for app-specific (enums/{area}/) vs shared/utility (enums/util/) constants, and the rules for adding or extending enums.
Enums fits situations like: adding a new API endpoint path; storage-state path; any repeated string constant defined by the application; deciding whether a new value belongs in enums/.
Run `npx skills add idavidov13/agentic-playwright --skill enums -a claude-code`. Or copy the skill folder (.claude/skills/enums in idavidov13/agentic-playwright) into .claude/skills/enums in your project. Claude Code loads it when a task matches its description.
Run `npx skills add idavidov13/agentic-playwright --skill enums -a codex`. Or copy the skill folder (.claude/skills/enums in idavidov13/agentic-playwright) into .agents/skills/enums in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add idavidov13/agentic-playwright --skill enums -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/enums, .gemini/skills/enums, .github/skills/enums and .opencode/skills/enums in your project.
SKILL.md names no scripts, command-line tools or credentials: Enums is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Enums is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Enums: Playwright Page Objects (bartstc/vite-ts-react-template, 122 stars), RStudio Selenium to Playwright Migration (rstudio/rstudio, 5.1k stars), Playwright Core (testdino-hq/playwright-skill, 386 stars) and Svelte Testing (spences10/sveltest, 113 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
idavidov13 (a GitHub user) maintains it in idavidov13/agentic-playwright, which has 223 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 1, 2026.
Source: idavidov13/agentic-playwright on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.