Audit and improve web accessibility following WCAG 2.1 guidelines. Use when the task involves `improve accessibility`, `a11y audit`, `WCAG compliance`, `screen reader support`, `keyboard navigation`, or `make accessible`.
日本語の概要は準備中です。原文の説明を表示しています。
Comprehensive Playwright E2E testing skill combining planning, generation, and healing. Trigger: When writing, debugging, or planning E2E tests, working with *.spec.ts files, Playwright config, test fixtures, or when asked to create/fix/plan browser tests.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Unified skill for planning, generating, and healing Playwright E2E tests in this monorepo.
*.spec.ts files in packages/testing-e2e/tests/e2e/packages/testing-e2e/ # Shared E2E package (canonical source)
├── tests/
│ ├── e2e/ # All E2E spec files
│ │ ├── seed-portfolio.spec.ts # Seed for portfolio app
│ │ ├── seed-blog.spec.ts # Seed for blog app
│ │ ├── contact-form.spec.ts
│ │ └── i18n-*.spec.ts
│ └── fixtures/
│ └── index.ts # Shared helpers, selectors, mocks, i18n data
├── specs/
│ ├── portfolio/ # Test plans for portfolio
│ └── blog/ # Test plans for blog
apps/portfolio/
│ └── playwright.config.ts # Port 4173, includes all specs
apps/blog/
└── playwright.config.ts # Port 4174, ignores contact-form.spec.ts
packages/testing-e2e/tests/e2e/../fixturesplaywright.config.ts with different baseURL and testIgnorecontact-form.spec.ts (contact form only exists in portfolio)@axe-core/playwright 4.11.1 available for a11y testingSeed tests bootstrap the page context for test agents. Use the app-specific seed:
// For portfolio tests
// seed: packages/testing-e2e/tests/e2e/seed-portfolio.spec.ts
// For blog tests
// seed: packages/testing-e2e/tests/e2e/seed-blog.spec.ts
planner_setup_page once before any browser toolsbrowser_* tools to navigate and discover the interfaceplanner_save_plan to write the Markdown specEach scenario in the plan must include:
# [App Name] - [Feature] Test Plan
## Application Overview
Brief description of the feature under test.
## Test Scenarios
### 1. [Scenario Group Name]
**Seed:** `packages/testing-e2e/tests/e2e/seed-[app].spec.ts`
#### 1.1 [Scenario Name]
**Steps:**
1. Navigate to [page]
2. Click [element]
3. Type [value]
**Expected Results:**
- [Assertion 1]
- [Assertion 2]
specs/ and needs implementationgenerator_setup_page for the scenariogenerator_read_loggenerator_write_test with the generated source code// spec: specs/portfolio/contact-form.md
// seed: packages/testing-e2e/tests/e2e/seed-portfolio.spec.ts
import { test, expect } from "@playwright/test";
import { selectors, helpers, testData } from "../fixtures";
test.describe("Contact Form Validation", () => {
test("Submit valid contact form", async ({ page }) => {
// 1. Navigate to the contact page
await page.goto("/contact");
// 2. Fill in the name field
await page.getByLabel("Name").fill(testData.contact.valid.name);
// 3. Fill in the email field
await page.getByLabel("Email").fill(testData.contact.valid.email);
// 4. Submit the form
await page.getByRole("button", { name: /send/i }).click();
// Expected: Success message appears
await expect(page.getByText(/message sent/i)).toBeVisible();
});
});
test.describe matches the top-level plan item (without ordinal)selectors, helpers, testData, mockResponses from ../fixturespackages/testing-e2e/tests/e2e/ (or subdirectories)test_run to identify failing teststest_debugnetworkidle or use deprecated APIstest.fixme() with a comment explaining the issue| Priority | Locator | Example |
|---|---|---|
| 1 | Role-based | page.getByRole('button', { name: 'Submit' }) |
| 2 | Label-based | page.getByLabel('Email address') |
| 3 | Placeholder | page.getByPlaceholder('Search...') |
| 4 | Text content | page.getByText('Welcome back') |
| 5 | Test ID | page.getByTestId('submit-btn') |
| 6 | CSS selector | page.locator('[data-test="form"]') |
ALWAYS check packages/testing-e2e/tests/fixtures/index.ts for existing selectors before creating new ones:
import { selectors } from "../fixtures";
// ✅ Use centralized selectors
await page.locator(selectors.contact.form).isVisible();
await page.locator(selectors.navigation.mainNav).click();
// ❌ Don't hardcode selectors in test files
await page.locator('[data-test="contact-form"]').isVisible();
// Verify element visibility
await expect(page.getByRole("heading", { name: "Contact" })).toBeVisible();
// Verify form state
await expect(page.getByLabel("Email")).toHaveValue("user@example.com");
await expect(page.getByRole("button", { name: "Submit" })).toBeEnabled();
// Verify list content
await expect(page.getByRole("listitem")).toHaveCount(3);
// Verify URL navigation
await expect(page).toHaveURL(/\/contact$/);
Use for structural validation of complex UI:
await expect(page.getByRole("navigation")).toMatchAriaSnapshot(`
- navigation:
- link "Home"
- link "Blog"
- link "Contact"
`);
Use the shared mockResponses and helpers.mockContactApi() from fixtures:
import { mockResponses, helpers } from "../fixtures";
test("handles API error gracefully", async ({ page }) => {
// Mock API to return error
await page.route("**/api/contact", (route) =>
route.fulfill(mockResponses.contact.error)
);
// ... test steps ...
});
# Run all E2E tests (portfolio then blog)
pnpm test:e2e
# Portfolio only
pnpm --filter=portfolio test:e2e
# Blog only
pnpm --filter=blog test:e2e
# Interactive modes
pnpm --filter=portfolio test:e2e:ui # UI mode
pnpm --filter=portfolio test:e2e:headed # Headed browser
pnpm --filter=portfolio test:e2e:debug # Debug mode
# Single browser
pnpm --filter=portfolio test:e2e:chromium
# Mobile viewports
pnpm --filter=portfolio test:e2e:mobile
# Generate report
pnpm --filter=portfolio test:e2e:report
# Code generation helper
pnpm --filter=portfolio test:e2e:codegen
❌ Hardcoded selectors — Use shared selectors from fixtures
❌ networkidle waits — Deprecated and flaky; use specific element waits
❌ page.waitForTimeout() — Fragile; wait for specific conditions instead
❌ force: true clicks — Hides real accessibility issues
❌ Duplicate test data — Use shared testData and mockResponses
❌ Tests depending on other tests — Each test must be independent
❌ Screenshots for validation — Prefer snapshot assertions and structural checks
❌ Raw CSS selectors — Prefer role/label/text locators first
Leverage @axe-core/playwright for automated a11y checks:
import AxeBuilder from "@axe-core/playwright";
test("contact page has no a11y violations", async ({ page }) => {
await page.goto("/contact");
const results = await new AxeBuilder({ page })
.withTags(["wcag2a", "wcag2aa"])
.analyze();
expect(results.violations).toEqual([]);
});
| Setting | Portfolio | Blog |
|---|---|---|
| Base URL | http://127.0.0.1:4173 | http://127.0.0.1:4174 |
| Timeout | 120s | 120s |
| Expect timeout | 10s | 10s |
| Action timeout | 15s | 15s |
| Retries (CI) | 2 | 2 |
| Retries (local) | 1 | 1 |
| Workers (CI) | 2 | 2 |
| Browsers | Chromium, Firefox, WebKit, Mobile Chrome, Mobile Safari | Same |
| Test ignore | — | contact-form.spec.ts |
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Audit and improve web accessibility following WCAG 2.1 guidelines. Use when the task involves `improve accessibility`, `a11y audit`, `WCAG compliance`, `screen reader support`, `keyboard navigation`, or `make accessible`.
日本語の概要は準備中です。原文の説明を表示しています。
Skill for building with the Astro web framework. Helps create Astro components and pages, configure SSR adapters, set up content collections, deploy static sites, and manage project structure and CLI commands. Use when the user needs to work with Astro, mentions .astro files, asks about static site generation (SSG), islands architecture, content collections, or deploying an Astro project.
日本語の概要は準備中です。原文の説明を表示しています。
Astro framework patterns and best practices for content-focused sites. Trigger: When working with .astro files, content collections, or Astro routing.
日本語の概要は準備中です。原文の説明を表示しています。
Apply modern web development best practices for security, compatibility, and code quality. Use when the task involves `apply best practices`, `security audit`, `modernize code`, `code quality review`, or `check for vulnerabilities`.
日本語の概要は準備中です。原文の説明を表示しています。
Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.
日本語の概要は準備中です。原文の説明を表示しています。
Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.
日本語の概要は準備中です。原文の説明を表示しています。