Sobes.tech
Middle

რა არის Page Object ნიმუში?

sobes.tech AI

პასუხი AI-სგან

Page Object-ის ნიმუში არის დიზაინის ნიმუში, რომელიც გამოიყენება ვებ-აპლიკაციების ტესტირების ავტომატიზაციაში კითხულობის, შენარჩუნების და კოდის დუბლირების შემცირების მიზნით. ეს ობიექტზე ორიენტირებული მიდგომაა, სადაც თითოეული გვერდი (ან მნიშვნელოვანი კომპონენტი) წარმოდგენილია ცალკეულ კლასში.

Page Object-ის ძირითადი იდეები:

  • გვერდის ელემენტების და მათთან დაკავშირებული მოქმედებების ინკაფსულაცია.
  • ელემენტების ლოკატორებისა და ტესტების ბიზნეს-ლოგიკის განცალკევება.
  • მაღალი დონის API-ის მიწოდება გვერდთან ურთიერთქმედებისთვის.

Page Object-ის გამოყენების უპირატესობები:

  • ტესტების კითხულობის გაზრდა: ტესტები ხდება დეკლარატიული, აღწერენ ურთიერთქმედების ნაბიჯებს ბიზნეს ენაზე.
  • მდგომარეობის გაუმჯობესება: UI-ის ცვლილების დროს (მაგალითად, ელემენტის ლოკატორის ცვლილება), საკმარისია მხოლოდ ერთი Page Object კლასში ცვლილების შეტანა, არა ყველა ტესტში, რომელიც იყენებს ამ ელემენტს.
  • კოდის დუბლირების შემცირება: საერთო მოქმედებები გვერდთან ინკაფსულირებულია Page Object მეთოდებში და შეიძლება გამოყენებულ იქნას სხვადასხვა ტესტში.
  • ტესტების სტაბილურობის გაზრდა: UI-ის დეტალებისგან აბსტრაქციის მეშვეობით.

მაგალითური სტრუქტურა:

فرض کنیم، صفحه ورود داریم. می‌توانیم کلاس LoginPage ایجاد کنیم.

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

ტესტში გამოყენება:

# 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")
        # წარმატებული შესვლის შემოწმება

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

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

აქ LoginPage კლასი ინკაფსულირებს ლოკატორებს და მოქმედებებს, რომლებიც დაკავშირებულია შესვლის გვერდთან. ტესტი test_valid_login ურთიერთქმედებს LoginPage-თან მაღალი დონის მეთოდებით login-ის საშუალებით. თუ მომხმარებლის სახელის ველი შეიცვლება, მხოლოდ LoginPage-ში უნდა შეიცვალოს.