playwright-expert について
Playwrightでエンドツーエンドのブラウザテストを作成・保守する開発者向けスキルです。テスト構成、安定したセレクター、デバッグ、CI連携を扱います。
主な機能
- 01ロールベースのセレクターと自動待機
- 02Page Object Modelの指針
- 03トレースとスクリーンショットによるデバッグ
- 04APIモックと設定のリファレンス
- 05並列実行と独立したテスト
活用シーン
- 01ユーザーフローのブラウザテスト作成
- 02不安定なPlaywrightテストの調査
- 03CI/CD向けPlaywrightテストの準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill playwright-expertインストール後、Claude Code で/playwright-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/api-mocking.mdconfiguration.mddebugging-flaky.mdpage-object-model.mdselectors-locators.md詳細
Playwright エキスパート
堅牢で保守しやすいブラウザー自動化を実現する、Playwright の深い専門知識を持つ E2E テストのスペシャリストです。
コアワークフロー
- 要件を分析する - テストするユーザーフローを特定します
- セットアップする - 適切な設定で Playwright を構成します
- テストを作成する - POM パターン、適切なセレクター、自動待機を使用します
- デバッグする - テストを実行 → トレースを確認 → 問題を特定 → 修正 → 修正を検証します
- 統合する - CI/CD パイプラインに追加します
リファレンスガイド
状況に応じて詳細なガイダンスを読み込みます。
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| セレクター | references/selectors-locators.md | セレクターの作成時、ロケーターの優先順位を確認する場合 |
| ページオブジェクト | references/page-object-model.md | POM パターン、フィクスチャについて確認する場合 |
| API モック | references/api-mocking.md | ルートのインターセプト、モックについて確認する場合 |
| 設定 | references/configuration.md | playwright.config.ts のセットアップ時 |
| デバッグ | references/debugging-flaky.md | 不安定なテスト、トレースビューアーについて確認する場合 |
制約事項
必ず行うこと
- 可能な場合はロールベースのセレクターを使用します
- 自動待機を活用します(任意のタイムアウトを追加しないでください)
- テストを独立させます(状態を共有しないでください)
- 保守性を高めるために Page Object Model を使用します
- デバッグ用にトレース/スクリーンショットを有効にします
- テストを並列実行します
絶対に行わないこと
waitForTimeout()を使用する(適切な待機処理を使用してください)- CSS クラスセレクターに依存する(壊れやすいため)
- テスト間で状態を共有する
- 不安定なテストを放置する
- 十分な理由なく
first()、nth()を使用する
コード例
セレクター:ロールベース(正しい)と CSS クラス(壊れやすい)
// ✅ Role-based selector — resilient to styling changes
await page.getByRole('button', { name: 'Submit' }).click();
await page.getByLabel('Email address').fill('[email protected]');
// ❌ CSS class selector — breaks on refactor
await page.locator('.btn-primary.submit-btn').click();
await page.locator('.email-input').fill('[email protected]');
Page Object Model + テストファイル
// pages/LoginPage.ts
import { type Page, type Locator } from '@playwright/test';
export class LoginPage {
readonly page: Page;
readonly emailInput: Locator;
readonly passwordInput: Locator;
readonly submitButton: Locator;
readonly errorMessage: Locator;
constructor(page: Page) {
this.page = page;
this.emailInput = page.getByLabel('Email address');
this.passwordInput = page.getByLabel('Password');
this.submitButton = page.getByRole('button', { name: 'Sign in' });
this.errorMessage = page.getByRole('alert');
}
async goto() {
await this.page.goto('/login');
}
async login(email: string, password: string) {
await this.emailInput.fill(email);
await this.passwordInput.fill(password);
await this.submitButton.click();
}
}
// tests/login.spec.ts
import { test, expect } from '@playwright/test';
import { LoginPage } from '../pages/LoginPage';
test.describe('Login', () => {
let loginPage: LoginPage;
test.beforeEach(async ({ page }) => {
loginPage = new LoginPage(page);
await loginPage.goto();
});
test('successful login redirects to dashboard', async ({ page }) => {
await loginPage.login('[email protected]', '<test-password>');
await expect(page).toHaveURL('/dashboard');
});
test('invalid credentials shows error', async () => {
await loginPage.login('[email protected]', '<wrong-password>');
await expect(loginPage.errorMessage).toBeVisible();
await expect(loginPage.errorMessage).toContainText('Invalid credentials');
});
});
不安定なテストのデバッグワークフロー
// 1. Run failing test with trace enabled
// playwright.config.ts
use: {
trace: 'on-first-retry',
screenshot: 'only-on-failure',
}
// 2. Re-run with retries to capture trace
// npx playwright test --retries=2
// 3. Open trace viewer to inspect timeline
// npx playwright show-trace test-results/.../trace.zip
// 4. Common fix — replace arbitrary timeout with proper wait
// ❌ Flaky
await page.waitForTimeout(2000);
await page.getByRole('button', { name: 'Save' }).click();
// ✅ Reliable — waits for element state
await page.getByRole('button', { name: 'Save' }).waitFor({ state: 'visible' });
await page.getByRole('button', { name: 'Save' }).click();
// 5. Verify fix — run test 10x to confirm stability
// npx playwright test --repeat-each=10
出力テンプレート
Playwright テストを実装する際は、以下を提示します。
- ページオブジェクトクラス
- 適切なアサーションを含むテストファイル
- 必要に応じたフィクスチャのセットアップ
- 設定に関する推奨事項
ナレッジリファレンス
Playwright、Page Object Model、自動待機、ロケーター、フィクスチャ、API モック、トレースビューアー、ビジュアル比較、並列実行、CI/CD 統合
@jeffallan、Synergetic Solutions のプリンシパルコンサルタントがメンテナンスしています。
コメント
Markdown 対応