Sobes.tech
Middle

Page Object shabloni nima?

sobes.tech AI

AIdan javob

Page Object naqshoni web-ilovalarining test avtomatizatsiyasida o'qilishi, texnik xizmat ko'rsatish va kod takrorlanishini kamaytirish uchun ishlatiladigan dizayn shablonidir. Bu ob'ektga yo'naltirilgan yondashuv bo'lib, har bir sahifa (yoki muhim komponent) veb-ilovada alohida sinf bilan ifodalanadi.

Page Object asosiy g'oyalari:

  • Sahifa elementlarini va ular bilan bajarilishi mumkin bo'lgan harakatlarni inkapsulyatsiya qilish.
  • Elementlarni lokalizatorlari va testlarning biznes mantiqidan ajratish.
  • Sahifa bilan o'zaro aloqada bo'lish uchun yuqori darajadagi API taqdim etish.

Page Object foydalanishning afzalliklari:

  • Testlarning o'qilishi yaxshilanadi: Testlar, foydalanuvchi interfasi bilan o'zaro ta'sir qilish bosqichlarini biznes tilida tasvirlab, ko'proq deklarativ bo'ladi.
  • Texnik xizmat ko'rsatish osonlashadi: UI o'zgarganda (masalan, element lokalizatori o'zgarganda), faqat bitta Page Object sinfida o'zgartirish qilish kifoya qiladi, bu esa har bir testni ta'sir qilmaydi.
  • Kod takrorlanishini kamaytirish: Sahifa bilan bog'liq umumiy harakatlar Page Object metodlariga inkapsullashgan va turli testlarda qayta ishlatilishi mumkin.
  • Testlarning barqarorligi oshadi: UI tafsilotlaridan abstraktsiya qilish orqali.

Struktura misoli:

Aytaylik, bizda kirish sahifasi bor. Biz LoginPage sinfini yaratishimiz mumkin.

# 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()

Testda foydalanish:

# 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")
        # muvaffaqiyatli kirishni tekshirish

    def tearDown(self):
        self.driver.quit()

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

Bu yerda LoginPage sinfi kirish sahifasi bilan bog'liq lokalizatorlar va harakatlarni inkapsullashadi. test_valid_login yuqori darajadagi metodlar, masalan, login orqali LoginPage bilan o'zaro aloqada bo'ladi. Agar foydalanuvchi nomi maydonining lokalizatori o'zgarsa, uni faqat LoginPageda o'zgartirish kifoya qiladi.