Sobes.tech
Senior

Šta je Policy Model (PM)?

sobes.tech АИ

Одговор од АИ

Модел политике (PM) у контексту аутоматског тестирања је проширење Page Object Model (POM). Основна идеја је да се одвоје политике или пословна правила интеракције са елементима странице (и понашање везано за ове политике) од самих објеката страница.

Уместо да укључују провере и сложену логику директно у Page Objects, ова правила се издвајају у посебне класе или модуле — Policy Objects.

Предности овог приступа:

  • Побољшана читљивост: Тест сценарији постају једноставнији и лакши за разумевање, јер се фокусирају на описану акцију, а не на њену валидацију.
  • Поновна употребљивост: Политике могу бити коришћене за различите Page објекте или у различитим тест сценаријима.
  • Одвојеност одговорности: Page објекти одговарају само за интеракцију са елементима странице, а Policy објекти за правила и валидацију.
  • Олакшање одржавања: Промена пословног правила захтева измену само Policy Object-а, а не свих Page објеката где се правило примењује.
  • Боља скалабилност: Лакше управљање већим бројем тестова и страница са развојем апликације.

Структура PM може изгледати овако:

  • Page објекти: Представљају одређене странице или UI модуле. Садрже локаторе елемената и методе за интеракцију са њима (нпр. click_button(), enter_text()). Не садрже проверу логике.
  • Policy објекти: Представљају пословна правила или политике. Садрже методе за проверу стања UI или извођење акција заснованих на пословној логици (нпр. is_user_logged_in(), can_submit_form(), perform_checkout()). Могу користити један или више Page објеката.
  • Тестови: Користе Policy објекте за извођење сценарија који укључују провере и пословну логику.

Пример (псеудо код):

# Page Object
class LoginPage:
    def enter_username(self, username):
        # интеракција са пољем за корисничко име
        pass

    def enter_password(self, password):
        # интеракција са пољем за лозинку
        pass

    def click_login_button(self):
        # интеракција са дугметом за пријаву
        pass

# Policy Object
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # Предпоставља се да постоји DashboardPage

    def login_as_user(self, username, password):
        self.login_page.enter_username(username)
        self.login_page.enter_password(password)
        self.login_page.click_login_button()
        # Може се додати провера овде или у одвојеним методима
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Провера да ли су видљиви елементи таблоида
        return self.dashboard_page.is_dashboard_displayed()

# Тест
class LoginTest:
    def test_successful_login(self, driver):
        auth_policy = AuthPolicy(driver)
        auth_policy.login_as_user("test_user", "password123")
        assert auth_policy.is_user_logged_in(), "Корисник треба да буде улогован"