Sobes.tech
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.