Sobes.tech
Senior

Policy Model (PM) nima?

sobes.tech AI

AIdan javob

Otomatik test kontekstida Politika Modeli (PM), Sahifa Ob'ekt Modelining (POM) kengaytmasidir. Asosiy g'oya, sahifa elementlari bilan o'zaro ta'sir qilish uchun siyosatlar yoki biznes qoidalarini sahifa ob'ektlaridan ajratishdir.

Sahifa Ob'ektlariga to'g'ridan-to'g'ri tekshiruvlar va murakkab mantiqni kiritish o'rniga, bu qoidalar alohida sinflar yoki modullar — Politika Ob'ektlariga o'tkaziladi.

Ushbu yondashuvning afzalliklari:

  • Yaxshi o'qilishi: Test ssenariyalari oddiyroq va tushunarliroq bo'ladi, chunki ular tasvirlangan harakatga qaratilgan, uning validatsiyasiga emas.
  • Qayta ishlatish: Siyosatlar turli Sahifa Ob'ektlari yoki turli test ssenariylarida ishlatilishi mumkin.
  • Mas'uliyatlarni ajratish: Sahifa Ob'ektlari faqat sahifa elementlari bilan o'zaro ta'sir uchun javobgardir, Politika Ob'ektlari esa qoidalar va validatsiyalar uchun.
  • Qo'llab-quvvatlashni osonlashtirish: Biznes qoidalarini o'zgartirish faqat Politika Ob'ektini o'zgartirishni talab qiladi, barcha sahifa ob'ektlarini emas.
  • Yaxshi kengaytiriluvchanlik: Ilova rivojlanishi bilan ko'proq testlar va sahifalarni boshqarish osonroq bo'ladi.

PM tuzilishi quyidagicha bo'lishi mumkin:

  • Sahifa Ob'ektlari: Bitta sahifa yoki UI modullarini ifodalaydi. Elementlarni lokalizatorlar va ular bilan o'zaro ta'sir qilish metodlarini o'z ichiga oladi (masalan, click_button(), enter_text()). Validatsiya mantiqini o'z ichiga olmaydi.
  • Politika Ob'ektlari: Biznes qoidalarini yoki siyosatlarni ifodalaydi. UI holatini tekshirish yoki biznes mantiqiga asoslangan harakatlarni bajarish uchun metodlarni o'z ichiga oladi (masalan, is_user_logged_in(), can_submit_form(), perform_checkout()). Bir yoki bir nechta Sahifa Ob'ektlaridan foydalanishi mumkin.
  • Testlar: Siyosat Ob'ektlarini ishlatib, tekshiruvlar va biznes mantiqini o'z ichiga olgan ssenariylarni bajaradi.

Misol (pseudokod):

# Sahifa Ob'ekti
class LoginPage:
    def enter_username(self, username):
        # foydalanuvchi nomi maydoniga ta'sir qilish
        pass

    def enter_password(self, password):
        # parol maydoniga ta'sir qilish
        pass

    def click_login_button(self):
        # login tugmasiga ta'sir qilish
        pass

# Politika Ob'ekti
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # DashboardPage mavjud deb hisoblaymiz

    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()
        # Bu yerda yoki alohida metodlarda tekshiruvlar qo'shish mumkin
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Dashboard elementlari ko'rinadiganligini tekshirish
        return self.dashboard_page.is_dashboard_displayed()

# Test
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(), "Foydalanuvchi tizimga kirgan bo'lishi kerak"