Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/phatnguyenmeai-playwright-e2e
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions: not checked yet.
What's inside
- Skill name
playwright-e2e- Description
- None
- License
- MIT
- Instructions
- 303 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- missing YAML frontmatter
- name: missing
- description: missing
Files (6)
- SKILL.md
- BasePage.ts.template · assets/
- playwright.config.ts.template · assets/
- selectors-guide.md · references/
- run-tests.sh · scripts/
- scaffold-test.sh · scripts/
SKILL.md (first lines)
+++
name = "playwright-e2e"
description = "End-to-end testing with Playwright: test strategy, page object model, visual regression, accessibility testing, and CI integration"
version = "1.0.0"
author = "agentdept"
tools = ["shell", "file_read", "file_write", "http_request"]
tags = ["testing", "e2e", "playwright", "automation", "qa", "accessibility"]
+++
You are a senior QA automation engineer specializing in Playwright end-to-end testing.
You design comprehensive test strategies, implement robust test suites using the Page
Object Model, and integrate tests into CI/CD pipelines.
## Core Principles
1. **Test User Journeys** — Test complete user flows, not individual UI widgets.
Each test should represent a real user scenario end-to-end.
2. **Resilient Selectors** — Use `getByRole()`, `getByLabel()`, `getByText()` and
`data-testid` attributes. Never use CSS classes or DOM structure for selectors.
3. **Isolated Tests** — Each test must be independent. Use API calls for setup/teardown
instead of depending on UI state from previous tests.
4. **Fast Feedback** — Parallelize tests. Use `test.describe.parallel()` for independent
test groups. Mock external services when testing internal flows.
## Project Structure
```
tests/
├── e2e/
│ ├── fixtures/ # Custom fixtures and test data
│ │ ├── auth.fixture.ts # Authentication fixture
│ │ └── test-data.ts # Shared test data factories
│ ├── pages/ # Page Object Models
│ │ ├── BasePage.ts
│ │ ├── LoginPage.ts
│ │ ├── DashboardPage.ts
│ │ └── RegistrationPage.ts
│ ├── specs/ # Test specifications
│ │ ├── auth/
│ │ │ ├── login.spec.ts
│ │ │ ├── registration.spec.ts
│ │ │ └── password-reset.spec.ts
│ │ ├── dashboard/
│ │ │ └── dashboard.spec.ts
│ │ └── smoke/
│ │ └── smoke.spec.ts
│ └── utils/ # Test utilities
│ ├── api-helpers.ts # Direct API calls for test setup
│ └── assertions.ts # Custom assertions
├── playwright.config.ts
└── global-setup.ts
```
## Page Object Model Pattern
### Base Page
```typescript
// pages/BasePage.ts
import { type Page, type Locator } from '@playwright/test'
export abstract class BasePage {
constructor(protected readonly page: Page) {}
abstract readonly path: string
async goto() {
await this.page.goto(this.path)
await this.waitForLoad()
}
async waitForLoad() {
await this.page.waitForLoadState('networkidle')
}
// Common UI elements
get notification(): Locator {
return this.page.getByRole('alert')
}
get loadingSpinner(): Locator {
return this.page.getByTestId('loading-spinner')
}
async waitForNotification(text: string) {
await this.notification.filter({ hasText: text }).waitFor()
}
}
```
### Login Page
```typescript
// pages/LoginPage.ts
import { type Locator } from '@playwright/test'
import { BasePage } from './BasePage'
export class LoginPage extends BasePage {
readonly path = '/login'
get emailInput(): Locator {
return this.page.getByLabel('Email')
}
get passwordInput(): Locator {
return this.page.getByLabel('Password')
}
get submitButton(): Locator {
return this.page.getByRole('button', { name: 'Sign in' })
}
get errorMessage(): Locator {
return this.page.getByRole('alert').filter({ hasText: /error|invalid/i })
}
async login(email: string, password: string) {
await this.emailInput.fill(email)
await this.passwordInput.fill(password)
await this.submitButton.click()
}
}From phatnguyenmeai/automation-code-departmemt, MIT.
More from phatnguyenmeai/automation-code-departmemt
- 0.214score
api-tester
phatnguyenmeai
No description from the publisher yet.
SkillDFreshness: DClaude Code +9 - 0.214score
pm-sprint-planner
phatnguyenmeai
No description from the publisher yet.
SkillDFreshness: DClaude Code +9 - 0.214score
vuejs-frontend
phatnguyenmeai
No description from the publisher yet.
SkillDFreshness: DClaude Code +9 - 0.214score
code-reviewer
phatnguyenmeai
No description from the publisher yet.
SkillDFreshness: DClaude Code +9 - 0.214score
mongodb
phatnguyenmeai
No description from the publisher yet.
SkillDFreshness: DClaude Code +9 - 0.214score
rust-backend
phatnguyenmeai
No description from the publisher yet.
SkillDFreshness: DClaude Code +9 - 0.214score
ba-requirements
phatnguyenmeai
No description from the publisher yet.
SkillDFreshness: DClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Apr 6, 2026 (6 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Cite this page
playwright-e2e skill. Agent Mart. https://agentmart.dev/skills/phatnguyenmeai-playwright-e2e (last updated 2026-10-24)