Sobes.tech
Senior

Какво е Policy Model (PM)?

sobes.tech AI

Отговор от AI

Модел на политика (PM) в контекста на автоматизираното тестване е разширение на Page Object Model (POM). Основната идея е да се отделят политиките или бизнес правилата за взаимодействие с елементите на страницата (и поведението, свързано с тези политики) от самите обекти на страниците.

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

Предимствата на този подход:

  • Подобрена четливост: Тестовите сценарии стават по-прости и по-лесни за разбиране, тъй като се фокусират върху описваното действие, а не върху неговата валидация.
  • Повторна употреба: Политиките могат да бъдат използвани за различни Page Objects или в различни тестови сценарии.
  • Разделяне на отговорностите: Page Objects отговарят само за взаимодействието с елементите на страницата, а Policy Objects — за правилата и валидирането.
  • Улеснение при поддръжка: Промяната на бизнес правило изисква промяна само в Policy Object, а не във всички Page Objects, където се прилага това правило.
  • По-добра мащабируемост: По-лесно управление на по-голям брой тестове и страници с развитието на приложението.

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

  • Page Objects: Представляват отделни страници или UI модули. Съдържат локатори на елементи и методи за взаимодействие с тях (например, click_button(), enter_text()). Не съдържат логика за проверки.
  • Policy Objects: Представляват бизнес правилата или политиките. Съдържат методи за проверка на състоянието на UI или изпълнение на действия, базирани на бизнес логиката (например, is_user_logged_in(), can_submit_form(), perform_checkout()). Могат да използват един или няколко Page Objects.
  • Тестове: Използват Policy Objects за изпълнение на сценарии, които включват проверки и бизнес логика.

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

# 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(), "Потребителят трябва да е влязъл в системата"