Playwright 테스트 작성
Playwright로 브라우저 흐름을 자동화합니다.
Playwright 테스트 작성은(는) CoddyKit의 무료 Angular Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Angular Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Angular Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
첫 Playwright 테스트
Playwright 테스트는 page와 같은 픽스처를 받는 비동기 함수입니다. @playwright/test에서 test와 expect를 가져오고 사용자 시나리오를 설명합니다.
import { test, expect } from '@playwright/test';
test('opens the home page', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveURL(/.*localhost/);
});page 픽스처
page 객체는 브라우저 탭 하나를 나타냅니다. 모든 테스트는 깨끗한 컨텍스트에서 격리된 새로운 page를 받으므로 테스트끼리 실수로 쿠키나 저장소를 공유하지 않습니다.
goto로 이동하기
page.goto(url)는 URL을 불러오고 페이지가 준비될 때까지 기다립니다. 설정의 baseURL과 함께 사용하면 상대 경로를 사용할 수 있습니다.
await page.goto('/login'); // resolves against baseURL
await page.goto('https://example.com'); // absolute also works로케이터로 요소 찾기
locator는 요소를 가리키는 지연된 자동 대기 핸들입니다. 불안정한 CSS 선택자보다 getByRole, getByLabel, getByText와 같은 의미 기반 로케이터를 우선 사용하세요.
const submit = page.getByRole('button', { name: 'Sign in' });
const email = page.getByLabel('Email');입력하고 클릭하기
fill로 입력 값을 설정하고 click으로 버튼을 누릅니다. Playwright는 동작하기 전에 요소가 표시되고 활성화될 때까지 자동으로 기다립니다.
await page.getByLabel('Email').fill('ada@example.com');
await page.getByLabel('Password').fill('secret');
await page.getByRole('button', { name: 'Sign in' }).click();자동 대기로 불안정한 대기 제거하기
이전 도구와 달리 Playwright는 요소와 검증 조건이 참이 될 때까지 자동으로 기다립니다. 수동 시간 제한이 거의 필요 없기 때문에 테스트가 안정적입니다.
// No need for: await page.waitForTimeout(2000)
await expect(page.getByText('Welcome back')).toBeVisible();describe로 테스트 그룹화하기
test.describe를 사용해 관련 시나리오를 그룹화하고 beforeEach로 설정을 공유합니다.
test.describe('Login flow', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/login');
});
test('shows the form', async ({ page }) => {
await expect(page.getByLabel('Email')).toBeVisible();
});
});전체 사용자 여정 테스트하기
동작을 연결해 완전한 흐름을 모델링합니다. 각 단계가 사용자 행동을 설명하는 대본처럼 읽히게 됩니다.
test('user can log in and see dashboard', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('Email').fill('ada@example.com');
await page.getByLabel('Password').fill('secret');
await page.getByRole('button', { name: 'Sign in' }).click();
await expect(page).toHaveURL(/.*dashboard/);
});테스트 실행하기
CLI에서 모든 명세를 실행합니다. 브라우저를 보려면 --headed를 추가하고, Playwright의 대화형 테스트 실행기를 열려면 --ui를 추가합니다.
npx playwright test
npx playwright test --headed
npx playwright test --ui실패 디버깅하기
실패하면 Playwright가 스크린샷, 동영상, 단계별로 재생할 수 있는 추적 기록을 캡처할 수 있습니다. 추적 뷰어는 모든 동작 시점의 DOM을 보여 주므로 불안정한 실패를 쉽게 진단할 수 있습니다.
npx playwright test --trace on
npx playwright show-trace trace.zip테스트 격리가 중요합니다
각 테스트가 고유한 브라우저 컨텍스트를 받으므로 테스트 순서나 테스트 간 공유 상태에 의존하지 마세요. 각 테스트에 필요한 데이터를 자체 beforeEach 또는 테스트 내부에서 설정합니다.
빠른 확인
waitForTimeout을 피해야 하는 이유는 무엇인가요?
복습
Playwright 테스트는 page 픽스처를 사용합니다. goto로 이동하고, 의미 기반 로케이터(getByRole, getByLabel)로 요소를 찾으며, fill/click으로 상호작용합니다. 자동 대기는 불안정한 sleep을 제거합니다. describe로 그룹화하고, npx playwright test로 실행하며, 추적 기록으로 디버깅합니다.
자주 묻는 질문
“Playwright 테스트 작성” 강의는 무료인가요?
네 — “Playwright 테스트 작성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Angular Academy 강의 전체를 잠금 해제할 수 있습니다. Angular Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Playwright 테스트 작성”에서 뭘 배우나요?
Playwright로 브라우저 흐름을 자동화합니다. 브라우저에서 직접 실행하는 실습 코드로 Angular Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Angular Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Angular Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“Playwright 테스트 작성” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Angular Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Angular Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- E2E 테스트 개요
- Playwright 테스트 작성
- 선택자와 검증
- CI 통합