Selenium·Playwright로 테스트 코드를 작성할 때 “어떤 셀렉터를 써야 할지 모르겠다”, “요소를 제대로 찾을 수 없다”고 막힌 적 있으신가요? 브라우저의 개발자 도구(DevTools)를 잘 활용하면 그런 고민의 대부분을 해결할 수 있습니다. 이 글에서는 QA 엔지니어가 테스트 자동화에서 꼭 알아야 할 DevTools 기초를 실례와 함께 해설합니다.
📌 이 글의 대상 독자
| ✅ Selenium·Playwright를 막 시작해서 요소 특정 방법을 모르는 분 |
| ✅ DevTools를 열어본 적은 있지만 무엇을 봐야 할지 막막한 분 |
| ✅ 테스트 코드를 작성하기 전 기초 스킬을 다지고 싶은 QA 엔지니어 |
| ✅ 수동 테스트 시 버그 조사 속도를 높이고 싶은 분 |
✅ 이 글을 읽으면 얻을 수 있는 것
|
👨💻 이 글의 신뢰성에 대해 본 글은 QA 엔지니어로서 15년 이상 Selenium·Playwright를 활용한 테스트 자동화에 종사해 온 필자가 작성했습니다. “DevTools를 열었는데 뭘 봐야 할지 몰랐다”는 실제 경험을 바탕으로, 현장에서 진짜 쓰는 지식만 추려 해설합니다. |
📌 이 글의 결론
|
“요소를 찾을 수 없다”, “어떤 셀렉터를 써야 할지 모르겠다”——테스트 자동화를 시작하면 반드시 부딪히는 벽입니다. 사실 그 답의 대부분은 브라우저의 개발자 도구(DevTools) 안에 있습니다.
DevTools는 Chrome·Edge·Firefox 등의 브라우저에 기본 탑재된 개발·디버그용 도구로, 별도 설치 없이 언제든지 사용할 수 있습니다. QA 엔지니어에게는 “테스트 코드를 작성하기 전의 준비 도구”로서 빠질 수 없는 존재입니다.
개발자 도구(DevTools)란?
DevTools는 브라우저에 내장된 개발·디버그용 패널입니다. 웹 페이지의 HTML 구조·CSS·JavaScript 동작·네트워크 통신 등을 실시간으로 확인할 수 있습니다.
DevTools 여는 방법
| OS / 브라우저 | 단축키 | 기타 방법 |
|---|---|---|
| Windows / Chrome·Edge | F12 또는 Ctrl + Shift + I | 우클릭 → “검사” |
| Mac / Chrome·Safari | Cmd + Option + I | 우클릭 → “요소 검사” |
| Firefox | F12 또는 Ctrl + Shift + I | 우클릭 → “요소 조사” |
QA 현장에서는 Chrome DevTools가 가장 많이 사용됩니다. Selenium·Playwright 모두 기본적으로 Chromium 기반 브라우저를 사용하므로, Chrome에서 확인한 내용을 테스트 코드에 바로 활용할 수 있습니다.
① Elements 탭:요소를 확인하고 셀렉터를 가져오기
QA 엔지니어가 가장 많이 사용하는 탭입니다. 페이지의 HTML 구조를 확인하고, 테스트 코드에 사용할 셀렉터를 그 자리에서 복사할 수 있습니다.
요소를 빠르게 찾는 방법
테스트하려는 요소(버튼·입력 폼 등)를 우클릭 → “검사”를 선택하면 해당 요소가 HTML 트리에서 강조 표시됩니다.
| 대상 요소 우클릭 | → | “검사” 선택 | → | Elements 탭에서 HTML 강조 표시 |
셀렉터 복사 방법
Elements 탭에서 대상 HTML 요소를 우클릭하면 셀렉터를 클릭 한 번으로 복사할 수 있습니다.
| 복사 방법 | 얻을 수 있는 것 | 추천도 |
|---|---|---|
| Copy → Copy selector | CSS 셀렉터 | ⭐⭐⭐ 여기서 시작 |
| Copy → Copy XPath | XPath (상대 경로) | ⭐⭐ CSS로 안 될 때 |
| Copy → Copy full XPath | XPath (절대 경로) | ⭐ 최후의 수단 · 깨지기 쉬움 |
⚠️ 주의:Copy full XPath는 피하는 것이 무난 |
id와 data-testid 속성 확인하기
Elements 탭에서 HTML을 확인하면 해당 요소가 가진 속성(id·name·data-testid 등)을 한눈에 파악할 수 있습니다.
<input id="email"
name="email"
data-testid="login-email"
type="email"
placeholder="이메일 주소">이 경우 Selenium·Playwright 코드에서는 다음과 같이 작성할 수 있습니다.
# Selenium의 경우
driver.find_element(By.ID, "email")
driver.find_element(By.CSS_SELECTOR, "[data-testid='login-email']")
# Playwright의 경우
page.get_by_test_id("login-email")
page.locator("#email")② Console 탭:셀렉터를 그 자리에서 검증하기
Console 탭에서는 JavaScript를 직접 실행할 수 있습니다. “이 셀렉터로 정말 요소를 가져올 수 있을까?”를 테스트 코드를 작성하기 전에 바로 확인하는 데 사용합니다.
셀렉터 검증 명령어 빠른 참고표
# CSS 셀렉터로 1개 취득 (첫 번째 1건만)
document.querySelector('.submit-btn')
# CSS 셀렉터로 전체 취득 (풀 표기)
document.querySelectorAll('.list-item')
# Chrome DevTools Console 내에서만 사용할 수 있는 단축키
$$('.list-item') # document.querySelectorAll의 단축형
$x('//button[@type="submit"]') # XPath로 취득
# 속성값 확인
document.querySelector('#email').getAttribute('data-testid') $$('.list-item')의 결과가 빈 배열 []이라면 “해당 셀렉터로는 요소를 가져오지 못하고 있다”는 신호입니다. 셀렉터를 수정해 다시 확인하세요.
💡 Console 결과 읽는 법
|
③ Network 탭:API 통신 내용 확인하기
Network 탭에서는 페이지가 수행하는 HTTP 통신을 실시간으로 확인할 수 있습니다. 프론트엔드와 API 사이의 주고받음을 파악하는 데 빠질 수 없는 탭입니다.
테스트 설계에 활용할 수 있는 Network 탭 정보
| 확인할 수 있는 정보 | 테스트에 활용하는 방법 |
|---|---|
| 요청 URL·메서드 | API 테스트의 엔드포인트를 특정할 수 있다 |
| 요청 바디 | 전송 중인 파라미터 형식·키 이름을 확인할 수 있다 |
| 응답 바디 | 정상·에러 응답의 JSON 기댓값을 확인할 수 있다 |
| 상태 코드 | 200/400/401/500 등을 테스트 관점으로 연결할 수 있다 |
| 응답 시간 | 화면 표시가 느린 원인 조사 및 성능 확인에 활용할 수 있다 |
Network 탭 필터 활용법
Network 탭은 모든 통신을 표시하므로 처음엔 정보량에 압도될 수 있습니다. 다음 필터를 사용하면 빠르게 원하는 정보를 찾을 수 있습니다.
| 필터 | 용도 |
|---|---|
| Fetch/XHR | API 통신만 표시. 가장 자주 사용하는 필터 |
| Doc | HTML 페이지 요청만 표시 |
| Img · Media | 이미지·동영상 파일 요청 |
| 검색창 | URL이나 키워드로 좁히기 (예: api/login) |
④ Application 탭:Cookie·Storage 상태 확인하기
로그인 상태 유지나 세션 관리 테스트에서 활용하는 탭입니다. Cookie·LocalStorage의 값을 실시간으로 확인·삭제할 수 있습니다.
| 기능 | 테스트 활용 예시 |
|---|---|
| Cookies | 세션 토큰 유무·유효기간 확인. 삭제해서 로그아웃 상태 재현 |
| LocalStorage | 프론트엔드가 저장하는 설정값·사용자 데이터 확인 |
| SessionStorage | 탭을 닫으면 초기화되는 임시 데이터 확인 |
DevTools 사용 시 자주 막히는 포인트
🚧 주의 포인트 목록 ① DevTools를 열고 나서 Network 탭을 보면 통신 로그가 없다 Network 탭은 “열려 있는 동안의 통신”만 기록합니다. 페이지를 리로드하기 전에 DevTools를 열거나, 작업을 다시 실행하세요. ② Copy selector로 복사한 CSS가 Selenium에서 동작하지 않는다 Chrome이 생성하는 CSS 셀렉터는 ③ Console에서 동적으로 생성되는 요소는 “페이지 표시 후 잠시 뒤에 나타나는” 경우가 있습니다. Selenium의 WebDriverWait·Playwright의 자동 대기를 사용해 요소가 나타날 때까지 기다리세요. ④ iframe 안의 요소를 가져올 수 없다 iframe 내부의 HTML은 별도 문서로 취급되므로 일반 페이지 요소처럼 접근할 수 없습니다. Selenium에서는 ⑤ Network 탭의 XHR과 Fetch가 따로 표시되어 혼란스럽다 Chrome에서는 “Fetch/XHR” 필터를 선택하면 두 가지를 모아서 표시합니다. 개별로 나뉘어 있는 경우에는 각각 클릭해서 확인하세요. |
테스트 작업별 DevTools 탭 활용 맵
| 하고 싶은 것 | 사용할 탭 | 조작 |
|---|---|---|
| 요소의 id·class를 확인하고 싶다 | Elements | 우클릭 → “검사” |
| CSS 셀렉터를 복사하고 싶다 | Elements | 요소 우클릭 → Copy → Copy selector |
| 셀렉터가 제대로 동작하는지 확인하고 싶다 | Console | $$('셀렉터') 실행 |
| API 요청·응답을 확인하고 싶다 | Network | Fetch/XHR 필터로 좁히기 |
| 로그인 상태의 Cookie를 확인하고 싶다 | Application | Cookies → 대상 도메인 선택 |
| 에러 발생 시 원인을 조사하고 싶다 | Console + Network | 빨간 에러 메시지 + 실패한 요청 확인 |
자주 묻는 질문 (FAQ)
테스트 자동화 목적이라면 Google Chrome이 가장 추천됩니다. Selenium·Playwright의 기본 브라우저가 Chromium 기반이므로, DevTools에서 확인한 내용을 테스트 코드에 바로 활용할 수 있습니다.
먼저 Elements 탭에서 id·data-testid 등의 속성을 확인하고, 그 셀렉터를 Console 탭의 $$('...')로 동작 확인하는 2단계가 효율적입니다.
$·$$·$x의 차이는 무엇인가요? $는 document.querySelector의 단축형(1건 취득), $$는 document.querySelectorAll의 단축형(전건 취득), $x는 XPath로 취득합니다. 이것들은 Chrome DevTools의 Console 내에서 이용할 수 있는 단축키이며, JavaScript 코드나 Selenium·Playwright 코드 안에서는 사용할 수 없습니다. 특히 $x는 Chrome DevTools 고유 기능으로 향후 버전에서 변경될 가능성이 있습니다.
CORS 에러는 브라우저의 보안 제한에 의한 것으로, 테스트 자동화(Selenium·Playwright)에는 직접 영향을 주지 않는 경우가 많습니다. 단, API 테스트에서 다른 오리진으로 요청하는 경우에는 테스트 환경 설정을 확인하는 것이 좋습니다.
역할이 다릅니다. Playwright Codegen(playwright codegen)은 브라우저 조작을 자동으로 코드화하는 도구로, 코드량을 줄이고 싶을 때 편리합니다. DevTools는 “수동 테스트 중 버그 조사”, “셀렉터 사전 검증”, “API 응답 확인” 등 폭넓은 상황에서 활용합니다. 두 가지를 함께 사용하는 것이 추천됩니다.
있습니다. 특히 id가 무작위로 생성되는 경우나, 동적으로 부여되는 클래스명(예: CSS Modules의 Button_btn__abc123)은 환경이나 빌드에 따라 달라집니다. data-testid처럼 테스트용으로 고정된 속성을 개발자에게 추가해달라고 요청하는 것이 베스트 프랙티스입니다.
거의 같습니다. Edge도 Chromium 기반이므로 Elements·Console·Network 등 주요 기능은 공통입니다. Selenium·Playwright 확인 용도라면 어느 쪽을 사용해도 문제없습니다.
정리
|
DevTools는 별도 설치가 필요 없으며, 지금 바로 브라우저를 열면 사용할 수 있습니다. Selenium·Playwright 코드를 작성하기 전에 “먼저 DevTools로 확인하는” 습관을 들이는 것만으로도 테스트 코드 품질과 디버그 효율이 크게 달라집니다. 일상적인 테스트 작업의 든든한 동반자로 활용해 보세요.
💡 Playwright 사용자를 위한 보충:더 안정적인 로케이터를 활용하자 Playwright에서는
|
📚 함께 읽으면 좋은 관련 글 |
