Page Object Model (POM) და PageFactory: როგორ გამოვიყენოთ ისინი ეფექტურად ერთად

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

Page Object Model (POM)

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

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

POM-ის გამოყენების მაგალითი:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class LoginPage {
WebDriver driver;

// ლოკატორები
By username = By.id("username");
By password = By.id("password");
By loginButton = By.id("login");

// კონსტრუქტორი
public LoginPage(WebDriver driver) {
    this.driver = driver;
}

// Methods to interact with elements
public void enterUsername(String user) {
    driver.findElement(username).sendKeys(user);
}

public void enterPassword(String pass) {
    driver.findElement(password).sendKeys(pass);
}

public void clickLogin() {
    driver.findElement(loginButton).click();
}
}

PageFactory:
PageFactory არის Selenium-ის ჩაშენებული კლასი, რომელიც უზრუნველყოფს POM-ის გამოყენების გამარტივებას. იგი ავტომატურად ინიციალიზებს ელემენტებს კლასის ობიექტის შექმნისას და უზრუნველყოფს ანოტაციების გამოყენებას ელემენტების განსაზღვრისთვის. PageFactory-ის მახასიათებლები მოიცავს:

  1. ანოტაციები: @FindBy ანოტაციების გამოყენება ელემენტების განსაზღვრისთვის.
  2. ელემენტების ავტომატური ინიციალიზაცია: initElements მეთოდის გამოყენებით ელემენტები ავტომატურად ინიციალიზდება.
  3. ელემენტებზე მარტივი წვდომა: ელემენტების განლაგების და გამოყენების პროცესი უფრო მარტივი ხდება.
  4. გვიან პერიოდზე ინიციალიზაცია (lazy initialization): ელემენტები ინიციალიზდება მხოლოდ მაშინ, როცა მათზე პირველად მიმართავენ, რაც აუმჯობესებს შესრულების ეფექტურობას.

PageFactory-ის გამოყენების მაგალითი:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class LoginPage {
WebDriver driver;

// @FindBy ანოტაციის მაგალითი
@FindBy(id = "username")
WebElement username;

@FindBy(id = "password")
WebElement password;

@FindBy(id = "login")
WebElement loginButton;

// კონსტრუქტორი
public LoginPage(WebDriver driver) {
    this.driver = driver;
    // Initializing elements with PageFactory
    PageFactory.initElements(driver, this);
}

 
public void enterUsername(String user) {
    username.sendKeys(user);
}

public void enterPassword(String pass) {
    password.sendKeys(pass);
}

public void clickLogin() {
    loginButton.click();
}
}

POM და PageFactory ერთდროულად:
POM და PageFactory-ს ერთდროულად გამოყენება არა მხოლოდ მოსულა, არამედ რეკომენდირებულია, რადგან ეს ორი პატერნი ერთად ქმნიან უფრო სტრუქტურირებულ, მარტივ და ეფექტურ ავტომატიზაციის ტესტირების ფრეიმვორქს. PageFactory-ის initElements მეთოდის გამოყენება უზრუნველყოფს ვებ-ელემენტების ავტომატურ ინიციალიზაციას, რაც ამარტივებს POM-ის სტრუქტურას და კოდის მართვას.

ტესტის მაგალითი

ორივე შემთხვევაში ტესტის კლასი ერთნაირად გამოიყურება:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class LoginTest {
WebDriver driver;
LoginPage loginPage;

@BeforeMethod
public void setUp() {
    // Setup WebDriver and initialize the page object
    driver = new ChromeDriver();
    driver.get("https://example.com/login");
    loginPage = new LoginPage(driver);
}

@Test
public void testLogin() {
    loginPage.enterUsername("testuser");
    loginPage.enterPassword("testpassword");
    loginPage.clickLogin();
    // Add assertions to verify login success
}

@AfterMethod
public void tearDown() {
    // Close the browser
    driver.quit();
}
}

და ბოლოს რომ შევადაროთ:

მახასიათებელი Page Object Model (POM) PageFactory
ელემენტების ინიციალიზაცია ხელით უნდა ინიციალიზირდეს ელემენტები ავტომატურად ინიციალიზირდება initElements მეთოდით
კოდის სისუფთავე შესაძლოა მეტი კოდის წერა მოითხოვოს ამცირებს კოდის რაოდენობას და ამარტივებს მას
ანოტაციების გამოყენება არ არის სავალდებულო იყენებს @FindBy და სხვა ანოტაციებს
ელემენტებზე წვდომა უფრო რთული და გრძელი პროცესი მარტივად და სწრაფად ხდება ელემენტებზე წვდომა

დასკვნა

Page Object Model და PageFactory-ის კომბინაცია გთავაზობთ მძლავრ და მოქნილ ფრეიმვორქს ავტომატიზაციის ტესტირებისათვის. POM უზრუნველყოფს ვებ-გვერდების და მათი კომპონენტების სტრუქტურირებას, ხოლო PageFactory ამარტივებს ელემენტების ინიციალიზაციას და გამოყენებას. ამ ორი პატერნის ერთად გამოყენებით შეგიძლიათ შექმნათ უფრო გასაგები, მართვადი და ეფექტური ტესტირების კოდი. ამის შედეგად მიიღებთ ტესტებს, რომლებიც ადვილად იწერება, უფრო სწრაფად სრულდება და უფრო მარტივად იმართება.

კომენტარის დატოვება

თქვენი ელფოსტის მისამართი გამოქვეყნებული არ იყო. აუცილებელი ველები მონიშნულია *