Middle
Šta je pattern Page Object?
sobes.tech АИ
Одговор од АИ
Šablon Page Object (PO) je obrazac za dizajn za automatizovano testiranje web interfejsa, koji predstavlja veb stranice kao klase. Svaka PO klasa enkapsulira elemente i akcije koje korisnik izvršava na određenoj stranici.
Prednosti korišćenja:
- Čitljivost: Kod testa postaje jasniji, jer komunicira sa stranicama i njihovim elementima putem visokorangovih metoda.
- Održavanje: Kada se promene locatori elemenata na stranici, dovoljno je izvršiti izmene samo u odgovarajućoj PO klasi, bez potrebe za prepisivanjem testova koji koriste te elemente.
- Ponovna upotreba: Metode i elementi PO mogu biti korišćeni u različitim test scenarijima.
- Razdvajanje odgovornosti: Logika interakcije sa UI elementima je odvojena od logike test scenarija.
Glavne komponente:
- Klase stranica: Predstavljaju apstrakciju konkretne veb stranice.
- Veb elementi: Definišu se unutar klase stranice pomoću locatora (XPath, CSS selektori, ID itd.).
- Metode: Predstavljaju akcije koje se mogu izvršiti na stranici (npr.,
login(),addToCart(),search()). Ove metode interaguju sa veb elementima.
Primer strukture:
# 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") # Locator za polje za korisničko ime
self.password_input = (By.ID, "password") # Locator za polje za lozinku
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Locator za dugme za prijavu
self.error_message = (By.CSS_SELECTOR, ".error-message") # Locator za poruku o grešci
def open(self, url):
self.driver.get(url) # Otvara stranicu
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Unosi korisničko ime
self.driver.find_element(*self.password_input).send_keys(password) # Unosi lozinku
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Klik na dugme za prijavu
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Dobija tekst poruke o grešci
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Importovanje Page Object klase
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Inicijalizacija drajvera
self.login_page = LoginPage(self.driver) # Kreiranje instance Page Object
def tearDown(self):
self.driver.quit() # Zatvaranje drajvera
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Otvaranje stranice
self.login_page.enter_credentials("valid_user", "valid_password") # Unos podataka
self.login_page.click_login_button() # Klik na dugme
# Dodatne provere nakon uspešnog prijavljivanja
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Otvaranje stranice
self.login_page.enter_credentials("invalid_user", "wrong_password") # Unos podataka
self.login_page.click_login_button() # Klik na dugme
error_text = self.login_page.get_error_message() # Dobijanje teksta greške
self.assertIn("Neispravni podaci", error_text) # Provera poruke o grešci
if __name__ == "__main__":
unittest.main()
U ovom primeru, LoginPage predstavlja Page Object za stranicu za prijavu. Testovi u test_login.py koriste metode ove klase, apstrahujući detalje interakcije sa elementima.
Šablon Page Object je de-facto standard u automatizaciji testiranja web interfejsa zbog svojih prednosti u održavanju i čitljivosti.