Selenium 설치
pip install selenium
Selenium
- 사람이 직접 조작하지 않고도 웹사이트를 자동으로 움직이게 하는 도구
- 테스트에서 사람이 할 수 있는 거의 모든 동작은 Selenium으로 자동화 할 수 있음
- WebDriver는 Selenium이 브라우저와 상호작용 할 수 있도록 도와주는 중간 매개체 역할
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
요소 선택하는 방법
- By.TAG_NAME
- By.ID
- By.CLASS_NAME
- By.CSS_SELECTOR
- By.XPATH
- By.NAME
- By.LINK_TEXT
- By.PARTIAL_LINK_TEXT

XPath가 어렵다면
F12로 개발자 도구를 켜고, Elements 탭에 들어가서
원하는 요소 우클릭 => Copy => Copy XPath
ID - 한 페이지에 하나만 존재하는 유일한 값
Class - 여러 요소가 같은 class를 가질 수 있음
Name - 입력 필드에서 많이 사용됨
1. ID가 있으면 ID 사용
2. Class는 동일한 요소가 여러 개 있을 때 사용
3. Name은 폼 입력 요소에서 자주 사용
4. ID나 Class, Name이 없어서 인덱싱하기 어려운 경우 CSS Selector나 XPath 사용
CSS Selector - 빠르고 간결한 문법, 복잡한 요소 선택이 어려움
XPath - 복잡한 요소도 정교하게 선택 가능, 성능이 CSS Selector보다 느릴 수 있
요소 선택 함수
driver.find_element(By.ID, 'username')
driver.find_elements(By.CLASS_NAME, 'red')
- find_element : 하나의 요소만 선택, 여러 개가 있다면 일치하는 요소 중 가장 첫 번째 요소 선택
- find_elements: 일치하는 요소들을 모두 선택
기능 조작
- 클릭 : .click()
- 키 입력 : .send_keys()

- 속성 가져오기 : .get_attribute()
i.get_attribute("href") # i의 href 속성 값 가져오기
img.get_attribute("src") # img의 src 속성 값 가져오기
i.get_attribute("style") # i의 style 속성 가져오기
WebDriverWait
- 웹 페이지가 완전히 로드되기 전에 요소를 찾으려고 하면 'NoSuchElementException' 오류 발생
- 요소가 나타날 때까지 기다리는 함수
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
search_box = WebDriverWait(driver, 10).until(
EC.presense_of_element_located((By.ID, "searchBox"))
)
- element_to_be_clickable : 요소가 클릭 가능해질 때까지 대기
- visibility_of_element_located: 요소가 화면에 표시될 때까지 대기
- presense_of_element_located : 요소가 HTML에 추가될 때가지 대기 (표시 여부 상관없음)
드롭다운 옵션 선택
from selenium.webdriver.support.ui import Select
dropdown = Select(driver.find_element(By.ID, "city"))
dropdown.select_by_value("seoul") # value 기준 선택
- select_by_visible_text()
- select_by_index()
이 함수들로도 옵션 선택 가능
CSV 파일 저장
items = driver.find_elements(By.CLASS_NAME, "item")
with open(csv_file_path, "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["텍스트"])
for item in items:
writer.writerow([item.text])
driver.quit()
print(f"데이터가 {csv_file_path} 파일로 저장되었습니다.")
자바스크립트 실행
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
driver.execute_script("window.scrollBy(0, 500);")
# 숨겨진 요소 강제로 보이게 만들기
hidden_input = driver.find_element(By.ID, "hidden_input")
driver.execute_script("arguments[0].style.display = 'block';", hidden_input)
팝업 창 처리
WebDriverWait(driver, 5).until(EC.alert_is_present())
alert = driver.switch_to.alert
print(alert.text)
alert.accept() # 팝업 닫기
- alert : 확인 버튼만 있는 경고창
- alert.accpet()
- confirm : 확인/취소 버튼이 있는 알림창
- alert.accept()
- alert.dismiss()
- prompt : 사용자 입력을 요구하는 알림창
- alert.send_keys("입력값")
- 입력값을 보낸 뒤 alert.accept()
새로고침
driver.refresh()
UI 요소 확인
# element.is_displayed() : 요소가 화면에 표시되는지 확인
# element.is_enabled() : 버튼 또는 입력 필드가 활성화되어 있는지 확인
button = driver.find_element(By.ID, "submit_button")
if button.is_displayed():
print("버튼이 화면에 표시됨")
if button.is_enabled():
print("버튼이 활성화됨")
스크린샷 찍기
driver.save_screenshot("before.png")
image1 = Image.open("before.png")
image2 = Image.open("after.png")
diff = ImageChops.difference(image1, image2)
if diff.getbbox():
print("UI 변경이 감지됨")
로그 작성
- 로그 : 테스트 과정에서 발생한 이벤트(성공/실패/오류 등)를 기록하는 파일
import logging
logging.basicConfig(filename="test_results.log", level=logging.INFO, format="%(asctime)s - %(message)s")
logging.info("✅ UI 테스트 시작")
logging.warning("⚠️ 예상과 다른 UI 요소 발견")
logging.error("❌ 버튼이 클릭되지 않음")
logging.info("✅ UI 테스트 종료")
쿠키 가져오기
driver.get("https://example.com")
cookies = driver.get_cookies()
for cookie in cookies:
print(cookie)
driver.add_cookie({"name" : "user_session", "value" : "abc123", "domain" : "example.com"})
driver.delete_cookie("value")
driver.delete_all_cookies()
- get_cookies() : 현재 페이지의 모든 쿠키를 리스트 형태로 가져오기
- get_cookie(name) : 특정 이름의 쿠키만 가져오기
- add_cookie(cookie_dict) : 브라우저에 새로운 쿠키 추가
- delete_cookie(name) : 특정 쿠키 삭제
- delete_all_cookies() : 모든 쿠키 삭제
'공부 > QA' 카테고리의 다른 글
| [QA] Selenium XPath svg 태그 찾기 (0) | 2025.12.16 |
|---|---|
| [QA] pytest (0) | 2025.12.13 |
| [QA] Jenkins CI/CD 특강 정리 (0) | 2025.12.08 |
| [QA] Selenium clear()가 안되는 현상 해결 방법 (0) | 2025.12.08 |
| [QA] 선택자(CSS Selector, XPath) (0) | 2025.11.28 |