Model Objek Halaman & Pabrik di Selenium

โšก Ringkasan Cerdas

Page Object Model dan Page Factory di Selenium Mendefinisikan pola desain terstruktur untuk membangun kerangka kerja otomatisasi pengujian yang tangguh dan mudah dipelihara. Pola ini menekankan pembuatan kelas khusus halaman yang merangkum WebElements dan perilakunya, sehingga mengurangi duplikasi dan meningkatkan keterbacaan serta skalabilitas kode. Selenium skrip pengujian.

  • Konsep Inti: Setiap halaman aplikasi sesuai dengan Kelas Halaman khusus yang berisi baik WebElements maupun tindakan yang dilakukan padanya, sehingga memungkinkan pemisahan yang jelas antara struktur UI dan logika pengujian.
  • Fokus Implementasi: POM mempromosikan manajemen elemen yang dapat digunakan kembali dan terpusatโ€”modifikasi pada elemen halaman hanya memerlukan pembaruan dalam satu kelas, bukan beberapa skrip.
  • Keunggulan Desain: Model ini memastikan repositori objek yang lebih bersih, modular, dan independen dari alat yang dapat terintegrasi dengan kerangka kerja seperti TestNG, JUnit, Cucumberatau JBehave.
  • Konvensi penamaan: Metode dalam Kelas Halaman harus mencerminkan tindakan UI yang sebenarnya (misalnya, gotoHomePage()), memperkuat kejelasan semantik dalam alur kerja otomatisasi.
  • Struktur yang Ditingkatkan: Page Factory menyempurnakan POM dengan menggunakan @FindBy anotasi dan PageFactory.initElements() untuk inisialisasi WebElement otomatis, menghilangkan pengulangan. findElement panggilan.
  • Optimasi Kinerja: AjaxElementLocatorFactory memperkenalkan lazy loadingโ€”elemen hanya ditemukan saat diaksesโ€”meningkatkan efisiensi eksekusi dan menangani perilaku halaman dinamis dengan baik.
  • Hasil: Pendekatan terpadu menghasilkan arsitektur otomatisasi pengujian yang mudah dipelihara, dibaca, dan diskalakan, yang selaras dengan standar modern. Selenium praktik.

Model Objek Halaman

Apa itu Page Object Model? Apa saja komponen utamanya?

Model Objek Halaman (POM) adalah pola desain yang populer digunakan dalam otomatisasi pengujian, yang menciptakan Object Repository untuk elemen UI web. Keuntungan dari model ini adalah mengurangi duplikasi kode dan meningkatkan pemeliharaan pengujian.

Dalam model ini, untuk setiap halaman web dalam aplikasi, harus ada Kelas Halaman yang sesuai. Kelas Halaman ini akan mengidentifikasi WebElements dari halaman web tersebut dan juga berisi metode Halaman yang melakukan operasi pada WebElements tersebut. Nama metode ini harus diberikan sesuai dengan tugas yang dilakukannya, misalnya, jika loader menunggu munculnya gateway pembayaran, nama metode POM dapat berupa waitForPaymentScreenDisplay().

Komponen Utama dari Page Object Model

  • Kelas Halaman: Representasikan setiap halaman web sebagai kelas terpisah.
  • Pencari lokasi: Identifikasi elemen web menggunakan ID, XPath, atau pemilih CSS.
  • metode: Berisi tindakan atau operasi yang dilakukan pada elemen .page.
  • Dapat digunakan kembali: PromoPenggunaan kembali kode pengujian dan pemeliharaan yang lebih mudah di seluruh pengujian.
  • Pemisahan Kekhawatiran: Menjaga struktur halaman tetap terpisah dari logika pengujian untuk pengorganisasian yang lebih baik.

Model Objek Halaman

Mengapa Model Objek Halaman?

Memulai otomatisasi UI di Selenium webdriver Ini BUKAN tugas yang sulit. Anda hanya perlu menemukan elemen dan melakukan operasi pada elemen tersebut.

Perhatikan skrip sederhana ini untuk masuk ke sebuah situs web.

Model Objek Halaman

Seperti yang dapat Anda amati, yang kami lakukan hanyalah menemukan elemen dan mengisi nilai untuk elemen tersebut.

Ini adalah skrip yang memakan waktu dan rawan kesalahan. Awalnya tampak mudah, tetapi seiring bertambahnya rangkaian pengujian, mengelola perubahan elemen menjadi sulit. Namun seiring waktu, rangkaian pengujian akan terus berkembang. Saat Anda menambahkan semakin banyak baris kode, segalanya menjadi semakin sulit.

Masalah utama dengan pemeliharaan skrip adalah jika 10 skrip berbeda menggunakan elemen halaman yang sama, dengan perubahan apa pun pada elemen tersebut, Anda perlu mengubah 10 skrip tersebut. Ini memakan waktu dan rawan kesalahan.

Pendekatan yang lebih baik untuk pemeliharaan skrip adalah dengan membuat file kelas terpisah yang akan menemukan elemen web, mengisinya, atau memverifikasinya. Kelas ini kemudian dapat digunakan kembali di beberapa skrip pengujian yang berinteraksi dengan elemen yang sama. Di masa mendatang, jika ada perubahan pada elemen web, kita hanya perlu melakukan perubahan pada 1 file kelas dan bukan 10 skrip yang berbeda.

Pendekatan ini disebut Model Objek Halaman SeleniumHal ini membantu membuat kode lebih mudah dibaca, dipelihara, dan digunakan kembali.

 Model Objek Halaman

๐Ÿ‘‰ Daftar Live Gratis Selenium Project

Keunggulan Badan POM

  1. Pola Desain Objek Halaman menyatakan operasi dan alur di UI harus dipisahkan dari verifikasi. Konsep ini membuat kode kita lebih bersih dan mudah dipahami.
  2. Manfaat kedua adalah bahwa repositori objek bersifat independen dari kasus uji, sehingga kita dapat menggunakan repositori objek yang sama untuk tujuan yang berbeda dengan alat yang berbeda. Misalnya, kita dapat mengintegrasikan Page Object Model di Selenium dengan TestNG/JUnit untuk fungsional pengujian dan pada saat yang sama dengan JBehave/Cucumber untuk pengujian penerimaan.
  3. Code menjadi lebih efisien dan optimal karena menggunakan kembali metode halaman di kelas POM.
  4. Nama metode menjadi lebih realistis dan mudah dipetakan ke operasi yang terjadi di UI. Misalnya, jika setelah mengklik tombol kita sampai di halaman beranda, nama metodenya akan seperti 'gotoHomePage()'.

Cara mengimplementasikan POM di Selenium?

PLog sederhana dalam struktur dasar kerangka kerja Page Object Model, di mana whereManagereIDElements dari AUT dan metode yang beroperasi pada Elemen Web ini dikelola di dalam sebuah file log. Tugas seperti verifikasi harus dipisahkan sebagai bagian dari metode Pengujian.

Melaksanakan Badan POM

Contoh Lengkap

Kasus cobaan: Pergi ke GuruSitus Demo 99.

Langkah 1) Pergi ke GuruSitus Demo 99

Melaksanakan Badan POM

Langkah 2) Di halaman beranda, periksa teks โ€œGuru"99 Bank" hadir

Melaksanakan Badan POM

Langkah 3) Masuk ke aplikasi

Melaksanakan Badan POM

Langkah 4) Verifikasi bahwa halaman Beranda berisi teks sebagai โ€œManger Id: demoโ€

Melaksanakan Badan POM

Dalam contoh ini, kita berurusan dengan dua halaman:

  1. Login
  2. Halaman Beranda (ditampilkan setelah Anda login)

Oleh karena itu, kami membuat 2 POM di Selenium kelas-kelas

Guru99 Halaman login POM

package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99Login {
    WebDriver driver;
    By user99GuruName = By.name("uid");
    By password99Guru = By.name("password");
    By titleText =By.className("barone");
    By login = By.name("btnLogin");
    public Guru99Login(WebDriver driver){
        this.driver = driver;
    }
    //Set user name in textbox
    public void setUserName(String strUserName){
        driver.findElement(user99GuruName).sendKeys(strUserName);
    }
    //Set password in password textbox
    public void setPassword(String strPassword){
         driver.findElement(password99Guru).sendKeys(strPassword);
    }
    //Click on the login button
    public void clickLogin(){
            driver.findElement(login).click();
    }
    //Get the title of Login Page
    public String getLoginTitle(){
     return    driver.findElement(titleText).getText();
    }
    /**
     * This POM method allows the test case to perform the login operation
     * @param strUserName
     * @param strPasword
     * @return
     */
    public void loginToGuru99(String strUserName,String strPasword){
        //Fill user name
        this.setUserName(strUserName);
        //Fill password
        this.setPassword(strPasword);
        //Click Login button
        this.clickLogin();        
    }
}

GuruHalaman Utama 99 POM di Selenium

package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99HomePage {
    WebDriver driver;
    By homePageUserName = By.xpath("//table//tr[@class='heading3']");
    public Guru99HomePage(WebDriver driver){
        this.driver = driver;
    }
    //Get the User name from Home Page
        public String getHomePageDashboardUserName(){
         return    driver.findElement(homePageUserName).getText();
        }
}

Guru99 POM Sederhana di Selenium Uji kasus

package test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import pages.Guru99HomePage;
import pages.Guru99Login;
public class Test99GuruLogin {
    String driverPath = "C:\\geckodriver.exe";    
    WebDriver driver;
    Guru99Login objLogin;
    Guru99HomePage objHomePage;
    @BeforeTest
    public void setup(){
	System.setProperty("webdriver.gecko.driver", driverPath);        
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://demo.guru99.com/V4/");
    }
    /**
     * This test case will login in https://demo.guru99.com/V4/
     * Verify login page title as guru99 bank
     * Login to application
     * Verify the home page using Dashboard message
     */
    @Test(priority=0)
    public void test_Home_Page_Appear_Correct(){
        //Create Login Page object
    objLogin = new Guru99Login(driver);
    //Verify login page title
    String loginPageTitle = objLogin.getLoginTitle();
    Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));
    //login to application
    objLogin.loginToGuru99("mgr123", "mgr!23");
    // go the next page
    objHomePage = new Guru99HomePage(driver);
    //Verify home page
    Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manager id : mgr123"));
    }

Apa yang dimaksud dengan Pabrik Halaman Selenium?

Pabrik Halaman di Selenium adalah konsep kerangka Model Objek Halaman bawaan untuk Selenium WebDriver yang meningkatkan kemudahan pemeliharaan dengan mengurangi pencarian elemen berulang menggunakan anotasi, bukan dengan meningkatkan kecepatan eksekusi. WebDriver ini digunakan untuk inisialisasi objek Page atau untuk membuat instance objek Page itu sendiri. WebDriver ini juga digunakan untuk menginisialisasi elemen kelas Page tanpa menggunakan โ€œFindElement/sโ€.

Di sini juga, kami mengikuti konsep pemisahan Repositori Objek Halaman dan Metode Pengujian. Selain itu, dengan bantuan kelas PageFactory di Selenium, kami menggunakan anotasi @TemukanOleh Untuk menemukan WebElement, kita menggunakan metode initElements untuk menginisialisasi elemen web.

Pabrik Halaman Masuk Selenium

@TemukanOleh bisa menerima tagName, parsialLinkText, nama, linkText, id, css, className, xpath sebagai atribut.

Mari kita lihat contoh yang sama seperti di atas menggunakan Page Factory

Guru99 Halaman login dengan Page Factory

package 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 Guru99Login {
    /**
     * All WebElements are identified by @FindBy annotation
     */
    WebDriver driver;
    @FindBy(name="uid")
    WebElement user99GuruName;
    @FindBy(name="password")
    WebElement password99Guru;    
    @FindBy(className="barone")
    WebElement titleText;
    @FindBy(name="btnLogin")
    WebElement login;
    public Guru99Login(WebDriver driver){
        this.driver = driver;
        //This initElements method will create all WebElements
        PageFactory.initElements(driver, this);
    }
    //Set user name in textbox
    public void setUserName(String strUserName){
        user99GuruName.sendKeys(strUserName);     
    }
    //Set password in password textbox
    public void setPassword(String strPassword){
    password99Guru.sendKeys(strPassword);
    }
    //Click on login button
    public void clickLogin(){
            login.click();

    }  
    //Get the title of Login Page
    public String getLoginTitle(){
     return    titleText.getText();
    }
    /**
     * This POM method will be exposed in test case to login in the application
     * @param strUserName
     * @param strPasword
     * @return
     */
    public void loginToGuru99(String strUserName,String strPasword){
        //Fill user name
        this.setUserName(strUserName);
        //Fill password
        this.setPassword(strPasword);
        //Click Login button
        this.clickLogin();           
    }
}

GuruHalaman Beranda 99 dengan Page Factory

package 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 Guru99HomePage {
    WebDriver driver;
    @FindBy(xpath="//table//tr[@class='heading3']")
    WebElement homePageUserName;    
    public Guru99HomePage(WebDriver driver){
        this.driver = driver;
        //This initElements method will create all WebElements
        PageFactory.initElements(driver, this);
    }   
    //Get the User name from Home Page
        public String getHomePageDashboardUserName(){
         return    homePageUserName.getText();
        }
}

Guru99 Kasus Uji dengan konsep Pabrik Halaman

package test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import PageFactory.Guru99HomePage;
import PageFactory.Guru99Login;
public class Test99GuruLoginWithPageFactory {
    String driverPath = "C:\\geckodriver.exe";    
    WebDriver driver;
    Guru99Login objLogin;
    Guru99HomePage objHomePage; 
    @BeforeTest
    public void setup(){
        System.setProperty("webdriver.gecko.driver", driverPath);       
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://demo.guru99.com/V4/");
    }
    /**
     * This test go to https://demo.guru99.com/V4/
     * Verify login page title as guru99 bank
     * Login to application
     * Verify the home page using Dashboard message
     */
    @Test(priority=0)
    public void test_Home_Page_Appear_Correct(){
        //Create Login Page object
    objLogin = new Guru99Login(driver);
    //Verify login page title
    String loginPageTitle = objLogin.getLoginTitle();
    Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));
    //login to application
    objLogin.loginToGuru99("mgr123", "mgr!23");
    // go the next page
    objHomePage = new Guru99HomePage(driver);
    //Verify home page
    Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manager id : mgr123"));
    }
}

Struktur Proyek Lengkap akan terlihat seperti diagram:

Pabrik Halaman di Selenium

Pabrik AjaxElementLocator

Pabrik AjaxElementLocator adalah konsep pemuatan lambat dari PageFactory di SeleniumPola ini digunakan untuk menemukan elemen web hanya ketika elemen tersebut digunakan dalam operasi apa pun. Ia menetapkan batas waktu untuk WebElements pada kelas objek halaman. Salah satu keuntungan utama menggunakan pola PageFactory adalah... Selenium adalah Kelas AjaxElementLocatorFactory.

Di sini, ketika suatu operasi dilakukan pada suatu elemen, penantian untuk visibilitas elemen tersebut dimulai sejak saat itu. Jika elemen tersebut tidak ditemukan dalam interval waktu yang diberikan, Uji Kasus eksekusi akan memunculkan pengecualian 'NoSuchElementException'.

Pabrik Pencari Lokasi AjaxElement

Sebagai contoh:

AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10);
PageFactory.initElements(factory, this);

Download Selenium File Proyek untuk Demo dalam Tutorial ini

Pertanyaan Umum Demo Slot

Page Object Model adalah pola desain yangtracMemisahkan elemen halaman web ke dalam kelas-kelas terpisah. Ini menyederhanakan otomatisasi dengan memisahkan interaksi UI dari logika pengujian, sehingga meningkatkan kejelasan, skalabilitas, dan mengurangi duplikasi kode.

In SeleniumPOM merepresentasikan setiap halaman web sebagai kelas khusus yang berisi locator dan action. Ini merangkum elemen UI, memungkinkan skrip pengujian tetap independen dari perubahan struktur halaman yang mendasar.

POM bukanlah kerangka kerja mandiri, melainkan sebuah pola desain. POM dapat diintegrasikan ke dalam kerangka kerja otomatisasi apa pun untuk menyusun pengujian secara efisien, memastikan organisasi, penggunaan kembali, dan pemeliharaan yang lebih baik.

POM adalah prinsip desain di mana setiap halaman web dimodelkan sebagai sebuah kelas dengan locator dan metode yang telah ditentukan. Prinsip ini memisahkan logika pengujian dari elemen UI, sehingga meningkatkan keterbacaan, skalabilitas, dan pemeliharaan jangka panjang.

POM mendefinisikan struktur desain untuk abstrak halaman.traction, sementara Page Factory menyediakan anotasi dan metode (@FindBy) untuk menginisialisasi elemen web secara efisien. Page Factory adalah peningkatan implementasi dari POM.

POM memusatkan pencari elemen dan aksi halaman dalam kelas-kelas khusus. Setiap modifikasi UI hanya memerlukan pembaruan di satu tempat, meminimalkan pengerjaan ulang, meningkatkan penggunaan kembali kode, dan mempercepat pemeliharaan pengujian.

Ya. Generator pengujian berbasis AI dapat membuat kelas POM secara otomatis dengan menganalisis hierarki UI, menjaga pemisahan logis antar bagian sambil mempercepat pembuatan pengujian ujung-ke-ujung.

POM mempromosikan komponen pengujian yang modular dan dapat digunakan kembali, memungkinkan integrasi dengan alat pemeliharaan pengujian berbasis AI yang secara otomatis memperbarui locator, mengurangi kerapuhan skrip dan biaya pemeliharaan.

Ringkaslah postingan ini dengan: