최근 테스트 자동화 시장에서 Playwright의 인기가 매우 뜨겁습니다.
많은 QA 엔지니어와 SDET들이 전통의 강자 Selenium을 두고, 왜 Playwright를 선택할까요?
그 이유는 Playwright가 기존 자동화 프레임워크의 고질적인 문제들을 해결하는, 강력하고 실용적인 핵심 기능들을 내장하고 있기 때문입니다.
이번 글에서는 Playwright의 가장 중요한 기능들을 코드 예시, 비교표 등 직접적인 증거와 함께 깊이 있게 분석해 보겠습니다.

Q. [핵심 기능 1] 왜 Playwright의 ‘Auto-wait’가 혁신적인가요?
‘Auto-wait’는 Playwright가 요소를 조작하기 전에, 해당 요소가 ‘액션이 가능한 상태'(예: 화면에 보이고, 클릭 가능하고, 활성화된 상태)가 될 때까지 자동으로 기다려주는 기능입니다.
이는 플레이키 테스트(Flaky Test)의 가장 큰 원인인 ‘타이밍 문제’를 대부분 해결해 줍니다.
- Selenium과의 비교
| 구분 | Selenium | Playwright |
| 대기 전략 | 명시적 대기(Explicit Wait)를 코드로 직접 작성해야 함 | 대부분의 상황에서 자동으로 대기(Auto-wait) |
| 코드 복잡도 | 높음 (WebDriverWait 코드 반복) | 매우 낮음 (별도 대기 코드 불필요) |
| 안정성 | 개발자의 숙련도에 따라 편차가 큼 | 기본적으로 매우 안정적 |
Selenium에서는 아래와 같이, 모든 액션마다 번거로운 대기 코드를 직접 넣어줘야 했습니다.
Selenium 예시: 버튼을 클릭하기 전, 클릭 가능할 때까지 기다리는 코드
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
하지만 Playwright에서는 이 모든 과정이 필요 없습니다.
Playwright는 .click()이라는 명령 안에, 해당 요소가 클릭 가능한 상태가 될 때까지 자동으로 기다리는 로직이 이미 포함되어 있습니다.
Playwright 예시: 별도의 대기 코드 없이, 클릭 명령 하나로 끝
page.locator(“#submit”).click()
Q. [핵심 기능 2] 디버깅의 신세계, ‘Trace Viewer’는 무엇인가요?
‘Trace Viewer’는 Playwright 테스트가 실행되는 모든 과정을 녹화하여, 나중에 문제가 생겼을 때 타임머신처럼 되돌아가며 원인을 분석할 수 있게 해주는 강력한 디버깅 도구입니다.
이는 CI/CD 환경에서 테스트가 실패했을 때, 개발자가 자신의 PC에서 문제를 재현할 필요 없이 실패 원인을 90% 이상 파악할 수 있게 돕습니다.
- ‘Trace Viewer’가 제공하는 핵심 정보:
- 액션 스냅샷:
- 각 스텝(클릭, 입력 등)이 실행되기 ‘전’과 ‘후’의 화면 스크린샷을 모두 보여주어, 화면이 어떻게 변했는지 명확히 알 수 있습니다.
- 네트워크 요청:
- 테스트가 실행되는 동안 발생한 모든 API 요청과 응답을 확인할 수 있어, 프론트엔드 문제인지 백엔드 문제인지 파악하기 용이합니다.
- 콘솔 로그:
- 테스트 실행 시점의 브라우저 콘솔 로그를 그대로 보여줍니다.
- 소스 코드:
- 현재 실행 중인 테스트 코드 라인을 함께 보여주어, 코드와 실제 동작을 매칭하기 쉽습니다.
- 액션 스냅샷:
Q. [핵심 기능 3] ‘API 테스트’도 Playwright로 가능한가요?
네, 가능합니다. Playwright는 브라우저 자동화뿐만 아니라, Postman처럼 API 요청을 보내고 응답을 검증하는 강력한 내장 API 테스트 기능도 함께 제공합니다.
이는 UI 테스트와 API 테스트를 하나의 프레임워크 안에서 함께 관리할 수 있다는 큰 장점을 가집니다.
예를 들어, UI 테스트의 사전 조건인 ‘로그인’ 과정을, 매번 UI를 통해 진행하면 느리고 불안정합니다.
이때 Playwright의 API 테스트 기능을 활용하면, 로그인 UI 과정을 건너뛰고 API로 직접 인증 상태를 만들어 테스트 속도와 안정성을 크게 높일 수 있습니다.
Playwright API 요청 예시
def test_user_dashboard_after_login(page):
# 1. API 요청을 위한 컨텍스트 생성
api_context = page.request
# 2. 로그인 API를 직접 호출하여 인증 토큰 획득
response = api_context.post("/api/login", data={"user": "test", "pass": "pw"})
assert response.ok
# ... (생략) 획득한 인증 정보를 브라우저에 주입 ...
# 3. UI 로그인 과정을 건너뛰고, 바로 대시보드 페이지로 이동하여 테스트
page.goto("/dashboard")
# ... 대시보드 기능 테스트 ...
결론
Playwright가 테스트 자동화의 새로운 대세가 된 것은 우연이 아닙니다.
이는 기존 자동화 도구들의 가장 큰 골칫거리였던 ‘타이밍 문제’와 ‘어려운 디버깅’을 정면으로 해결하는 실용적인 기능들을 제공하기 때문입니다.
QA 엔지니어에게 Playwright를 배운다는 것은, 단순히 새로운 도구를 하나 더 익히는 것을 넘어, 더 안정적이고 효율적인 테스트 자동화를 구축하는 새로운 관점을 얻는 과정입니다.
참고 자료 (References)
- Playwright 공식 문서 – Auto-waiting:
https://playwright.dev/docs/actionability - 요즘IT – Selenium 대신 Playwright를 써야 하는 이유:
https://yozm.wishket.com/magazine/detail/2135/