Selenium WebDriver는 브라우저를 프로그래밍 방식으로 제어하는 웹 자동화 표준 도구다. W3C WebDriver 표준을 준수하며 Java, Python, JavaScript 등 다양한 언어를 지원한다.
| 항목 | Playwright | Selenium |
|---|
| 출시 | 2020 | 2004 |
| 자동 대기 | 기본 지원 | 수동 설정 |
| 병렬화 | 내장 | 별도 도구 |
| 네트워크 모킹 | 내장 | 별도 도구 |
| 언어 지원 | JS/TS/Python/Java/C# | 7개 이상 언어 |
| 레거시 브라우저 | 제한 | 광범위 지원 |
Python WebDriver 예시
python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(options=options)
try:
driver.get('https://example.com/login')
# 명시적 대기
wait = WebDriverWait(driver, 10)
email_input = wait.until(EC.element_to_be_clickable((By.ID, 'email')))
email_input.send_keys('user@example.com')
driver.find_element(By.ID, 'password').send_keys('password123')
driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
# 결과 확인
wait.until(EC.url_contains('/dashboard'))
assert 'dashboard' in driver.current_url
finally:
driver.quit()
Page Object Model (POM)
python
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(driver, 10)
def navigate(self):
self.driver.get('https://example.com/login')
return self
def login(self, email: str, password: str):
self.wait.until(EC.presence_of_element_located((By.ID, 'email')))
self.driver.find_element(By.ID, 'email').send_keys(email)
self.driver.find_element(By.ID, 'password').send_keys(password)
self.driver.find_element(By.CSS_SELECTOR, '[type=submit]').click()
return DashboardPage(self.driver)
# 테스트
def test_login(driver):
dashboard = LoginPage(driver).navigate().login('user@test.com', 'pass')
assert dashboard.get_welcome_message() == '환영합니다'
관련 문서