Selenium × Python 환경 구축을 초보자도 5분 만에 동작 확인까지 할 수 있도록 해설합니다.
👉 이 글의 코드를 그대로 복사해서 붙여넣으면 5분 만에 테스트가 동작합니다.
「ChromeDriver 버전이 맞지 않는다」「환경 구축에서 막힌다」——그런 고민을 해결합니다.
이 글에서는 Selenium・webdriver-manager・pytest를 사용한 실무 구성으로 에러 없이 최단 시간에 테스트를 동작시키는 방법을 해설합니다.
👉 Playwright와의 차이:Selenium은 WebDriver 경유로 브라우저를 조작하는 성숙한 기법으로 Playwright보다 구인・프로젝트 수가 압도적으로 많습니다.
💡 이 글로 할 수 있게 되는 것
Selenium × Python × pytest 환경을 구축하여 실제 브라우저가 동작하는 테스트가 PASSED되는 곳까지 진행한다
💡 다른 글과의 차이
많은 글은 「ChromeDriver를 수동으로 다운로드」하는 방법을 소개하고 있지만 이 글에서는 webdriver-manager를 사용하여 완전 자동화합니다. 따라서 버전 불일치로 막히는 일이 없습니다.
Selenium 환경 구축에서 자주 있는 실패는 「ChromeDriver 버전이 맞지 않는다」「PATH가 통하지 않는다」의 두 가지입니다. 이 글에서는 webdriver-manager를 사용하여 버전 관리를 자동화하므로 막히지 않고 진행할 수 있습니다.
📌 이런 분께 추천합니다
- Selenium × Python 환경 구축을 처음 하는 분
- ChromeDriver 버전 관리 문제로 막힌 경험이 있는 분
- pytest와 조합하여 테스트 자동화를 시작하고 싶은 분
- Upwork에서 QA 프로젝트를 따기 위해 Selenium을 습득하고 싶은 분
✅ 이 글을 읽으면 얻을 수 있는 것
- Python 가상 환경・Selenium・webdriver-manager의 설치 방법을 알 수 있다
- ChromeDriver 버전 관리를 자동화하는 방법을 알 수 있다
- pytest와 Selenium을 조합한 기본적인 테스트 작성 방법을 알 수 있다
👤 이 글을 쓴 사람
QA 엔지니어・테스트 자동화 엔지니어로서 15년 이상의 실무 경험을 가진 Yoshi가 집필. Selenium은 실무에서 매일 사용하고 있으며 ChromeDriver 버전 문제로 막힌 경험에서 webdriver-manager 도입을 표준으로 하고 있습니다. 구현 코드는 GitHub에 공개 중입니다: github.com/YOSHITSUGU728/automated-testing-portfolio
- Selenium × Python 환경 구축의 전체 흐름
- STEP 1:Pythonのバージョン확인(Selenium Python 환경 구축의 전제)
- STEP 2:가상 환경(venv)의 생성과 활성화【Python 환경 구축】
- STEP 3:Selenium・webdriver-manager・pytest 설치 방법(Selenium Python 설치)
- STEP 4:프로젝트 구성 작성법(pytest 구성)
- STEP 5:Selenium WebDriver 설정(conftest.py)
- STEP 6:동작 확인 테스트 작성 방법과 실행 방법(pytest)
- ⚠️ 자주 있는 에러와 해결책
- Selenium과 Playwright의 사용 구분이란?
- FAQ
- 📋 이 글의 정리
Selenium × Python 환경 구축의 전체 흐름
먼저 전체 흐름을 파악하고 나서 진행합시다.
🗺️ 환경 구축 전체 흐름
| 1 | Python 버전 확인 | python –version으로 확인 |
| 2 | 가상 환경(venv)생성 | 프로젝트마다 의존 관계를 분리 |
| 3 | Selenium・webdriver-manager・pytest 설치 | pip install로 일괄 설치 |
| 4 | 프로젝트 구성 작성 | pytest.ini + tests/ 폴더 |
| 5 | conftest.py에서 WebDriver 설정 | fixture로 초기화・종료 처리 |
| 6 | 동작 확인 테스트 실행 | example.com에 접속하여 title 확인 |
STEP 1:Pythonのバージョン확인(Selenium Python 환경 구축의 전제)
먼저 Python이 설치되어 있는지 확인합니다.
python --version
# 또는
python3 --version출력 예시:
Python 3.11.5STEP 2:가상 환경(venv)의 생성과 활성화【Python 환경 구축】
가상 환경을 사용하면 프로젝트마다 패키지를 분리할 수 있습니다. 실무에서는 반드시 사용합시다.
가상 환경 생성
# 프로젝트 폴더 생성
mkdir selenium-project
cd selenium-project
# 가상 환경 생성
python -m venv venv가상 환경 활성화
| OS | 커맨드 |
|---|---|
| Windows | venv\Scripts\activate |
| Mac / Linux | source venv/bin/activate |
활성화되면 프롬프트 앞에 (venv)가 표시됩니다.
(venv) $ STEP 3:Selenium・webdriver-manager・pytest 설치 방법(Selenium Python 설치)
Selenium 4계열에서는 webdriver-manager를 사용하면 ChromeDriver 버전 관리가 자동화됩니다. 수동 다운로드는 불필요합니다.
pip install selenium webdriver-manager pytest설치 확인:
pip list | grep -E "selenium|webdriver|pytest"
# 출력 예시
pytest 7.4.0
selenium 4.18.1
webdriver-manager 4.0.1pip freeze > requirements.txt로 저장해 두세요. 팀 멤버가 pip install -r requirements.txt로 같은 환경을 재현할 수 있습니다.STEP 4:프로젝트 구성 작성법(pytest 구성)
실무에서 사용하기 쉬운 폴더 구성을 처음부터 정비해 둡니다.
selenium-project/
├── venv/ # 가상 환경(Git에는 포함하지 않음)
├── tests/
│ ├── conftest.py # fixture 정의
│ └── test_sample.py # 테스트 파일
├── requirements.txt # 의존 패키지 목록
└── pytest.ini # pytest 설정pytest.ini 작성
[pytest]
testpaths = tests
addopts = -vSTEP 5:Selenium WebDriver 설정(conftest.py)
WebDriver의 초기화・종료 처리를 conftest.py의 fixture에 집약하는 것이 실무의 베스트 프랙티스입니다.
# tests/conftest.py
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
@pytest.fixture(scope="function")
def driver():
"""Chrome WebDriver를 실행・종료하는 fixture"""
options = webdriver.ChromeOptions()
# options.add_argument("--headless") # 처음에는 OFF 권장(화면을 보며 확인 가능)
# CI/CD 환경에서는 위 줄을 ON으로 한다
options.add_argument("--no-sandbox") # Linux/CI 환경용(로컬에서는 불필요)
options.add_argument("--disable-dev-shm-usage") # Linux/CI 환경용(로컬에서는 불필요)
options.add_argument("--window-size=1920,1080")
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
yield driver # 테스트 실행
driver.quit() # 테스트 종료 후 브라우저를 닫는다💡 포인트
- 처음에는
--headless를 OFF로 하는 것을 권장합니다. 브라우저가 실제로 동작하는 모습을 눈으로 확인할 수 있어 디버그가 훨씬 편해집니다 - 동작 확인이 되면
--headless를 ON으로 하여 CI/CD 환경에 대응합시다 scope="function"은 테스트마다 브라우저를 실행・종료합니다. 테스트 간 상태 오염을 방지할 수 있는 가장 안전한 설정입니다
STEP 6:동작 확인 테스트 작성 방법과 실행 방법(pytest)
동작 확인에는 example.com을 사용합니다. Google은 지역에 따라 CAPTCHA나 리다이렉트가 발생할 수 있어 환경 구축 초기 확인에는 example.com이 가장 안정적입니다.
# tests/test_sample.py
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_example_title(driver):
"""example.com의 title이 올바르게 취득되는지 확인"""
driver.get("https://example.com")
assert "Example Domain" in driver.title
def test_example_heading(driver):
"""heading이 표시될 때까지 대기하여 확인(실무 수준의 작성법)"""
driver.get("https://example.com")
# WebDriverWait:요소가 표시될 때까지 최대 10초 대기(실무 필수)
# visibility_of_element_located = DOM에 있고 화면에 표시되어 있는 것을 확인
heading = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.TAG_NAME, "h1"))
)
assert heading.is_displayed()테스트 실행
pytest실행 결과 샘플
========================== test session starts ==========================
platform darwin -- Python 3.11.5, pytest-7.4.0, selenium-4.18.1
collected 2 items
tests/test_sample.py::test_example_title PASSED [ 50%]
tests/test_sample.py::test_example_heading PASSED [100%]
========================== 2 passed in 3.21s ===========================💡 실무 팁:WebDriverWait를 사용하는 이유
driver.find_element()만으로는 요소가 표시되기 전에 접근하여NoSuchElementException이 발생하는 경우가 있습니다visibility_of_element_located(DOM에 있고 화면에 표시)는presence_of_element_located(DOM에만 있는)보다 확실합니다. 테스트로서 더 본질적인 확인이 가능합니다- 환경 구축이 완료되면 이 대기 처리를 익히는 것이 다음 단계로 가장 중요합니다
⚠️ 자주 있는 에러와 해결책
① SessionNotCreatedException: Chrome version mismatch
Chrome과 ChromeDriver의 버전이 맞지 않는 에러입니다.
# 해결책:webdriver-manager를 사용하면 자동 해결
# 캐시가 오래된 경우는 삭제하고 재설치
pip install --upgrade webdriver-manager② ModuleNotFoundError: No module named ‘selenium’
가상 환경이 활성화되지 않았거나 가상 환경 외부에 설치되어 있습니다.
# 해결책:가상 환경을 활성화하고 나서 재설치
source venv/bin/activate # Mac/Linux
venv\Scripts\activate # Windows
pip install selenium webdriver-manager③ 테스트가 수집되지 않는다(collected 0 items)
파일명・함수명이 test_로 시작하지 않을 가능성이 있습니다.
# NG
def check_example(driver): # test_ 가 없다
# OK
def test_example_title(driver): # test_ 가 필요④ TimeoutException / NoSuchElementException
요소가 표시되기 전에 접근하려 하고 있습니다. 명시적인 대기를 추가합시다.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 최대 10초 대기하여 요소가 표시될 때까지 기다린다
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.TAG_NAME, "h1"))
)Selenium과 Playwright의 사용 구분이란?
어느 쪽을 선택할지 망설이는 분을 위해 정리합니다.
| 비교 항목 | Selenium | Playwright |
|---|---|---|
| 역사・실적 | 2004년〜. 업계 표준 | 2020년〜. 새로운 편 |
| 구인・프로젝트 수 | 압도적으로 많다 | 증가 중 |
| 셋업 | 약간 복잡(Driver 필요) | 심플(자동 DL) |
| 실행 속도 | 약간 느리다 | 빠르다 |
| 대응 브라우저 | Chrome・Firefox・Edge・Safari | Chrome・Firefox・WebKit |
| 추천 장면 | 기존 프로젝트・Upwork 프로젝트 | 신규 프로젝트・모던 개발 |
FAQ
Q. Selenium 3계열과 4계열의 차이는?
Selenium 4(2021년 릴리스)부터 WebDriver 관리 방법이 변경되어 ChromeDriver 지정 방법이 바뀌었습니다. 이 글은 Selenium 4계열을 전제로 하고 있습니다. Selenium 3계열 코드에는 webdriver.Chrome(executable_path=...)라는 작성법이 많지만 4계열에서는 비권장입니다. webdriver-manager를 사용하면 양쪽 모두 대응 가능합니다.
Q. 헤드리스 모드란 무엇인가요?
브라우저 창을 표시하지 않고 백그라운드에서 테스트를 실행하는 모드입니다. CI/CD 환경(GitHub Actions 등)에서는 디스플레이가 없기 때문에 헤드리스가 필수입니다. 로컬 개발 시에는 --headless를 끄면 실제 브라우저 조작을 볼 수 있어 디버그에 편리합니다.
Q. Firefox에서도 사용할 수 있나요?
사용할 수 있습니다. webdriver-manager는 GeckoDriver(Firefox용)에도 대응하고 있습니다. from webdriver_manager.firefox import GeckoDriverManager를 사용하면 Firefox에서도 같은 방식으로 자동 관리할 수 있습니다.
📖 관련 글
실무에서는 webdriver-manager를 사용한 ChromeDriver 자동 관리를 표준으로 하고 있습니다. 이전에는 ChromeDriver를 수동으로 다운로드하여 버전이 맞지 않아 막히는 프로젝트가 많았지만 webdriver-manager 도입 후에는 환경 구축 트러블이 거의 제로가 되었습니다. 새로운 프로젝트를 시작할 때는 반드시 이 구성을 채택하고 있습니다.
이 글의 방법대로 진행하면 환경 구축에서 막히는 일은 없습니다.
📋 이 글의 정리
- Selenium × Python 환경 구축은 venv → pip install → conftest.py → 테스트 실행의 5단계
- webdriver-manager를 사용하면 ChromeDriver 버전 관리가 자동화되어 막히지 않는다
- WebDriver의 초기화・종료는 conftest.py의 fixture에 집약하는 것이 실무의 베스트 프랙티스
--headless옵션은 처음에는 OFF로 하고 CI/CD 환경에서 ON으로 한다- Selenium은 구인・프로젝트 수가 가장 많은 도구로 Upwork 프로젝트 수주에 직결된다
2개의 테스트가 PASSED가 되는 것을 확인하면 환경 구축 완료입니다. 이후에는 테스트 케이스를 추가하면서 로그인 폼 유효성 검증 테스트・Page Object Model 패턴의 구현으로 나아가세요.

