[파이썬] Selenium 페이지 객체 모델 (POM) 패턴

Selenium은 웹 애플리케이션 테스트 자동화를 위한 인기있는 도구입니다. Selenium을 사용하면 웹 페이지의 요소를 자동으로 조작하고 테스트를 실행할 수 있습니다. 그러나 Selenium은 페이지 요소에 대한 직접적인 접근을 제공하기 때문에 유지 보수 및 확장이 어려울 수 있습니다. 이를 해결하기 위해 페이지 객체 모델 (POM) 패턴이 도입되었습니다.

POM 패턴은 페이지마다 하나 이상의 페이지 객체를 만들어서 페이지와 상호 작용하는 데 사용됩니다. 각 페이지 객체는 해당 페이지의 요소를 캡슐화하고 메서드를 통해 이러한 요소와 상호 작용합니다. 이 패턴을 사용하면 테스트 코드가 더 읽기 쉽고 유지 보수하기 쉬워집니다.

POM 패턴의 구성 요소

페이지 객체 (Page Object)

페이지 객체는 페이지의 요소를 나타내는 클래스입니다. 예를 들어, 로그인 페이지라면 “LoginPage”와 같은 클래스를 만들 수 있습니다. 각 페이지 객체는 페이지의 요소에 대한 참조와 해당 요소와 상호 작용하는 메서드를 포함합니다. 페이지 객체는 다른 페이지 객체와 상호 작용할 수도 있습니다.

페이지 각 요소 (Page Elements)

페이지 요소는 웹 페이지의 구성 요소를 나타냅니다. 텍스트 상자, 버튼, 체크 박스 등이 페이지 요소의 예입니다. 페이지 객체에서는 이러한 요소에 대한 참조를 유지하고 각 요소와 상호 작용하는 메서드를 제공합니다.

테스트 코드 (Test Code)

테스트 코드는 페이지 객체와 상호 작용하여 원하는 동작을 수행하는 코드입니다. 페이지 객체의 메서드를 호출하여 특정 페이지로 이동하거나 로그인을 시도하는 등의 작업을 수행할 수 있습니다.

POM 패턴을 사용한 예시

아래는 Python에서 Selenium과 POM 패턴을 사용하여 로그인 기능을 구현하는 예시입니다.

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

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_input = (By.ID, 'username')
        self.password_input = (By.ID, 'password')
        self.login_button = (By.ID, 'login-button')

    def enter_username(self, username):
        self.driver.find_element(*self.username_input).send_keys(username)

    def enter_password(self, password):
        self.driver.find_element(*self.password_input).send_keys(password)

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click()

# 테스트 코드
driver = webdriver.Chrome()
driver.get('https://example.com/login')
login_page = LoginPage(driver)
login_page.enter_username('test_user')
login_page.enter_password('test_password')
login_page.click_login_button()

WebDriverWait(driver, 10).until(EC.url_to_be('https://example.com/dashboard'))

위의 예시에서 LoginPage 클래스는 login 페이지의 요소를 캡슐화합니다. 테스트 코드는 LoginPage 클래스를 사용하여 로그인 과정을 수행합니다. 이를 통해 코드의 읽기성이 향상되며 로그인 절차의 변경에도 강하게 대응할 수 있습니다.

결론

Selenium의 POM 패턴을 사용하면 웹 애플리케이션의 자동화 테스트 코드를 구조화하고 유지 보수하기 쉽게 만들 수 있습니다. 각 페이지 객체는 해당 페이지의 요소와 상호 작용하는 메서드를 포함하고, 테스트 코드는 페이지 객체를 사용하여 원하는 동작을 수행합니다. 이를 통해 코드의 가독성과 유지 보수성을 향상시키며 효율적인 테스트 자동화를 구현할 수 있습니다.