Model Objek Halaman (POM) & Halaman Pabrik di Tutorial Selenium

Daftar Isi:

Anonim

Apa itu Model Objek Halaman?

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

Di bawah 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 tugas yang mereka lakukan, yaitu, jika pemuat menunggu gateway pembayaran muncul, nama metode POM bisa menjadi waitForPaymentScreenDisplay ().

Dalam tutorial ini, Anda akan belajar-

  • Mengapa Model Objek Halaman?
  • Keuntungan dari POM
  • Bagaimana cara menerapkan POM?
  • Apa itu Page Factory?
  • Guru99 TestCase dengan konsep Page Factory
  • AjaxElementLocatorFactory

Mengapa Model Objek Halaman?

Memulai Otomasi UI di Selenium WebDriver BUKAN tugas yang sulit. Anda hanya perlu menemukan elemen, melakukan operasi padanya.

Pertimbangkan skrip sederhana ini untuk masuk ke situs web

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

Ini adalah skrip kecil. Pemeliharaan skrip terlihat mudah. Namun seiring waktu, rangkaian pengujian akan bertambah. Saat Anda menambahkan lebih banyak baris ke kode Anda, segalanya menjadi sulit.

Masalah utama dengan pemeliharaan skrip adalah jika 10 skrip berbeda menggunakan elemen halaman yang sama, dengan perubahan apa pun dalam elemen itu, Anda perlu mengubah semua 10 skrip. 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 dapat digunakan kembali di semua skrip yang menggunakan elemen itu. Kedepannya, jika ada perubahan pada elemen web, kita perlu melakukan perubahan hanya pada 1 file kelas dan bukan 10 skrip yang berbeda.

Pendekatan ini disebut Model Objek Halaman di Selenium. Ini membantu membuat kode lebih mudah dibaca, dipelihara, dan dapat digunakan kembali.

Keuntungan dari POM

  1. Pola Desain Objek Halaman mengatakan operasi dan alur di UI harus dipisahkan dari verifikasi. Konsep ini membuat kode kami lebih bersih dan mudah dipahami.
  2. Manfaat kedua adalah repositori objek tidak bergantung pada kasus uji, sehingga kita dapat menggunakan repositori objek yang sama untuk tujuan yang berbeda dengan alat yang berbeda. Misalnya, kita dapat mengintegrasikan Model Objek Halaman di Selenium dengan TestNG / JUnit untuk Pengujian fungsional dan pada saat yang sama dengan JBehave / Cucumber untuk pengujian penerimaan.
  3. Kode menjadi kurang dan dioptimalkan karena metode halaman yang dapat digunakan kembali di kelas POM.
  4. Metode mendapatkan nama yang lebih realistis yang dapat dengan mudah dipetakan dengan operasi yang terjadi di UI. yaitu jika setelah mengklik tombol kita mendarat di halaman beranda, nama metode akan menjadi seperti 'gotoHomePage ()'.

Bagaimana cara menerapkan POM?

POM sederhana:

Ini adalah struktur dasar kerangka model objek Halaman di mana semua Elemen Web dari AUT dan metode yang beroperasi pada Elemen Web ini dipertahankan di dalam file kelas. Tugas seperti verifikasi harus dipisahkan sebagai bagian dari metode Uji.

Contoh Lengkap

TestCase: Kunjungi Situs Demo Guru99.

Langkah 1) Buka Situs Demo Guru99
Langkah 2) Dalam halaman rumah cek teks "Guru99 Bank" hadir
Langkah 3) Masuk ke dalam aplikasi
Langkah 4) Pastikan halaman Beranda berisi teks sebagai "Manger Id: demo"

Di sini kita berurusan dengan 2 halaman

  1. Halaman masuk
  2. Halaman Beranda (ditampilkan setelah Anda masuk)

Karenanya, kami membuat 2 POM di kelas Selenium

Halaman Login Guru99 POM

halaman paket;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;kelas publik Guru99Login {Driver WebDriver;Oleh user99GuruName = By.name ("uid");By password99Guru = By.name ("password");Dengan titleText = By.className ("barone");Dengan login = By.name ("btnLogin");public Guru99Login (driver WebDriver) {this.driver = driver;}// Tetapkan nama pengguna di kotak tekspublic void setUserName (String strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Atur kata sandi di kotak teks kata sandipublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Klik tombol loginpublic void clickLogin () {driver.findElement (login) .click ();}// Dapatkan judul Halaman Loginpublic String getLoginTitle () {return driver.findElement (titleText) .getText ();}/ *** Metode POM ini akan diekspos dalam kasus uji untuk login dalam aplikasi* @param strUserName* @param strPasword* @ kembali* /public void loginToGuru99 (String strUserName, String strPasword) {// Isi nama penggunathis.setUserName (strUserName);// Isi kata sandithis.setPassword (strPasword);// Klik tombol Loginthis.clickLogin ();}}

Halaman Utama Guru99 POM di Selenium

halaman paket;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;public class Guru99HomePage {Driver WebDriver;By homePageUserName = By.xpath ("// table // tr [@ class = 'heading3']");public Guru99HomePage (driver WebDriver) {this.driver = driver;}// Dapatkan nama Pengguna dari Halaman Berandapublic String getHomePageDashboardUserName () {return driver.findElement (homePageUserName) .getText ();}}

Guru99 Simple POM dalam kasus Uji Selenium

uji paket;import java.util.concurrent.TimeUnit;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;halaman impor.Guru99HomePage;halaman impor.Guru99Login;public class Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";Driver WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@Sebelumnyapenyiapan public void () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Test case ini akan login di http://demo.guru99.com/V4/* Verifikasi judul halaman login sebagai bank guru99* Masuk ke aplikasi* Verifikasi beranda menggunakan pesan Dasbor* /@Test (prioritas = 0)public void test_Home_Page_Appear_Correct () {// Buat objek Halaman LoginobjLogin = Guru99Login baru (driver);// Verifikasi judul halaman loginString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Berisi ("guru99 bank"));// masuk ke aplikasiobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// buka halaman berikutnyaobjHomePage = Guru99HomePage baru (driver);// Verifikasi berandaAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Contains ("palungan id: mgr123"));}

Apa itu Page Factory di Selenium?

Page Factory di Selenium adalah konsep kerangka kerja Page Object Model untuk Selenium WebDriver tetapi sangat dioptimalkan. Ini digunakan untuk inisialisasi objek Halaman atau untuk membuat instance objek Halaman itu sendiri. Ini juga digunakan untuk menginisialisasi elemen kelas Halaman 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 @FindBy untuk menemukan WebElement. Kami menggunakan metode initElements untuk menginisialisasi elemen web

@FindBy dapat menerima tagName, partialLinkText, name, linkText, id, css, className, xpath sebagai atribut.

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

Halaman Login Guru99 dengan Page Factory

paket PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.support.FindBy;impor org.openqa.selenium.support.PageFactory;kelas publik Guru99Login {/ *** Semua WebElements diidentifikasi oleh anotasi @FindBy* /Driver WebDriver;@FindBy (nama = "uid")WebElement user99GuruName;@FindBy (name = "password")WebElement password99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (name = "btnLogin")Login WebElement;public Guru99Login (driver WebDriver) {this.driver = driver;// Metode initElements ini akan membuat semua WebElementsPageFactory.initElements (driver, this);}// Tetapkan nama pengguna di kotak tekspublic void setUserName (String strUserName) {user99GuruName.sendKeys (strUserName);}// Atur kata sandi di kotak teks kata sandipublic void setPassword (String strPassword) {password99Guru.sendKeys (strPassword);}// Klik tombol loginpublic void clickLogin () {login.click ();}// Dapatkan judul Halaman Loginpublic String getLoginTitle () {return titleText.getText ();}/ *** Metode POM ini akan diekspos dalam kasus uji untuk login dalam aplikasi* @param strUserName* @param strPasword* @ kembali* /public void loginToGuru99 (String strUserName, String strPasword) {// Isi nama penggunathis.setUserName (strUserName);// Isi kata sandithis.setPassword (strPasword);// Klik tombol Loginthis.clickLogin ();}}

Halaman Rumah Guru99 dengan Pabrik Halaman

paket PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.support.FindBy;impor org.openqa.selenium.support.PageFactory;public class Guru99HomePage {Driver WebDriver;@FindBy (xpath = "// table // tr [@ class = 'heading3']")WebElement homePageUserName;public Guru99HomePage (driver WebDriver) {this.driver = driver;// Metode initElements ini akan membuat semua WebElementsPageFactory.initElements (driver, this);}// Dapatkan nama Pengguna dari Halaman Berandapublic String getHomePageDashboardUserName () {return homePageUserName.getText ();}}

Guru99 TestCase dengan konsep Page Factory

uji paket;import java.util.concurrent.TimeUnit;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;impor PageFactory.Guru99HomePage;impor PageFactory.Guru99Login;public class Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";Driver WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@Sebelumnyapenyiapan public void () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Tes ini masuk ke http://demo.guru99.com/V4/* Verifikasi judul halaman login sebagai bank guru99* Masuk ke aplikasi* Verifikasi beranda menggunakan pesan Dasbor* /@Test (prioritas = 0)public void test_Home_Page_Appear_Correct () {// Buat objek Halaman LoginobjLogin = Guru99Login baru (driver);// Verifikasi judul halaman loginString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Berisi ("guru99 bank"));// masuk ke aplikasiobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// buka halaman berikutnyaobjHomePage = Guru99HomePage baru (driver);// Verifikasi berandaAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Contains ("palungan id: mgr123"));}}

Struktur Proyek Lengkap akan terlihat seperti diagram:

AjaxElementLocatorFactory

AjaxElementLocatorFactory adalah konsep pemuatan lambat dari PageFactory di Selenium. Ini digunakan untuk menemukan elemen web hanya ketika elemen digunakan dalam operasi apa pun. Ini menetapkan batas waktu untuk WebElements ke kelas halaman objek. Salah satu keuntungan utama menggunakan pola PageFactory di Selenium adalah AjaxElementLocatorFactory Class.

Di sini, ketika sebuah operasi dilakukan pada sebuah elemen, penantian visibilitasnya dimulai dari saat itu saja. Jika elemen tidak ditemukan dalam interval waktu tertentu, eksekusi Test Case akan menampilkan pengecualian 'NoSuchElementException'.

Ringkasan

  1. Model Objek Halaman di Selenium Websdriver adalah pola desain Object Repository.
  2. Model objek halaman selenium membuat kode pengujian kami dapat dipertahankan, dapat digunakan kembali.
  3. Page Factory adalah cara yang dioptimalkan untuk membuat repositori objek dalam konsep kerangka kerja Model Objek Halaman.
  4. AjaxElementLocatorFactory adalah konsep pemuatan lambat dalam pola desain objek Halaman Pabrik untuk mengidentifikasi WebElements hanya ketika digunakan dalam operasi apa pun.

Unduh File Proyek Selenium untuk Demo dalam Tutorial ini