Sobes.tech
Senior

Kas yra Policy Model (PM)?

sobes.tech AI

Atsakymas iš AI

Politikos modelis (PM) automatizuoto testavimo kontekste yra Page Object Model (POM) plėtinys. Pagrindinė idėja yra atskirti politiką arba verslo taisykles, susijusias su sąveika su puslapio elementais (ir su šių politikų elgesiu), nuo pačių puslapio objektų.

Vietoj to, kad tiesiogiai įtraukti patikrinimus ir sudėtingą logiką į Page Object'us, šios taisyklės išskiriamos į atskirus klases arba modulius — Policy Objects.

Šio požiūrio privalumai:

  • Geresnė skaitomumas: Testų scenarijai tampa paprastesni ir lengviau suprantami, nes jie sutelkti į aprašomą veiksmą, o ne į jo validaciją.
  • Pakartotinis naudojimas: Politikos gali būti naudojamos skirtingiems Page Object'ams arba skirtinguose testų scenarijuose.
  • Atsakomybės pasidalijimas: Page Object'ai atsako tik už sąveiką su puslapio elementais, o Policy Objects — už taisykles ir validaciją.
  • Paprastesnė priežiūra: Verslo taisyklės pakeitimas reikalauja pakeisti tik Policy Object, o ne visus Page Object'us, kur ta taisyklė taikoma.
  • Geresnė mastelio keitimas: Lengviau valdyti didesnį testų ir puslapių kiekį, vystant programą.

PM struktūra gali atrodyti taip:

  • Page Object'ai: Atstovauja atskirus puslapius arba UI modulius. Juose yra elementų lokatoriai ir metodai jais sąveikauti (pvz., click_button(), enter_text()). Jie neturi patikrinimo logikos.
  • Policy Object'ai: Atstovauja verslo taisykles arba politiką. Juose yra metodai UI būsenos patikrinimui arba veiksmų atlikimui, pagrįstiems verslo logika (pvz., is_user_logged_in(), can_submit_form(), perform_checkout()). Jie gali naudoti vieną arba kelis Page Object'us.
  • Testai: Naudoja Policy Object'us scenarijų vykdymui, įskaitant patikrinimus ir verslo logiką.

Pavyzdys (pseudokodas):

# Page Object
class LoginPage:
    def enter_username(self, username):
        # sąveika su naudotojo vardo lauku
        pass

    def enter_password(self, password):
        # sąveika su slaptažodžio lauku
        pass

    def click_login_button(self):
        # sąveika su prisijungimo mygtuku
        pass

# Policy Object
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # Tarkime, DashboardPage egzistuoja

    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()
        # Čia arba kituose metoduose galima pridėti patikrinimus
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Patikrinimas, ar matomi dashboard elementai
        return self.dashboard_page.is_dashboard_displayed()

# Testas
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(), "Vartotojas turėtų būti prisijungęs"