Dev Webtest Plan
classmethod/tsumiki
This skill should be used when the user asks to "dev-webtest-plan", "Webテスト計画を生成", "テスト計画を作成", "webtest plan", "E2Eテスト計画", "画面テスト計画", "generate webtest plan", "create test plan from requirements"…
Writes a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes.
$ npx skills add appsmithorg/appsmith --skill write-and-verify-pw-test -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install appsmithorg/appsmith write-and-verify-pw-test --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/appsmithorg/appsmith.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/write-and-verify-pw-test .claude/skills/write-and-verify-pw-test && 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 "write-and-verify-pw-test" agent skill from https://github.com/appsmithorg/appsmith/tree/release/.cursor/skills/write-and-verify-pw-test into .claude/skills/write-and-verify-pw-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-and-verify-pw-test", 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/appsmithorg/appsmith/tree/release/.cursor/skills/write-and-verify-pw-testType 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 appsmithorg/appsmith --skill write-and-verify-pw-test -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install appsmithorg/appsmith write-and-verify-pw-test --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/appsmithorg/appsmith.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.cursor/skills/write-and-verify-pw-test .agents/skills/write-and-verify-pw-test && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "write-and-verify-pw-test" agent skill from https://github.com/appsmithorg/appsmith/tree/release/.cursor/skills/write-and-verify-pw-test into .agents/skills/write-and-verify-pw-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-and-verify-pw-test", 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 appsmithorg/appsmith --skill write-and-verify-pw-test -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install appsmithorg/appsmith write-and-verify-pw-test --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/appsmithorg/appsmith.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.cursor/skills/write-and-verify-pw-test .cursor/skills/write-and-verify-pw-test && 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 "write-and-verify-pw-test" agent skill from https://github.com/appsmithorg/appsmith/tree/release/.cursor/skills/write-and-verify-pw-test into .cursor/skills/write-and-verify-pw-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-and-verify-pw-test", 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/appsmithorg/appsmith.git --path .cursor/skills/write-and-verify-pw-test--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 appsmithorg/appsmith --skill write-and-verify-pw-test -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install appsmithorg/appsmith write-and-verify-pw-test --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/appsmithorg/appsmith.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.cursor/skills/write-and-verify-pw-test .gemini/skills/write-and-verify-pw-test && 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 "write-and-verify-pw-test" agent skill from https://github.com/appsmithorg/appsmith/tree/release/.cursor/skills/write-and-verify-pw-test into .gemini/skills/write-and-verify-pw-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-and-verify-pw-test", 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 appsmithorg/appsmith write-and-verify-pw-testInstalls 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 appsmithorg/appsmith --skill write-and-verify-pw-test -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/appsmithorg/appsmith.git skills-src && mkdir -p .github/skills && cp -r skills-src/.cursor/skills/write-and-verify-pw-test .github/skills/write-and-verify-pw-test && 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 "write-and-verify-pw-test" agent skill from https://github.com/appsmithorg/appsmith/tree/release/.cursor/skills/write-and-verify-pw-test into .github/skills/write-and-verify-pw-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-and-verify-pw-test", 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 appsmithorg/appsmith --skill write-and-verify-pw-test -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install appsmithorg/appsmith write-and-verify-pw-test --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/appsmithorg/appsmith.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.cursor/skills/write-and-verify-pw-test .opencode/skills/write-and-verify-pw-test && 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 "write-and-verify-pw-test" agent skill from https://github.com/appsmithorg/appsmith/tree/release/.cursor/skills/write-and-verify-pw-test into .opencode/skills/write-and-verify-pw-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-and-verify-pw-test", 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.
write-and-verify-pw-testWrites a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes.
The agent first makes sure Chromium is available for Playwright, then runs a configure-env.js script that creates or merges the app/client/playwright/.env file. The script takes only the variables you supply, such as the target deployment URL, login credentials, a datasource host, Gitea settings for git tests and JSON feature-flag overrides, and keeps existing values for everything else. The skill is tied to the Appsmith repository layout and to a deployment that is actually running.
Before writing a spec it reads the project's Playwright conventions. Imports come from the local fixtures instead of @playwright/test, locators prefer getByRole, then getByLabel, then getByTestId, then shared selector constants, never raw CSS. Hard waits and networkidle are out, assertions must auto-retry, API paths, selectors and routes come from constants, and page objects take a Page, hold no assertions and keep methods short. Before any API request it greps the server controller for exact parameter names. It then decides where the test belongs, writes the spec, runs it and auto-fixes failures up to three times.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 552488b. 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.
Ships 1 file in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
npxnodeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
target-dp.appsmith.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GITEA_API_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Write and Verify Playwright Tests loads about 2.9k tokens when it runs. Until then it costs about 97 tokens; SKILL.md has 1,136 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 noted patterns worth knowing about, such as sudo or a known installer.
script to set up `app/client/playwright/.env`. It creates the file if missing and merges new values with any existing o| `USERNAME` | If no `.env` exists | Login credentials || `PASSWORD` | If no `.env` exists | Login credentials |`PW_FLAG_OVERRIDES` can go in `.env` via the script, or be passed inline when running tests (see Step 6).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); the scripts in this folder are not scanned.
The full file from appsmithorg/appsmith at commit 552488b, republished under its Apache-2.0 licence (© appsmithorg). 1,136 words, ~2,914 tokens.
.claude/skills/write-and-verify-pw-test/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Before starting, ensure Chromium is available:
cd app/client && npx playwright install chromium 2>/dev/nullRun the configure-env.sh script to set up app/client/playwright/.env. It creates the file if missing and merges new values with any existing ones.
node .cursor/skills/write-and-verify-pw-test/scripts/configure-env.js \
--PLAYWRIGHT_BASE_URL=https://target-dp.appsmith.com \
--USERNAME=user@example.com \
--PASSWORD=secretPass only the variables the caller provided. The script preserves existing values for anything not overridden. Supported variables:
| Variable | Required | Notes |
|---|---|---|
PLAYWRIGHT_BASE_URL | Yes | Target deployment URL |
USERNAME | If no .env exists | Login credentials |
PASSWORD | If no .env exists | Login credentials |
DATASOURCE_HOST | No | For datasource tests |
GITEA_BASE_URL | No | For git tests |
GITEA_API_TOKEN | No | For git tests |
GIT_CLONE_URL | No | For git tests |
PW_FLAG_OVERRIDES | No | JSON string, e.g. '{"flag": true}' |
PW_FLAG_OVERRIDES can go in .env via the script, or be passed inline when running tests (see Step 6).
Before writing any spec, read these files for conventions (they are auto-applied when editing playwright/**/*.ts, but read them explicitly here):
.cursor/rules/playwright.mdc — full conventions (POM rules, selectors, assertions, wait strategy)Key rules to internalize:
import { test, expect } from "../../fixtures" (not @playwright/test)getByRole() > getByLabel() > getByTestId() > SELECTORS from constants. Never raw CSS.waitForTimeout, no networkidle. Wait for meaningful elements.await expect(locator).toBeVisible(), not expect(await locator.isVisible()).toBe(true)playwright/constants/api-routes.ts, selectors from playwright/constants/selectors.ts, routes from playwright/constants/routes.ts. Never hardcode.Page. No assertions in POMs. 1-5 lines per method.request.get/request.post, grep the server for the controller to confirm exact parameter names.| Tier | Directory | When |
|---|---|---|
| smoke | playwright/tests/smoke/ | Login, create app, basic alive checks |
| sanity | playwright/tests/sanity/<feature>/ | Core flows for a feature area |
| regression | playwright/tests/regression/<feature>/ | Edge cases, complex interactions |
| ee | playwright/tests/ee/{sanity,regression}/<feature>/ | EE-only features |
If the caller specifies a tier, use it. Otherwise, default to sanity.
Feature subdirectories are mandatory under sanity/ and regression/.
Read playwright.config.ts to understand the current projects and their setup chains.
Use an existing project when the new spec:
testDirtests/sanity/widgets/chart.spec.ts → use the sanity projectCreate a new project when the new spec:
playwright.mdc (Parallelization section):playwright/fixtures/<name>.setup.ts — performs the operation, writes state to playwright/.state/<name>.jsonplaywright/fixtures/<name>.teardown.ts — cleans upplaywright/helpers/<name>-state.ts — typed accessor for test filesplaywright.config.ts with dependencies, testDir, and teardownSplit into multiple spec files when:
migration-mysql.spec.ts, migration-postgres.spec.ts, migration-modal-form.spec.ts — all under regression/git/, all share the migration-setup project, each focused on one pageRule of thumb: One test.describe per spec file, one concern per test(). If the prompt covers multiple concerns, prefer multiple small specs over one large one.
Write the spec file following these patterns. Reference existing examples:
Simple spec (smoke-level):
import { test, expect } from "../../fixtures";
import { ROUTES } from "../../constants/routes";
test.describe("Smoke — Feature Name", () => {
test("behavior description in lowercase", async ({ page }) => {
await page.goto(ROUTES.applications);
await expect(page.getByRole("button", { name: /new/i })).toBeVisible();
});
});Spec with fixture workspace/app (sanity/regression):
import { test, expect } from "../../fixtures";
import { SELECTORS } from "../../constants/selectors";
test.describe("Feature — Specific Area", () => {
test("filters table by country", async ({ page, app }) => {
await page.goto(app.url);
await expect(page.locator(SELECTORS.widgetInDeployed("textwidget")).first()).toBeVisible();
// test logic here
});
});If a POM is needed, create it under playwright/page-objects/ (or components/ for reusable widgets). Follow existing patterns like home.page.ts.
After writing each file, run:
cd app/client && npx eslint <spec-file-path> --ext .tsFix any issues before proceeding.
The config chains setup projects: signup-setup → setup → your test project. This handles fresh deployments automatically:
playwright/auth/user.jsonThis chain runs automatically when you use --project. Never bypass it by running test files directly without a project flag.
Critical: Each project in playwright.config.ts has its own testDir, dependencies, and sometimes testIgnore. The spec must be run under the project whose testDir matches and whose dependency chain includes the required setup.
Read playwright.config.ts and match your spec's directory to a project. Current mapping:
| Spec directory | --project flag | Setup chain |
|---|---|---|
tests/smoke/ | smoke | signup → auth |
tests/sanity/ | sanity | signup → auth |
tests/regression/ (non-git) | regression | signup → auth |
tests/regression/git/ | regression-git | signup → auth → migration-setup (+ teardown) |
Why this matters: Some projects have extra setup phases (e.g., regression-git depends on migration-setup which imports a Git app and creates datasources). Specs in those directories read shared state produced by the setup (e.g., loadMigrationState()). Running them under the wrong project skips that setup and they fail immediately.
When writing a new spec that needs a custom setup project (e.g., it relies on pre-imported data, a connected datasource, or shared app state):
playwright.mdc (Parallelization section)playwright.config.ts with proper dependencies and testDirIf the config has changed since this skill was written, always read playwright.config.ts to get the current project list. Don't rely on this table alone.
cd app/client && npx playwright test <spec-file-path> --project=<project>If PW_FLAG_OVERRIDES was provided:
cd app/client && PW_FLAG_OVERRIDES='{"flag_name": true}' npx playwright test <spec-file-path> --project=<project>Timeout: Set block_until_ms to at least 120000 (2 min). Tests can take 60s+ with signup + auth setup on first run against a fresh deployment.
If the test fails, classify the failure:
locator.click: Target closed → wrong selector or premature navigationTimeout + element exists in DOM but not visible → missing wait or wrong locatorstrict mode violation → locator matches multiple elements, needs .first() or refinementError: expect(received).toHaveText(expected) where expected value is clearly wrong → bad test datawaiting for locator → selector doesn't match anything, check the actual pageAction: Read the error output, fix the spec, re-run. This is attempt N+1.
expect(received).toHaveText(expected) where expected is correct but received shows clearly wrong app behaviornet::ERR_CONNECTION_REFUSED → deployment is down401 / 403 after successful auth setup → permission regressionAction: Stop retrying. Switch to the diagnose-pw-failure skill. See .cursor/skills/diagnose-pw-failure/SKILL.md.
Default to "fix the spec" for the first 2 attempts. If the same assertion fails 3 times with the same received value, it's likely a product bug — switch to diagnosis.
After the test passes (or after exhausting retries), provide a summary:
On success:
## Playwright Test Result: PASS
**Spec**: playwright/tests/sanity/widgets/table-filter.spec.ts
**Deployment**: https://my-dp.appsmith.com
**Project**: sanity
**Attempts**: 2 (1 fix applied: wrong selector for filter button)
### What was tested
- Table widget renders with data
- Filtering by country "Ba" shows BangladeshOn failure (product bug):
## Playwright Test Result: FAIL (product bug suspected)
**Spec**: playwright/tests/sanity/widgets/table-filter.spec.ts
**Deployment**: https://my-dp.appsmith.com
**Attempts**: 3 (spec verified correct)
### Failure
- Table filter returns empty results when filtering by "Ba"
- Expected: rows containing "Bangladesh"
- Received: 0 rows
- Screenshot: playwright/results/<test-name>/screenshot.png
### Diagnosis
[See diagnose-pw-failure output]© appsmithorg, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in .cursor/skills/write-and-verify-pw-test of appsmithorg/appsmith.
Open the folder on GitHubat commit 552488b
Write and Verify Playwright Tests 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 |
|---|---|---|---|---|---|---|
| Write and Verify Playwright Tests this skillappsmithorg/appsmith | 41k | — | ~2.9k | Automated safety check: Notes | Apache-2.0 | |
| Dev Webtest Planclassmethod/tsumiki | 974 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Record E2E Giflablup/backend.ai-webui | 133 | — | ~907 | Automated safety check: Notes | LGPL-3.0 | |
| Replica TestJakeschincariol/replica-skill | 908 | — | ~819 | Automated safety check: Pass | MIT | |
| Playwright Testingaehrc/pathling | 137 | — | ~1.5k | Automated safety check: Pass | Apache-2.0 | |
| Senior QAalirezarezvani/claude-skills | 28k | 1 repos | ~2.1k | Automated safety check: Pass | MIT |
classmethod/tsumiki
This skill should be used when the user asks to "dev-webtest-plan", "Webテスト計画を生成", "テスト計画を作成", "webtest plan", "E2Eテスト計画", "画面テスト計画", "generate webtest plan", "create test plan from requirements"…
lablup/backend.ai-webui
Record Playwright e2e tests as one GIF per test case (video → ffmpeg palette GIF) and return a markdown table for a PR description.
Jakeschincariol/replica-skill
Clicks through every flow of an app clone and tests it for bugs: a test plan generated from the recon flows with happy paths and edge cases, Playwright end-to-end tests where possible, a browser…
aehrc/pathling
Expert guidance for writing end-to-end tests with Playwright Test framework.
alirezarezvani/claude-skills
Generates unit tests, integration tests, and E2E tests for React/Next.js applications.
alirezarezvani/claude-skills
Generate Playwright tests. An agent skill from alirezarezvani/claude-skills.
appsmithorg/appsmith
Investigates a stubbornly failing Playwright test as a possible product bug, using error output, screenshots, traces and server code, and writes a structured bug report.
appsmithorg/appsmith
Fixes failing Playwright specs by reading the error, classifying the cause in the test code and applying corrections that follow project conventions.
Works with
Categories
Writes a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes. env file. The script takes only the variables you supply, such as the target deployment URL, login credentials, a datasource host, Gitea settings for git tests and JSON feature-flag overrides, and keeps existing values for everything else.
Write and Verify Playwright Tests fits situations like: writing a new Playwright end-to-end test for an Appsmith feature; verifying a user flow against a deployed Appsmith instance; creating a spec that follows the project's page object and selector conventions.
Run `npx skills add appsmithorg/appsmith --skill write-and-verify-pw-test -a claude-code`. Or copy the skill folder (.cursor/skills/write-and-verify-pw-test in appsmithorg/appsmith) into .claude/skills/write-and-verify-pw-test in your project. Claude Code loads it when a task matches its description.
Run `npx skills add appsmithorg/appsmith --skill write-and-verify-pw-test -a codex`. Or copy the skill folder (.cursor/skills/write-and-verify-pw-test in appsmithorg/appsmith) into .agents/skills/write-and-verify-pw-test 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 appsmithorg/appsmith --skill write-and-verify-pw-test -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/write-and-verify-pw-test, .gemini/skills/write-and-verify-pw-test, .github/skills/write-and-verify-pw-test and .opencode/skills/write-and-verify-pw-test in your project.
Going by SKILL.md and its folder, Write and Verify Playwright Tests needs JavaScript for the scripts in its folder, the command-line tools its instructions call (npx and node) and credentials named GITEA_API_TOKEN. Our summary lists: The Appsmith repository with its app/client folder; Chromium installed through Playwright; A live Appsmith deployment URL and login credentials; Node.js.
SKILL.md names 1 domain. In commands or code: target-dp.appsmith.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Write and Verify Playwright Tests is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k 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 Write and Verify Playwright Tests: Dev Webtest Plan (classmethod/tsumiki, 974 stars), Record E2E Gif (lablup/backend.ai-webui, 133 stars), Replica Test (Jakeschincariol/replica-skill, 908 stars) and Playwright Testing (aehrc/pathling, 137 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
appsmithorg (a GitHub organization) maintains it in appsmithorg/appsmith, which has 41,030 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 8, 2026.
Source: appsmithorg/appsmith on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.