C.W.K.
Stream
Lesson 01 of 04 · published

설치 + 진짜 브라우저 셋

~14 min · playwright-setup, install, browsers

Level 0테스트 호기심
0 XP0/32 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"`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/);
});
CI 스캐폴드 — 세 브라우저에서 돌고 리포트 업로드·yaml
# .github/workflows/playwright.yml — what init can scaffold
name: Playwright Tests
on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]
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

External links

Exercise

프로젝트에서 (없으면 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.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.