ავტომატიზაციის ტესტირება მნიშვნელოვანი ნაწილია პროგრამული უზრუნველყოფის ხარისხის უზრუნველყოფის პროცესში. ტესტირების სწორი სტრუქტურისა და დიზაინის პატერნების არჩევა შეიძლება მნიშვნელოვნად გაამარტივოს ტესტების წერა და მართვა. ორი პოპულარული დიზაინის პატერნი, 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-ის მახასიათებლები მოიცავს:
- ანოტაციები:
@FindBy
ანოტაციების გამოყენება ელემენტების განსაზღვრისთვის. - ელემენტების ავტომატური ინიციალიზაცია:
initElements
მეთოდის გამოყენებით ელემენტები ავტომატურად ინიციალიზდება. - ელემენტებზე მარტივი წვდომა: ელემენტების განლაგების და გამოყენების პროცესი უფრო მარტივი ხდება.
- გვიან პერიოდზე ინიციალიზაცია (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 ამარტივებს ელემენტების ინიციალიზაციას და გამოყენებას. ამ ორი პატერნის ერთად გამოყენებით შეგიძლიათ შექმნათ უფრო გასაგები, მართვადი და ეფექტური ტესტირების კოდი. ამის შედეგად მიიღებთ ტესტებს, რომლებიც ადვილად იწერება, უფრო სწრაფად სრულდება და უფრო მარტივად იმართება.