Senior
Siyasət Modeli (PM) nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Avtomatlaşdırılmış testlər kontekstində Politika Modeli (PM), Səhifə Obyekti Modelinin (POM) genişləndirilməsidir. Əsas fikir, səhifənin elementləri ilə qarşılıqlı əlaqə üçün siyasətləri və ya biznes qaydalarını səhifə obyektlərindən ayırmaqdır.
Səhifə Obyektlərinə birbaşa yoxlamalar və mürəkkəb məntiq daxil etmək əvəzinə, bu qaydalar ayrı sinflərə və ya modullara — Politika Obyektlərinə — köçürülür.
Bu yanaşmanın üstünlükləri:
- Daha yaxşı oxunaqlıq: Test ssenariləri daha sadə və anlaşılan olur, çünki onlar təsvir olunan hərəkətə fokuslanır, onun doğrulanmasına yox.
- Təkrar istifadə: Politika müxtəlif Səhifə Obyektləri və ya müxtəlif test ssenarilərində istifadə oluna bilər.
- Məsuliyyətlərin bölünməsi: Səhifə Obyektləri yalnız səhifə elementləri ilə qarşılıqlı əlaqə üçün cavabdehdir, Politika Obyektləri isə qaydalar və doğrulamalar üçün.
- Dəstək asanlığı: Biznes qaydasını dəyişmək yalnız Politika Obyektini dəyişməyi tələb edir, bütün Səhifə Obyektlərini yox.
- Daha yaxşı miqyaslama: Tətbiq inkişaf etdikcə, daha çox test və səhifəni idarə etmək asan olur.
PM-nin strukturu belə ola bilər:
- Səhifə Obyektləri: Fərdi səhifələri və ya UI modulları təmsil edir. Elementlərin lokalizatorlarını və onlarla qarşılıqlı əlaqə metodlarını ehtiva edir (məsələn,
click_button(),enter_text()). Doğrulama məntiqini ehtiva etmir. - Politika Obyektləri: Biznes qaydalarını və ya siyasətləri təmsil edir. UI vəziyyətini yoxlamaq və ya biznes məntiqinə əsaslanan əməliyyatları yerinə yetirmək üçün metodlar ehtiva edir (məsələn,
is_user_logged_in(),can_submit_form(),perform_checkout()). Bir və ya bir neçə Səhifə Obyektindən istifadə edə bilər. - Testlər: Politika Obyektlərindən istifadə edərək, yoxlamalar və biznes məntiqini əhatə edən ssenariləri icra edir.
Nümunə (sözsüz kod):
# Səhifə Objekti
class LoginPage:
def enter_username(self, username):
# istifadəçi adını daxil et
pass
def enter_password(self, password):
# şifrə daxil et
pass
def click_login_button(self):
# giriş düyməsinə klik et
pass
# Politika Objekti
class AuthPolicy:
def __init__(self, driver):
self.login_page = LoginPage(driver)
self.dashboard_page = DashboardPage(driver) # DashboardPage mövcuddur
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()
# Burada və ya ayrı metodlarda yoxlamalar əlavə edə bilərsiniz
# return self.is_user_logged_in()
def is_user_logged_in(self):
# Dashboard elementlərinin görünür olub-olmadığını yoxla
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(), "İstifadəçi daxil olmalıdı"