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

Isi kandungan:

Anonim

Apa itu Model Objek Halaman?

Page Object Model (POM) adalah corak reka bentuk, yang popular digunakan dalam automasi ujian yang membuat Object Repository untuk elemen UI web. Kelebihan model ini ialah mengurangkan penduaan kod dan meningkatkan penyelenggaraan ujian.

Di bawah model ini, untuk setiap halaman web dalam aplikasi, harus ada Class Page yang sesuai. Kelas Halaman ini akan mengenal pasti WebElements dari laman web tersebut dan juga mengandungi kaedah Page yang melakukan operasi pada WebElements tersebut. Nama metode ini harus diberikan sesuai dengan tugas yang mereka jalankan, yaitu, jika loader menunggu gateway pembayaran muncul, nama metode POM dapat waitForPaymentScreenDisplay ().

Dalam tutorial ini, anda akan belajar-

  • Mengapa Model Objek Halaman?
  • Kelebihan POM
  • Bagaimana melaksanakan POM?
  • Apakah Kilang Halaman?
  • Guru99 TestCase dengan konsep Page Factory
  • AjaxElementLocatorFactory

Mengapa Model Objek Halaman?

Memulakan Automasi UI di Selenium WebDriver BUKAN tugas yang sukar. Anda hanya perlu mencari elemen, melakukan operasi di atasnya.

Pertimbangkan skrip mudah ini untuk masuk ke laman web

Seperti yang anda perhatikan, semua yang kita lakukan adalah mencari elemen dan mengisi nilai untuk elemen tersebut.

Ini adalah skrip kecil. Penyelenggaraan skrip kelihatan mudah. Tetapi dengan ujian masa akan bertambah. Semasa anda menambahkan semakin banyak baris pada kod anda, keadaan menjadi sukar.

Masalah utama dengan penyelenggaraan skrip adalah jika 10 skrip yang berbeza menggunakan elemen halaman yang sama, dengan perubahan elemen tersebut, anda perlu mengubah semua 10 skrip. Ini memakan masa dan ralat.

Pendekatan yang lebih baik untuk penyelenggaraan skrip adalah dengan membuat fail kelas yang berasingan yang akan mencari elemen web, mengisinya atau mengesahkannya. Kelas ini boleh digunakan semula dalam semua skrip menggunakan elemen tersebut. Di masa depan, jika ada perubahan pada elemen web, kita perlu membuat perubahan hanya dalam 1 kelas kelas dan bukan 10 skrip yang berbeza.

Pendekatan ini disebut Model Objek Halaman di Selenium. Ini membantu menjadikan kod lebih mudah dibaca, dikekalkan, dan dapat digunakan semula.

Kelebihan POM

  1. Corak Reka Bentuk Objek Halaman mengatakan operasi dan aliran di UI harus dipisahkan dari pengesahan. Konsep ini menjadikan kod kami lebih bersih dan mudah difahami.
  2. Manfaat kedua adalah repositori objek tidak bergantung pada kes ujian, jadi kita dapat menggunakan repositori objek yang sama untuk tujuan yang berbeza dengan alat yang berbeza. Sebagai contoh, kita dapat mengintegrasikan Model Objek Halaman di Selenium dengan TestNG / JUnit untuk Pengujian berfungsi dan pada masa yang sama dengan JBehave / Timun untuk ujian penerimaan.
  3. Kod menjadi kurang dan dioptimumkan kerana kaedah halaman yang boleh digunakan semula di kelas POM.
  4. Kaedah mendapatkan nama yang lebih realistik yang dapat dipetakan dengan mudah dengan operasi yang berlaku di UI. iaitu jika setelah mengklik butang yang kita sampai di halaman rumah, nama kaedahnya akan seperti 'gotoHomePage ()'.

Bagaimana melaksanakan POM?

POM ringkas:

Ini adalah struktur asas kerangka model objek Halaman di mana semua Elemen Web AUT dan kaedah yang beroperasi pada Elemen Web ini dikekalkan di dalam fail kelas. Tugas seperti pengesahan harus terpisah sebagai sebahagian daripada kaedah Uji.

Contoh Lengkap

Uji Kes: Pergi ke Laman Demo Guru99.

Langkah 1) Pergi ke Laman Demo Guru99
Langkah 2) Dalam halaman rumah menyemak teks "Guru99 Bank" hadir
Langkah 3) Log masuk ke dalam aplikasi
Langkah 4) Sahkan bahawa Halaman Utama mengandungi teks sebagai "Id Manger: demo"

Inilah kami yang berurusan dengan 2 halaman

  1. Halaman Log Masuk
  2. Halaman Utama (ditunjukkan setelah anda log masuk)

Oleh itu, kami membuat 2 POM di kelas Selenium

Halaman99 Guru Login halaman POM

halaman pakej;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;Guru99Login kelas awam {Pemacu WebDriver;Oleh pengguna99GuruName = By.name ("uid");Dengan kata laluan99Guru = By.name ("kata laluan");Dengan tajukText = By.className ("barone");Dengan log masuk = By.name ("btnLogin");Guru99Login awam (pemacu WebDriver) {this.driver = pemacu;}// Tetapkan nama pengguna di kotak tekspublic void setUserName (String strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Tetapkan kata laluan dalam kotak teks kata laluanpublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Klik pada butang log masukklik kosong log masuk awam () {driver.findElement (log masuk). klik ();}// Dapatkan tajuk Halaman Log Masukpublic String getLoginTitle () {pemulangan pemacu.findElement (titleText) .getText ();}/ *** Kaedah POM ini akan didedahkan dalam kes ujian untuk masuk dalam aplikasi* @param strUserName* @param strPasword* @kembali* /log masuk awam kosongToGuru99 (String strUserName, String strPasword) {// Isi nama penggunaini.setUserName (strUserName);// Isi kata laluanini.setPassword (strPasword);// Klik butang Masukini.clickLogin ();}}

Laman Utama Guru99 POM di Selenium

halaman pakej;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;kelas awam Guru99HomePage {Pemacu WebDriver;Oleh homePageUserName = By.xpath ("// table // tr [@ class = 'heading3']");Guru99HomePage awam (pemacu WebDriver) {this.driver = pemacu;}// Dapatkan nama Pengguna dari Halaman Utamapublic String getHomePageDashboardUserName () {return driver.findElement (homePageUserName) .getText ();}}

Guru99 POM Ringkas dalam kes Ujian Selenium

ujian pakej;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;halaman import.Guru99HomePage;halaman import.Guru99Login;kelas awam Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";Pemacu WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpersediaan kosong awam () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = FirefoxDriver baru ();driver.manage (). timeout (). secara implisitWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Kes ujian ini akan log masuk di http://demo.guru99.com/V4/* Sahkan tajuk halaman log masuk sebagai bank guru99* Log masuk ke aplikasi* Sahkan halaman utama menggunakan mesej Dashboard* /@Test (keutamaan = 0)ujian kekosongan awam_Home_Page_Appear_Correct () {// Buat objek Halaman Log MasukobjLogin = Guru99Login baru (pemandu);// Sahkan tajuk halaman log masukString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Mengandungi ("guru99 bank"));// log masuk ke aplikasiobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// pergi ke halaman seterusnyaobjHomePage = Guru99HomePage baru (pemandu);// Sahkan halaman utamaAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Mengandungi ("id manger: mgr123"));}

Apakah Kilang Halaman di Selenium?

Page Factory di Selenium adalah konsep kerangka Model Objek Objek Halaman terbina dalam untuk Selenium WebDriver tetapi sangat dioptimumkan. Ini digunakan untuk inisialisasi objek Halaman atau untuk membuat instansi objek Halaman itu sendiri. Ini juga digunakan untuk menginisialisasi elemen kelas Halaman tanpa menggunakan "FindElement / s."

Di sini juga, kami mengikuti konsep pemisahan Halaman Objek Objek dan Kaedah Uji. Selain itu, dengan bantuan PageFactory kelas di Selenium, kami menggunakan anotasi @FindBy untuk mencari WebElement. Kami menggunakan kaedah initElements untuk memulakan elemen web

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

Mari lihat contoh yang sama seperti di atas menggunakan Page Factory

Halaman Login Guru99 dengan Kilang Halaman

pakej PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;Guru99Login kelas awam {/ *** Semua WebElements dikenal pasti oleh anotasi @FindBy* /Pemacu WebDriver;@FindBy (nama = "uid")Pengguna WebElement99GuruName;@FindBy (nama = "kata laluan")Kata laluanElemen Web99Guru;@FindBy (className = "barone")TajukTeks WebElement;@FindBy (nama = "btnLogin")Log masuk WebElement;Guru99Login awam (pemacu WebDriver) {this.driver = pemacu;// Kaedah initElements ini akan membuat semua WebElementsPageFactory.initElements (pemacu, ini);}// Tetapkan nama pengguna di kotak tekspublic void setUserName (String strUserName) {user99GuruName.sendKeys (strUserName);}// Tetapkan kata laluan dalam kotak teks kata laluanpublic void setPassword (String strPassword) {kata laluan99Guru.sendKeys (strPassword);}// Klik pada butang log masukklik kosong log masuk awam () {log masuk.klik ();}// Dapatkan tajuk Halaman Log Masukpublic String getLoginTitle () {kembali tajukText.getText ();}/ *** Kaedah POM ini akan didedahkan dalam kes ujian untuk masuk dalam aplikasi* @param strUserName* @param strPasword* @kembali* /log masuk awam kosongToGuru99 (String strUserName, String strPasword) {// Isi nama penggunaini.setUserName (strUserName);// Isi kata laluanini.setPassword (strPasword);// Klik butang Masukini.clickLogin ();}}

Laman Utama Guru99 dengan Kilang Halaman

pakej PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;kelas awam Guru99HomePage {Pemacu WebDriver;@FindBy (xpath = "// jadual // tr [@ class = 'heading3']")Laman WebElementPageUserName;Guru99HomePage awam (pemacu WebDriver) {this.driver = pemacu;// Kaedah initElements ini akan membuat semua WebElementsPageFactory.initElements (pemacu, ini);}// Dapatkan nama Pengguna dari Halaman Utamapublic String getHomePageDashboardUserName () {pulang ke rumahPageUserName.getText ();}}

Guru99 TestCase dengan konsep Page Factory

ujian pakej;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;kelas awam Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";Pemacu WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpersediaan kosong awam () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = FirefoxDriver baru ();driver.manage (). timeout (). secara implisitWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Ujian ini pergi ke http://demo.guru99.com/V4/* Sahkan tajuk halaman log masuk sebagai bank guru99* Log masuk ke aplikasi* Sahkan halaman utama menggunakan mesej Dashboard* /@Test (keutamaan = 0)ujian kekosongan awam_Home_Page_Appear_Correct () {// Buat objek Halaman Log MasukobjLogin = Guru99Login baru (pemandu);// Sahkan tajuk halaman log masukString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Mengandungi ("guru99 bank"));// log masuk ke aplikasiobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// pergi ke halaman seterusnyaobjHomePage = Guru99HomePage baru (pemandu);// Sahkan halaman utamaAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Mengandungi ("id manger: mgr123"));}}

Struktur Projek yang lengkap akan kelihatan seperti rajah:

AjaxElementLocatorFactory

AjaxElementLocatorFactory adalah konsep pemalas PageFactory di Selenium. Ia digunakan untuk mencari elemen web hanya apabila elemen tersebut digunakan dalam operasi apa pun. Ini memberikan waktu tunggu untuk WebElements ke kelas halaman objek. Salah satu kelebihan utama menggunakan corak PageFactory di Selenium ialah AjaxElementLocatorFactory Class.

Di sini, apabila operasi dilakukan pada elemen, penantian untuk penglihatannya bermula dari saat itu sahaja. Sekiranya elemen tidak dijumpai dalam selang waktu yang ditentukan, pelaksanaan Case Case akan membuang pengecualian 'NoSuchElementException'.

Ringkasan

  1. Model Objek Halaman di Selenium Websdriver adalah corak reka bentuk Objek Repository.
  2. Model objek halaman Selenium membuat kod ujian kami dapat dikendalikan, dapat digunakan kembali.
  3. Page Factory adalah kaedah yang dioptimumkan untuk membuat repositori objek dalam konsep kerangka Model Objek Objek Halaman.
  4. AjaxElementLocatorFactory adalah konsep pemalas malas dalam Page Factory - corak reka bentuk objek halaman untuk mengenal pasti WebElements hanya apabila ia digunakan dalam operasi apa pun.

Muat turun Selenium Project Files untuk Demo dalam Tutorial ini