Przestań się powtarzać. Twoje testy zasługują na więcej.

Przed: Klasyczny chaos testów

Przyznajmy szczerze. Każdy z nas kiedyś napisał coś takiego:

def test_login():
    driver = webdriver.Chrome()
    driver.get("https://example.com/login")

    username = driver.find_element(By.ID, "username")
    password = driver.find_element(By.ID, "password")
    login_btn = driver.find_element(By.ID, "submit")

    username.send_keys("admin")
    password.send_keys("secret")
    login_btn.click()

    assert "Dashboard" in driver.title
    driver.quit()

Selektory na twardo, duplikacja, zero reużywalności. Działa, dopóki nie musisz tego zmienić. Albo przetestować drugi raz.

Po: Page Object Model (POM) w akcji

Sprzątamy kod.

# pages/login_page.py
class LoginPage:
    def __init__(self, driver):
        self.driver = driver

    def load(self):
        self.driver.get("https://example.com/login")

    def login(self, user, pwd):
        self.driver.find_element(By.ID, "username").send_keys(user)
        self.driver.find_element(By.ID, "password").send_keys(pwd)
        self.driver.find_element(By.ID, "submit").click()
# tests/test_login.py
def test_login(driver):
    login = LoginPage(driver)
    login.load()
    login.login("admin", "secret")
    assert "Dashboard" in driver.title

Czyściej. Reużywalnie. Do utrzymania bez płaczu.


Jeszcze lepiej: BasePage

Dajmy temu jeszcze trochę DRY i będzie git.

# pages/base_page.py
class BasePage:
    def __init__(self, driver):
        self.driver = driver

    def find(self, by, value):
        return self.driver.find_element(by, value)

    def visit(self, url):
        self.driver.get(url)
# pages/login_page.py
class LoginPage(BasePage):
    def load(self):
        self.visit("https://example.com/login")

    def login(self, user, pwd):
        self.find(By.ID, "username").send_keys(user)
        self.find(By.ID, "password").send_keys(pwd)
        self.find(By.ID, "submit").click()

Mniej duplikacji, więcej kontroli. Idealne miejsce na timeouty, logi, screenshoty.


Na koniec

POM to nie tylko ładny kod – to twoje ubezpieczenie na przyszłość.
Zacznij od małych kroków. Refaktoruj, kiedy zaczyna boleć. A jak boli za bardzo – dodaj BasePage.

Bądź sprytny. Testuj sprytniej.
– Karol