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.

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.
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.
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.
๐ Daftar Live Gratis Selenium Project
Keunggulan Badan POM
- Pola Desain Objek Halaman menyatakan operasi dan alur di UI harus dipisahkan dari verifikasi. Konsep ini membuat kode kita lebih bersih dan mudah dipahami.
- 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.
- Code menjadi lebih efisien dan optimal karena menggunakan kembali metode halaman di kelas POM.
- 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.
Contoh Lengkap
Kasus cobaan: Pergi ke GuruSitus Demo 99.
Langkah 1) Pergi ke GuruSitus Demo 99
Langkah 2) Di halaman beranda, periksa teks โGuru"99 Bank" hadir
Langkah 3) Masuk ke aplikasi
Langkah 4) Verifikasi bahwa halaman Beranda berisi teks sebagai โManger Id: demoโ
Dalam contoh ini, kita berurusan dengan dua halaman:
- Login
- 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.
@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 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'.
Sebagai contoh:
AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10); PageFactory.initElements(factory, this);
Download Selenium File Proyek untuk Demo dalam Tutorial ini











