Sobes.tech
Middle

Page Object nümunəsi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Page Object (PO) nümunəsi, veb interfeyslərinin avtomatlaşdırılmış testləri üçün dizayn şablonudur və veb səhifələri siniflər kimi təmsil edir. Hər bir PO sinfi, müəyyən bir səhifədə istifadəçi tərəfindən yerinə yetirilən elementləri və əməliyyatları kapsülləyir.

İstifadənin üstünlükləri:

  • Oxunaqlıq: Test kodu daha aydın olur, çünki o, səhifələrlə və onların elementləri ilə yüksək səviyyəli metodlar vasitəsilə qarşılıqlı əlaqədə olur.
  • Dəstək: Səhifədəki elementlərin locator-lərində dəyişiklik edildikdə, yalnız müvafiq Page Object sinifində düzəliş etmək kifayətdir və bu, istifadə olunan testləri yenidən yazmağa ehtiyac qalmır.
  • Təkrar istifadə: Page Object metodları və elementləri müxtəlif test ssenarilərində istifadə oluna bilər.
  • Məsuliyyətlərin bölünməsi: UI elementləri ilə qarşılıqlı əlaqə loqikası test ssenarisinin loqikasından ayrılır.

Əsas komponentlər:

  • Səhifə sinifləri: Müəyyən bir veb səhifənin abstraksiyasıdır.
  • Veb elementlər: Səhifə sinfi daxilində locator-lər (XPath, CSS seçicilər, ID və s.) istifadə edilərək müəyyən edilir.
  • Metodlar: Səhifədə yerinə yetirilə bilən əməliyyatları təmsil edir (məsələn, login(), addToCart(), search()). Bu metodlar veb elementlərlə qarşılıqlı əlaqə qurur.

Struktur nümunəsi:

# 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")  # İstifadəçi adını daxil etmək üçün locator
        self.password_input = (By.ID, "password")  # Şifrə daxil etmək üçün locator
        self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Giriş düyməsinin locator-i
        self.error_message = (By.CSS_SELECTOR, ".error-message") # Xəta mesajı locator-i

    def open(self, url):
        self.driver.get(url) # Səhifəni açır

    def enter_credentials(self, username, password):
        self.driver.find_element(*self.username_input).send_keys(username) # İstifadəçi adını daxil edir
        self.driver.find_element(*self.password_input).send_keys(password) # Şifrə daxil edir

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click() # Giriş düyməsinə klikləyir

    def get_error_message(self):
        return self.driver.find_element(*self.error_message).text # Xəta mesajını alır
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object sinifini idxal edir

class LoginTests(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome() # Driver-i initialize edir
        self.login_page = LoginPage(self.driver) # Page Object-in nümunəsini yaradır

    def tearDown(self):
        self.driver.quit() # Driver-i bağlayır

    def test_valid_login(self):
        self.login_page.open("http://example.com/login") # Səhifəni açır
        self.login_page.enter_credentials("valid_user", "valid_password") # Məlumatları daxil edir
        self.login_page.click_login_button() # Düyməyə klikləyir
        # Uğurlu girişdən sonra əlavə yoxlamalar

    def test_invalid_login(self):
        self.login_page.open("http://example.com/login") # Səhifəni açır
        self.login_page.enter_credentials("invalid_user", "wrong_password") # Məlumatları daxil edir
        self.login_page.click_login_button() # Düyməyə klikləyir
        error_text = self.login_page.get_error_message() # Xəta mətnini alır
        self.assertIn("İstifadəçi adı və ya şifrə yanlışdır", error_text) # Xəta mesajını yoxlayır

if __name__ == "__main__":
    unittest.main()

Bu nümunədə, LoginPage səhifə üçün Page Object-i təmsil edir. test_login.py testləri bu sinifin metodlarından istifadə edir və elementlərlə qarşılıqlı əlaqənin detallarını gizlədir.

Page Object modeli, veb interfeys testlərinin avtomatlaşdırılmasında dəfacto standartdır və onun üstünlükləri baxımından dəstək və oxunaqlılıq baxımından çox qiymətlidir.