Initialize Playwright Project

Set up Playwright in a project.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/pw-init, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit alirezarezvani/claude-skills/engineering-team/playwright-pro/skills/pw-init#main ~/.claude/skills/pw-init

For one project only, change the path to .claude/skills/pw-init. This skill also uses package.json, Next.js, tsconfig.json, index.ts, playwright.yml — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Initialize Playwright Project

Show the full text202 lines
namedescription
pw-init>- Set up Playwright in a project. Use when user says "set up playwright", add e2e tests", "configure playwright", "testing setup", "init playwright", or "add test infrastructure".

Initialize Playwright Project

Set up a production-ready Playwright testing environment. Detect the framework, generate config, folder structure, example test, and CI workflow.

Steps

1. Analyze the Project

Use the Explore subagent to scan the project:

  • Check package.json for framework (React, Next.js, Vue, Angular, Svelte)
  • Check for tsconfig.json → use TypeScript; otherwise JavaScript
  • Check if Playwright is already installed (@playwright/test in dependencies)
  • Check for existing test directories (tests/, e2e/, __tests__/)
  • Check for existing CI config (.github/workflows/, .gitlab-ci.yml)
2. Install Playwright

If not already installed:

npm init playwright@latest -- --quiet

Or if the user prefers manual setup:

npm install -D @playwright/test
npx playwright install --with-deps chromium
3. Generate playwright.config.ts

Adapt to the detected framework:

Next.js:

import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  testDir: './e2e',
  fullyParallel: true,
  forbidOnly: !!process.env.CI,
  retries: process.env.CI ? 2 : 0,
  workers: process.env.CI ? 1 : undefined,
  reporter: [
    ['html', { open: 'never' }],
    ['list'],
  ],
  use: {
    baseURL: 'http://localhost:3000',
    trace: 'on-first-retry',
    screenshot: 'only-on-failure',
  },
  projects: [
    { name: "chromium", use: { ...devices['Desktop Chrome'] } },
    { name: "firefox", use: { ...devices['Desktop Firefox'] } },
    { name: "webkit", use: { ...devices['Desktop Safari'] } },
  ],
  webServer: {
    command: 'npm run dev',
    url: 'http://localhost:3000',
    reuseExistingServer: !process.env.CI,
  },
});

React (Vite):

  • Change baseURL to http://localhost:5173
  • Change webServer.command to npm run dev

Vue/Nuxt:

  • Change baseURL to http://localhost:3000
  • Change webServer.command to npm run dev

Angular:

  • Change baseURL to http://localhost:4200
  • Change webServer.command to npm run start

No framework detected:

  • Omit webServer block
  • Set baseURL from user input or leave as placeholder
4. Create Folder Structure
e2e/
├── fixtures/
│   └── index.ts          # Custom fixtures
├── pages/
│   └── .gitkeep          # Page object models
├── test-data/
│   └── .gitkeep          # Test data files
└── example.spec.ts       # First example test
5. Generate Example Test
import { test, expect } from '@playwright/test';

test.describe('Homepage', () => {
  test('should load successfully', async ({ page }) => {
    await page.goto('/');
    await expect(page).toHaveTitle(/.+/);
  });

  test('should have visible navigation', async ({ page }) => {
    await page.goto('/');
    await expect(page.getByRole('navigation')).toBeVisible();
  });
});
6. Generate CI Workflow

If .github/workflows/ exists, create playwright.yml:

name: "playwright-tests"

on:
  push:
    branches: [main, dev]
  pull_request:
    branches: [main, dev]

jobs:
  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: lts/*
      - name: "install-dependencies"
        run: npm ci
      - name: "install-playwright-browsers"
        run: npx playwright install --with-deps
      - name: "run-playwright-tests"
        run: npx playwright test
      - uses: actions/upload-artifact@v4
        if: ${{ !cancelled() }}
        with:
          name: "playwright-report"
          path: playwright-report/
          retention-days: 30

If .gitlab-ci.yml exists, add a Playwright stage instead.

7. Update .gitignore

Append if not already present:

/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/
8. Add npm Scripts

Add to package.json scripts:

{
  "test:e2e": "playwright test",
  "test:e2e:ui": "playwright test --ui",
  "test:e2e:debug": "playwright test --debug"
}
9. Verify Setup

Run the example test:

npx playwright test

Report the result. If it fails, diagnose and fix before completing.

Output

Confirm what was created:

  • Config file path and key settings
  • Test directory and example test
  • CI workflow (if applicable)
  • npm scripts added
  • How to run: npx playwright test or npm run test:e2e
1---
2name: "pw-init"
3description: >-
4 Set up Playwright in a project. Use when user says "set up playwright",
5 "add e2e tests", "configure playwright", "testing setup", "init playwright",
6 or "add test infrastructure".
7---
8 
9# Initialize Playwright Project
10 
11Set up a production-ready Playwright testing environment. Detect the framework, generate config, folder structure, example test, and CI workflow.
12 
13## Steps
14 
15### 1. Analyze the Project
16 
17Use the `Explore` subagent to scan the project:
18 
19- Check `package.json` for framework (React, Next.js, Vue, Angular, Svelte)
20- Check for `tsconfig.json` → use TypeScript; otherwise JavaScript
21- Check if Playwright is already installed (`@playwright/test` in dependencies)
22- Check for existing test directories (`tests/`, `e2e/`, `__tests__/`)
23- Check for existing CI config (`.github/workflows/`, `.gitlab-ci.yml`)
24 
25### 2. Install Playwright
26 
27If not already installed:
28 
29```bash
30npm init playwright@latest -- --quiet
31```
32 
33Or if the user prefers manual setup:
34 
35```bash
36npm install -D @playwright/test
37npx playwright install --with-deps chromium
38```
39 
40### 3. Generate `playwright.config.ts`
41 
42Adapt to the detected framework:
43 
44**Next.js:**
45```typescript
46import { defineConfig, devices } from '@playwright/test';
47 
48export default defineConfig({
49 testDir: './e2e',
50 fullyParallel: true,
51 forbidOnly: !!process.env.CI,
52 retries: process.env.CI ? 2 : 0,
53 workers: process.env.CI ? 1 : undefined,
54 reporter: [
55 ['html', { open: 'never' }],
56 ['list'],
57 ],
58 use: {
59 baseURL: 'http://localhost:3000',
60 trace: 'on-first-retry',
61 screenshot: 'only-on-failure',
62 },
63 projects: [
64 { name: "chromium", use: { ...devices['Desktop Chrome'] } },
65 { name: "firefox", use: { ...devices['Desktop Firefox'] } },
66 { name: "webkit", use: { ...devices['Desktop Safari'] } },
67 ],
68 webServer: {
69 command: 'npm run dev',
70 url: 'http://localhost:3000',
71 reuseExistingServer: !process.env.CI,
72 },
73});
74```
75 
76**React (Vite):**
77- Change `baseURL` to `http://localhost:5173`
78- Change `webServer.command` to `npm run dev`
79 
80**Vue/Nuxt:**
81- Change `baseURL` to `http://localhost:3000`
82- Change `webServer.command` to `npm run dev`
83 
84**Angular:**
85- Change `baseURL` to `http://localhost:4200`
86- Change `webServer.command` to `npm run start`
87 
88**No framework detected:**
89- Omit `webServer` block
90- Set `baseURL` from user input or leave as placeholder
91 
92### 4. Create Folder Structure
93 
94```
95e2e/
96├── fixtures/
97│ └── index.ts # Custom fixtures
98├── pages/
99│ └── .gitkeep # Page object models
100├── test-data/
101│ └── .gitkeep # Test data files
102└── example.spec.ts # First example test
103```
104 
105### 5. Generate Example Test
106 
107```typescript
108import { test, expect } from '@playwright/test';
109 
110test.describe('Homepage', () => {
111 test('should load successfully', async ({ page }) => {
112 await page.goto('/');
113 await expect(page).toHaveTitle(/.+/);
114 });
115 
116 test('should have visible navigation', async ({ page }) => {
117 await page.goto('/');
118 await expect(page.getByRole('navigation')).toBeVisible();
119 });
120});
121```
122 
123### 6. Generate CI Workflow
124 
125If `.github/workflows/` exists, create `playwright.yml`:
126 
127```yaml
128name: "playwright-tests"
129 
130on:
131 push:
132 branches: [main, dev]
133 pull_request:
134 branches: [main, dev]
135 
136jobs:
137 test:
138 timeout-minutes: 60
139 runs-on: ubuntu-latest
140 steps:
141 - uses: actions/checkout@v4
142 - uses: actions/setup-node@v4
143 with:
144 node-version: lts/*
145 - name: "install-dependencies"
146 run: npm ci
147 - name: "install-playwright-browsers"
148 run: npx playwright install --with-deps
149 - name: "run-playwright-tests"
150 run: npx playwright test
151 - uses: actions/upload-artifact@v4
152 if: ${{ !cancelled() }}
153 with:
154 name: "playwright-report"
155 path: playwright-report/
156 retention-days: 30
157```
158 
159If `.gitlab-ci.yml` exists, add a Playwright stage instead.
160 
161### 7. Update `.gitignore`
162 
163Append if not already present:
164 
165```
166/test-results/
167/playwright-report/
168/blob-report/
169/playwright/.cache/
170```
171 
172### 8. Add npm Scripts
173 
174Add to `package.json` scripts:
175 
176```json
177{
178 "test:e2e": "playwright test",
179 "test:e2e:ui": "playwright test --ui",
180 "test:e2e:debug": "playwright test --debug"
181}
182```
183 
184### 9. Verify Setup
185 
186Run the example test:
187 
188```bash
189npx playwright test
190```
191 
192Report the result. If it fails, diagnose and fix before completing.
193 
194## Output
195 
196Confirm what was created:
197- Config file path and key settings
198- Test directory and example test
199- CI workflow (if applicable)
200- npm scripts added
201- How to run: `npx playwright test` or `npm run test:e2e`
202 

Discussion

Alternatives

Also in TestingSee all 533 in Development →