Page Object nümunəsi nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Page Object nümunəsi, veb tətbiqlərinin test avtomatlaşdırılmasında oxunaqlılığı artırmaq, dəstəklənməyi asanlaşdırmaq və kod təkrarlamasını azaltmaq üçün istifadə olunan dizayn nümunəsidir. Bu, obyekt yönümlü yanaşmadır və hər bir səhifə (və ya əhəmiyyətli komponent) veb tətbiqində ayrı bir sinf ilə təmsil olunur.
Page Object əsas fikirləri:
- Səhifənin elementlərinin və onlarla edilə biləcək əməliyyatların kapsüllənməsi.
- Elementlərin lokalizatorları və testlərin biznes məntiqindən ayrılması.
- Səhifə ilə qarşılıqlı əlaqə üçün yüksək səviyyəli API təmin etmək.
Page Object istifadəsinin üstünlükləri:
- Testlərin oxunaqlığını artırır: Testlər daha deklarativ olur, istifadəçi interfeysi ilə qarşılıqlı əlaqə addımlarını biznes dilində təsvir edir.
- Dəstək asanlığı: UI dəyişəndə (məsələn, elementin lokalizatoru dəyişəndə), bu yalnız bir Page Object sinfində dəyişdirilməlidir, bu da hər bir testə təsir etmir.
- Kod təkrarlamasını azaldır: Ümumi səhifə əməliyyatları Page Object metodlarına kapsüllənmiş və müxtəlif testlərdə istifadə oluna bilər.
- Testlərin sabitliyini artırır: UI detalları ilə abstraksiya vasitəsilə.
Nümunə strukturu:
Tutaq ki, giriş səhifəmiz var. Biz LoginPage sinfi yarada bilərik.
# login_page.py
from selenium.webdriver.common.by import By
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_input = (By.ID, "username")
self.password_input = (By.ID, "password")
self.login_button = (By.XPATH, "//button[text()='Login']")
def set_username(self, username):
self.driver.find_element(*self.username_input).send_keys(username)
def set_password(self, password):
self.driver.find_element(*self.password_input).send_keys(password)
def click_login(self):
self.driver.find_element(*self.login_button).click()
def login(self, username, password):
self.set_username(username)
self.set_password(password)
self.click_login()
Testdə istifadə:
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage
class LoginTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("http://example.com/login")
def test_valid_login(self):
login_page = LoginPage(self.driver)
login_page.login("valid_user", "valid_password")
# Uğurlu girişin yoxlanması
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
Burada, LoginPage sinfi giriş səhifəsi ilə əlaqəli lokalizatorları və əməliyyatları kapsülləyir. test_valid_login login kimi yüksək səviyyəli metodlar vasitəsilə LoginPage ilə qarşılıqlı əlaqədə olur. Əgər istifadəçi adı sahəsinin lokalizatoru dəyişərsə, onu yalnız LoginPagedə dəyişmək kifayətdir.