"`npm init playwright`. 5분 후엔 테스트에서 Chromium 운전 중."
한 명령 부트스트랩
npm init playwright@latest 는 얼마나 많은 걸 하는지로 특이해. @playwright/test 설치, 브라우저 바이너리 (Chromium, Firefox, WebKit) 다운로드, playwright.config.ts 생성, 예제 테스트 가진 e2e/ 디렉토리 스캐폴딩, package.json 스크립트 추가, 선택적으로 GitHub Actions 워크플로우 생성. 전체가 인터랙티브 — 프롬프트 몇 개 답하고 (TypeScript yes, GitHub Actions yes/no, default e2e/ 디렉토리), ship.
수동 설치도 가능: npm install -D @playwright/test, 그 다음 npx playwright install 로 브라우저 다운로드. Init 흐름은 보일러플레이트 통합일 뿐.
브라우저 셋, 테스트 하나
Playwright 가 세 브라우저 엔진 운전:
Chromium — Chrome/Edge 엔진. 가장 많은 시장 점유율, 시작 가장 빠름, 프로젝트 default.
Firefox — Gecko 엔진. Chromium 전용 코드와 다른 동작 잡아.
WebKit — Safari 엔진. Safari 사용자나 iOS Safari 신경 쓰면 critical (iOS 브라우저는 'iOS 의 Chrome' 도 WebKit 전용).
같은 테스트가 default 로 셋 다에 대해 돌아. 테스트 한 번 짜고; Playwright 가 세 브라우저에서 돌리고 브라우저별 결과 리포트. 크로스 브라우저 버그는 보통 CSS 관련이거나 한 엔진이 다르게 구현한 JavaScript API 사용 — 진짜 브라우저 테스트만 잡는 그런 버그.
브라우저 바이너리는 사소하지 않아
다운로드가 세 브라우저 통틀어 ~500 MB. Playwright 가 ~/.cache/ms-playwright/ (Linux/macOS) 또는 %USERPROFILE%\AppData\Local\ms-playwright (Windows) 에 캐시. 버전은 Playwright 버전에 핀; @playwright/test 업그레이드하면 매칭 바이너리 얻으려 npx playwright install 다시 돌려.
CI 에선 캐시 안 하면 환경마다 바이너리 fresh 다운로드 필요. 공식 GitHub Actions setup 이 Playwright 버전에 캐시 키 써서, 후속 run 은 다운로드 skip.
대체로 `apt install` 브라우저 쓰지 마. Playwright 는 특정 패치된 브라우저 빌드 요구. 시스템 Chromium 쓰면 재현 못 하는 flake 일으키는 미묘한 차이 발생. 항상 npx playwright install 써.
시스템 의존성
브라우저는 OS 레벨 라이브러리 필요 (폰트, 이미지 codec, 접근성 프레임워크). npx playwright install --with-deps 가 바이너리와 시스템 의존성 둘 다 설치. macOS 는 보통 의존성 미리 설치돼있어; Linux (특히 CI 컨테이너) 에선 이 플래그 필수. Windows 는 의존성이 브라우저와 번들.
첫 테스트
init 가 스캐폴드한 예제 테스트가 playwright.dev 방문해서 title 단언. 설치 작동 확인엔 충분. 돌려: npx playwright test. 결과 세 개 봐 (브라우저당 하나), 각각 몇 초.
Code
Init 흐름 — 인터랙티브하지만 빠름·bash
# One-command bootstrap — installs everything, scaffolds everything
npm init playwright@latest
# Answer prompts:
# Use TypeScript or JavaScript? → TypeScript
# Where to put your end-to-end tests? → e2e
# Add a GitHub Actions workflow? → true (recommended)
# Install Playwright browsers? → true
# Run the example test
npx playwright test
수동 설치 — 각 브라우저 명시적으로·bash
# Manual install (if init isn't right for you)
npm install -D @playwright/test
# Download browsers
npx playwright install
# On Linux (especially CI), include system dependencies
npx playwright install --with-deps
# Or pick a single browser only (smaller download)
npx playwright install chromium
npx playwright install firefox webkit # multiples allowed
예제 테스트 — `init` 가 스캐폴드한 것·typescript
// e2e/example.spec.ts — what `init` creates for you
import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Expect a title "to contain" a substring.
await expect(page).toHaveTitle(/Playwright/);
});
test('get started link', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Click the get started link.
await page.getByRole('link', { name: 'Get started' }).click();
// Expects the URL to contain intro.
await expect(page).toHaveURL(/.*intro/);
});
프로젝트에서 (없으면 fresh 디렉토리에서) npm init playwright@latest 돌려. Default 수락. npx playwright test 돌려서 예제 테스트가 세 브라우저에서 통과하는 거 봐. 그 다음 하나 깨 — 단언 toHaveTitle(/Playwright/) 를 toHaveTitle(/Vue/) 로 바꾸고 다시 돌려. 실패 읽어: 어느 브라우저, 어느 라인, 실제 title 이 뭐였는지 말해주는 거 주목.
Hint
설치가 브라우저 다운로드에서 멈추면 네트워크가 Playwright CDN 막을 수 있어. PLAYWRIGHT_DOWNLOAD_HOST 를 미러로 설정하거나, 허용되는 네트워크에서 미리 바이너리 다운로드하고 캐시 디렉토리 복사.
Progress
Progress is local-only — sign in to sync across devices.