Sobes.tech
Middle

Page Object shabloni nima?

sobes.tech AI

AIdan javob

Page Object (PO) naqshoni, veb interfeyslarining avtomatlashtirilgan testlari uchun dizayn shablonidir va veb sahifalarni sinflar sifatida ifodalaydi. Har bir PO sinfi, ma'lum bir sahifadagi elementlar va foydalanuvchi tomonidan bajariladigan harakatlarni inkapsulyatsiya qiladi.

Foydalanish afzalliklari:

  • O'qilishi: Test kodi, sahifalar va ularning elementlari bilan yuqori darajadagi metodlar orqali o'zaro ta'sir qilgani uchun, yanada tushunarli bo'ladi.
  • Texnik xizmat ko'rsatish: Sahifadagi elementlarning lokalizatorlari o'zgarganda, faqat mos keladigan Page Object sinfini o'zgartirish kifoya qiladi, bu esa ularni ishlatadigan testlarni qayta yozishni talab qilmaydi.
  • Qayta ishlatish: Page Object metodlari va elementlari turli test ssenariylarida ishlatilishi mumkin.
  • Mas'uliyatlarni ajratish: UI elementlari bilan o'zaro ta'sir qilish mantiqi, test ssenariyining mantiqidan ajratilgan.

Asosiy komponentlar:

  • Sahifa sinflari: Aniq bir veb sahifaning abstraktsiyasini ifodalaydi.
  • Web elementlar: Sahifa sinfi ichida, lokalizatorlar (XPath, CSS selektorlar, ID va boshqalar) yordamida aniqlanadi.
  • Metodlar: Sahifada bajarilishi mumkin bo'lgan harakatlarni ifodalaydi (masalan, login(), addToCart(), search()). Bu metodlar web elementlar bilan o'zaro ta'sir qiladi.

Struktura misoli:

# 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")  # Foydalanuvchi nomi kirish maydonchasi lokalizatori
        self.password_input = (By.ID, "password")  # Parol kirish maydonchasi lokalizatori
        self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Kirish tugmasi lokalizatori
        self.error_message = (By.CSS_SELECTOR, ".error-message") # Xato xabari lokalizatori

    def open(self, url):
        self.driver.get(url) # Sahifani ochadi

    def enter_credentials(self, username, password):
        self.driver.find_element(*self.username_input).send_keys(username) # Foydalanuvchi nomini kiritadi
        self.driver.find_element(*self.password_input).send_keys(password) # Parolni kiritadi

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click() # Kirish tugmasiga bosadi

    def get_error_message(self):
        return self.driver.find_element(*self.error_message).text # Xato xabar matnini oladi
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object sinfini import qilish

class LoginTests(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome() # WebDriver ni ishga tushurish
        self.login_page = LoginPage(self.driver) # Page Object ning instansiyasini yaratish

    def tearDown(self):
        self.driver.quit() # WebDriver ni yopish

    def test_valid_login(self):
        self.login_page.open("http://example.com/login") # Sahifani ochish
        self.login_page.enter_credentials("valid_user", "valid_password") # Ma'lumotlarni kiritish
        self.login_page.click_login_button() # Tugmani bosish
        # Muvaffaqiyatli kirishdan keyingi qo'shimcha tekshiruvlar

    def test_invalid_login(self):
        self.login_page.open("http://example.com/login") # Sahifani ochish
        self.login_page.enter_credentials("invalid_user", "wrong_password") # Ma'lumotlarni kiritish
        self.login_page.click_login_button() # Tugmani bosish
        error_text = self.login_page.get_error_message() # Xato matnini olish
        self.assertIn("Noto'g'ri ma'lumotlar", error_text) # Xabarni tekshirish

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

Ushbu misolda, LoginPage login sahifasi uchun Page Object sifatida taqdim etiladi. test_login.py testlari, bu sinf metodlarini ishlatadi, elementlar bilan o'zaro ta'sir tafsilotlaridan ajratilgan holda.

Page Object dizayni, veb interfeys testlarini avtomatlashtirishda, uning texnik xizmat ko'rsatish va o'qilishi qulayligi uchun de-fakto standart hisoblanadi.