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.