Sobes.tech
Middle

Šta je pattern Page Object?

sobes.tech АИ

Одговор од АИ

Шаблон Page Object је образац дизајна који се користи за побољшање читљивости, одрживости и смањење дуплирања кода у тест автоматизацији веб апликација. Он представља објектно-оријентирани приступ у којем је свака страница (или значајан компонент) веб апликације представљена одвојеним класом.

Главне идеје Page Object:

  • Инкапсулација елемената странице и акција које се могу извршити са њима.
  • Одвајање локатора елемената од пословне логике тестова.
  • Обезбеђивање високог нивоа API за интеракцију са страницом.

Предности коришћења Page Object:

  • Повећање читљивости тестова: Тестови постају декларативнији, описујући кораке интеракције са корисничким интерфејсом на пословном језику.
  • Побољшање одрживости: При промени UI (нпр. промена локатора елемента), довољно је извршити измену само у једном Page Object класе, а не у сваком тесту који користи тај елемент.
  • Смањење дуплирања кода: Заједничке акције са страницом су инкапсулиране у методама Page Object и могу се поново користити у различитим тестовима.
  • Повећање стабилности тестова: Захваљујући апстракцији од детаља имплементације UI.

Пример структуре:

Претпоставимо да имамо страницу за пријаву. Можемо креирати класу LoginPage.

# 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()

Користење у тесту:

# 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")
        # Провера успешног уласка

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

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

Овде класа LoginPage инкапсулира локаторе и акције повезане са страницом за пријаву. Тест test_valid_login комуницира са LoginPage преко високог нивоа метода login. Ако се локатор поља за корисничко име промени, дово је да се промени само у LoginPage.