【5분으로 완료】Selenium×Python 환경 구축|pytest+webdriver-manager로 막히지 않는 방법

테스트 자동화

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 환경 구축의 전체 흐름

먼저 전체 흐름을 파악하고 나서 진행합시다.

🗺️ 환경 구축 전체 흐름

1Python 버전 확인python –version으로 확인
2가상 환경(venv)생성프로젝트마다 의존 관계를 분리
3Selenium・webdriver-manager・pytest 설치pip install로 일괄 설치
4프로젝트 구성 작성pytest.ini + tests/ 폴더
5conftest.py에서 WebDriver 설정fixture로 초기화・종료 처리
6동작 확인 테스트 실행example.com에 접속하여 title 확인

📖 Selenium의 기초를 아직 이해하지 못한 분은 먼저 이것을Selenium vs Playwright vs pytest|Python 테스트 자동화 도구 선택 방법

STEP 1:Pythonのバージョン확인(Selenium Python 환경 구축의 전제)

먼저 Python이 설치되어 있는지 확인합니다.

python --version
# 또는
python3 --version

출력 예시:

Python 3.11.5
⚠️ Python 3.8 이상을 권장합니다. 3.7 이하는 Selenium 4계열에서 일부 동작하지 않는 경우가 있습니다. Python이 설치되어 있지 않은 경우 python.org에서 설치하세요.

STEP 2:가상 환경(venv)의 생성과 활성화【Python 환경 구축】

가상 환경을 사용하면 프로젝트마다 패키지를 분리할 수 있습니다. 실무에서는 반드시 사용합시다.

가상 환경 생성

# 프로젝트 폴더 생성
mkdir selenium-project
cd selenium-project

# 가상 환경 생성
python -m venv venv

가상 환경 활성화

OS커맨드
Windowsvenv\Scripts\activate
Mac / Linuxsource 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.1
💡 실무 팁:설치한 패키지는 pip freeze > requirements.txt로 저장해 두세요. 팀 멤버가 pip install -r requirements.txt로 같은 환경을 재현할 수 있습니다.
💡 보충:실무에서는 VS Code 등의 에디터를 사용하면 코드 보완・디버그가 편리하여 효율이 크게 올라갑니다. 확장 기능 「Python」「Pylance」를 설치해 두는 것을 권장합니다.

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 = -v

STEP 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 ===========================
✅ 2 passed가 표시되면 환경 구축 완료입니다!ChromeDriver의 다운로드는 webdriver-manager가 자동으로 수행하므로 수동 조작은 불필요합니다.

💡 실무 팁: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의 사용 구분이란?

어느 쪽을 선택할지 망설이는 분을 위해 정리합니다.

비교 항목SeleniumPlaywright
역사・실적2004년〜. 업계 표준2020년〜. 새로운 편
구인・프로젝트 수압도적으로 많다증가 중
셋업약간 복잡(Driver 필요)심플(자동 DL)
실행 속도약간 느리다빠르다
대응 브라우저Chrome・Firefox・Edge・SafariChrome・Firefox・WebKit
추천 장면기존 프로젝트・Upwork 프로젝트신규 프로젝트・모던 개발
💡 실무에서의 결론:Upwork나 기존 프로젝트 유지보수에서는 Selenium이 필수. 신규 프로젝트라면 Playwright 쪽이 효율이 높다. 양쪽 모두 할 수 있으면 시장 가치가 올라갑니다.

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 패턴의 구현으로 나아가세요.

제목과 URL을 복사했습니다