Sobes.tech
Senior

Модели сиёсӣ (PM) чист?

sobes.tech AI

Ҷавоб аз AI

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