Sobes.tech
Middle

Page Object үлгүсү эмне?

sobes.tech AI

AIден жооп

Page Object (PO) үлгісі — бұл автоматташтырылган тестілеу үшін жобалау үлгісі, ол веб-беттерді сыныптар ретінде көрсетеді. Әрбір PO сыныбы элементтер мен әрекеттерді қамтиды, олар пайдаланушы нақты бетте орындайды:

Артықшылықтары:

  • Оқылымдылық: Тест коды түсінікті болады, себебі ол беттермен және олардың элементтерімен жоғары деңгейлі әдістер арқылы әрекеттеседі:
  • Қолдау: Егер беттегі элементтердің локаторлары өзгерсе, тек сәйкес Page Object сыныбын өзгерту жеткілікті, тесттерді қайта жазудың қажеті жоқ:
  • Қайталау қолдану: Page Object әдістері мен элементтері әртүрлі тест сценарияларында қолданылуы мүмкін:
  • Жауапкершілікті бөлу: UI элементтерімен әрекет ету логикасы тест сценарийінің логикасынан бөлінген:

Негізгі компоненттері:

  • Беттер сыныптары: нақты веб-беттің абстракциясы.
  • Веб-элементтер: бет сыныбында локаторлар (XPath, CSS-селекторлар, ID және т.б.) пайдаланып анықталады.
  • Әдістер: бетте орындалатын әрекеттерді көрсетеді (мысалы, login(), addToCart(), search()). Бұл әдістер веб-элементтермен әрекеттеседі:

Үлгі құрылым:

# 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[contains(text(), 'Login')]") # Кіру батырмасының локаторы
        self.error_message = (By.CSS_SELECTOR, ".error-message") # Қате туралы хабарламаның локаторы

    def open(self, url):
        self.driver.get(url) # Бетті ашады

    def enter_credentials(self, username, password):
        self.driver.find_element(*self.username_input).send_keys(username) # Пайдаланушы атын енгізеді
        self.driver.find_element(*self.password_input).send_keys(password) # Құпия сөзді енгізеді

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click() # Батырманы басады

    def get_error_message(self):
        return self.driver.find_element(*self.error_message).text # Қате туралы хабарламаның мәтінін алады
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object сыныбын импорттау

class LoginTests(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome() # Драйверді инициализациялау
        self.login_page = LoginPage(self.driver) # Page Object мысалы

    def tearDown(self):
        self.driver.quit() # Драйверді жабу

    def test_valid_login(self):
        self.login_page.open("http://example.com/login") # Бетті ашу
        self.login_page.enter_credentials("valid_user", "valid_password") # Мәліметтерді енгізу
        self.login_page.click_login_button() # Батырманы басу
        # Сәтті кіруді қосымша тексерулермен толықтырыңыз

    def test_invalid_login(self):
        self.login_page.open("http://example.com/login") # Бетті ашу
        self.login_page.enter_credentials("invalid_user", "wrong_password") # Мәліметтерді енгізу
        self.login_page.click_login_button() # Батырманы басу
        error_text = self.login_page.get_error_message() # Қате туралы хабарламаны алу
        self.assertIn("Неверные учетные данные", error_text) # Хабарламаны тексеру

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

Бұл мысалда LoginPage — кіру бетінің Page Object-і. test_login.py тесттері осы сыныптың әдістерін пайдаланады, элементтермен әрекеттесу бөлшектерін жасырады:

Page Object үлгісі — автоматтандырылған веб-интерфейс тестілеудің стандартты үлгісі, оның артықшылықтары — қолдау және оқылымдылық үшін.