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 ტესტები იყენებენ ამ კლასის მეთოდებს, რათა abstraction-ით დაიფაროს ელემენტებთან ურთიერთქმედების დეტალები:

Page Object ნიმუში — ეს არის ავტომატიზებული ვებ-ინტერფეის ტესტირების სტანდარტული ნიმუში, რომელიც თავისი უპირატესობებით არის პოპულარული შენარჩუნებისა და კითხულობის თვალსაზრისით।