Sobes.tech
Middle

Mi az a Page Object minta?

sobes.tech MI

Válasz az MI-től

A Page Object minta egy tervezési minta, amelyet a webalkalmazások tesztautomatizálásában a kód olvashatóságának, karbantarthatóságának növelésére és a duplikációk csökkentésére használnak. Ez egy objektum-orientált megközelítés, ahol minden oldal (vagy jelentős komponens) egy külön osztályban van reprezentálva.

A Page Object fő ötletei:

  • Az oldal elemeinek és azokkal végrehajtható műveletek inkapszulálása.
  • Az elemek lokátorainak és a tesztek üzleti logikájának szétválasztása.
  • Magas szintű API biztosítása az oldal interakciójához.

A Page Object használatának előnyei:

  • A tesztek olvashatóságának növelése: A tesztek deklaratívabbá válnak, leírva a felhasználói felülettel való interakció lépéseit üzleti nyelven.
  • Karbantarthatóság javítása: UI változása esetén (pl. elem lokátorának módosítása) elegendő csak a Page Object osztályt módosítani, nem minden tesztet, amely ezt az elemet használja.
  • A kód duplikációjának csökkentése: Az oldalhoz kapcsolódó általános műveletek a Page Object metódusokban vannak inkapszulálva, és különböző tesztekben újra felhasználhatók.
  • A tesztek stabilitásának növelése: Az UI részleteitől való absztrakció révén.

Példa szerkezet:

Tegyük fel, van egy bejelentkezési oldalunk. Létrehozhatunk egy LoginPage osztályt.

# login_page.py
from selenium.webdriver.common.by import By

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.XPATH, "//button[text()='Login']")

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

    def set_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()

    def login(self, username, password):
        self.set_username(username)
        self.set_password(password)
        self.click_login_button()

Használat a tesztben:

# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage

class LoginTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("http://example.com/login")

    def test_valid_login(self):
        login_page = LoginPage(self.driver)
        login_page.login("valid_user", "valid_password")
        # Sikeres bejelentkezés ellenőrzése

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

Ebben az esetben a LoginPage osztály inkapszulálja a lokátorokat és a műveleteket, amelyek a bejelentkezési oldalhoz kapcsolódnak. A test_valid_login a LoginPage magas szintű metódusait használja a login-t. Ha a felhasználónév mező lokátora megváltozik, csak a LoginPage-ben kell módosítani, nem minden tesztben.