Middle
Mi az a Page Object minta?
sobes.tech MI
Válasz az MI-től
A Page Object (PO) minta egy tervezési sablon az automatizált webes felületi teszteléshez, amely a weboldalakat osztályokként ábrázolja. Minden PO osztály beburkolja az elemeket és a felhasználó által végrehajtott műveleteket egy adott oldalon.
Használatának előnyei:
- Áttekinthetőség: A tesztkód könnyebben érthetővé válik, mivel magas szintű módszereken keresztül lép kapcsolatba az oldalakkal és azok elemeivel.
- Karbantarthatóság: Az oldal elemeinek lokátorain változtatva elegendő csak az adott Page Object osztályt módosítani, anélkül, hogy újra kellene írni a teszteket, amelyek ezeket az elemeket használják.
- Újrafelhasználhatóság: A Page Object módszerei és elemei különböző tesztesetekben is felhasználhatók.
- Felelősségek szétválasztása: Az UI elemekkel való interakció logikája el van választva a tesztszkript logikájától.
Fő komponensek:
- Oldal osztályok: Egy adott weboldal absztrakcióját képviselik.
- Web elemek: Az oldal osztályán belül határozzák meg locatorok segítségével (XPath, CSS szelektorok, ID stb.).
- Módszerek: Az oldal műveleteit reprezentálják (pl.
login(),addToCart(),search()). Ezek a módszerek az web elemekkel lépnek kapcsolatba.
Struktúra példa:
# 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") # Felhasználónév mező lokátora
self.password_input = (By.ID, "password") # Jelszó mező lokátora
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Bejelentkezés gomb lokátora
self.error_message = (By.CSS_SELECTOR, ".error-message") # Hibaüzenet lokátora
def open(self, url):
self.driver.get(url) # Az oldal megnyitása
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Felhasználónév beírása
self.driver.find_element(*self.password_input).send_keys(password) # Jelszó beírása
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Bejelentkezés gomb megnyomása
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Hibaüzenet szövegének lekérése
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object osztály importálása
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Driver inicializálása
self.login_page = LoginPage(self.driver) # Page Object példány létrehozása
def tearDown(self):
self.driver.quit() # Driver bezárása
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Az oldal megnyitása
self.login_page.enter_credentials("valid_user", "valid_password") # Adatok megadása
self.login_page.click_login_button() # Gombra kattintás
# További ellenőrzések a sikeres bejelentkezés után
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Az oldal megnyitása
self.login_page.enter_credentials("invalid_user", "wrong_password") # Adatok megadása
self.login_page.click_login_button() # Gombra kattintás
error_text = self.login_page.get_error_message() # Hibaüzenet lekérése
self.assertIn("Hibás felhasználónév vagy jelszó", error_text) # Üzenet ellenőrzése
if __name__ == "__main__":
unittest.main()
Ebben a példában a LoginPage egy Page Object a bejelentkezési oldalhoz. A test_login.py tesztek a osztály metódusait használják, elrejtve az elemekkel való közvetlen interakció részleteit.
A Page Object minta a webes felületi tesztelés automatizálásának de-facto szabványa, mely a karbantarthatóság és az olvashatóság szempontjából kiemelkedő előnyökkel jár.