Selenium Kerangka: Data, Kata Kunci & Berbasis Hibrid
Apa itu Selenium Kerangka?
The Selenium Kerangka otomatisasi adalah struktur kode yang membuat pemeliharaan kode menjadi mudah dan efisien. Tanpa kerangka kerja, pengguna dapat menempatkan “kode” dan “data” di lokasi yang sama sehingga tidak dapat digunakan kembali atau dibaca. Kerangka kerja menghasilkan hasil yang bermanfaat seperti peningkatan penggunaan kembali kode, portabilitas yang lebih tinggi, pengurangan biaya pemeliharaan skrip, keterbacaan kode yang lebih baik, dll.
Jenis dari Selenium Kerangka
Terutama ada tiga jenis kerangka kerja diciptakan oleh Selenium WebDriver untuk mengotomatiskan kasus uji manual
- Kerangka Berbasis Data
- Kerangka Berbasis Kata Kunci
- Kerangka Kerja Berbasis Hibrid
Kerangka Kerja Berbasis Data di Selenium
Kerangka Kerja Berbasis Data di Selenium adalah metode memisahkan kumpulan data dari kasus uji. Setelah kumpulan data dipisahkan dari kasus uji, kumpulan data tersebut dapat dengan mudah dimodifikasi untuk fungsi tertentu tanpa mengubah kode. Ini digunakan untuk mengambil kasus uji dan rangkaian dari file eksternal seperti Excel, .csv, .xml atau beberapa tabel database.
Untuk membaca atau menulis Excel, Apache menyediakan POI perpustakaan yang sangat terkenal. Perpustakaan ini cukup mampu untuk membaca dan menulis keduanya xls dan XLSX format file Excel.
Untuk membaca xls file, sebuah HSSF implementasi disediakan oleh perpustakaan POI.
Untuk membaca XLSX, XSSF implementasi dari POI perpustakaan akan menjadi pilihan. Mari kita pelajari implementasi ini secara detail.
Kami telah mempelajari tentang Pengujian Berbasis Data di kami tutorial sebelumnya
Kerangka Berbasis Kata Kunci di Selenium
Kerangka Berbasis Kata Kunci di Selenium adalah metode yang digunakan untuk mempercepat pengujian otomatis dengan memisahkan kata kunci untuk serangkaian fungsi dan instruksi umum. Semua operasi dan instruksi yang harus dilakukan ditulis dalam beberapa file eksternal seperti lembar Excel. Pengguna dapat dengan mudah mengontrol dan menentukan fungsionalitas yang ingin mereka uji.
Berikut adalah tampilan kerangka lengkapnya
Seperti yang Anda lihat, ini adalah kerangka kerja 5 langkah. Mari kita pelajari secara rinci langkah demi langkah
Langkah 1)
- Skrip driver Execute.java akan memanggil ReadGuru99ExcelFile.java
- ReadGuru99ExcelFile.java memiliki skrip POI untuk membaca data dari Excel
Langkah 2)
- ReadGuru99ExcelFile.java akan membaca data dari TestCase.xlsx
- Beginilah tampilan lembarnya-
- Menurut kata kunci yang ditulis dalam file Excel, framework akan melakukan operasi di UI.
- Misalnya, kita perlu mengklik tombol 'Login'. Sejalan dengan itu, Excel kita akan memiliki kata kunci 'Klik'. Sekarang AUT dapat memiliki ratusan tombol dalam satu halaman, untuk mengidentifikasi tombol Login, di Excel kita akan memasukkan Nama Objek sebagai loginButton & tipe objek sebagai nama (lihat baris yang disorot pada gambar di atas). Tipe Objek dapat berupa Xpath, nama CSS, atau nilai lainnya
Langkah 3) ReadGuru99ExcelFile.java akan meneruskan data ini ke skrip driver Execute.java
Langkah 4)
- Untuk semua elemen web UI, kita perlu membuat repositori objek tempat kita akan menempatkan pencari elemennya (seperti Xpath, nama, jalur CSS, nama kelas, dll.)
- Execute.java (skrip driver kami) akan membaca seluruh Object Repository dan menyimpannya dalam sebuah variabel
- Untuk membaca repositori objek ini, kita memerlukan kelas ReadObject yang memiliki metode getObjectRepository untuk membacanya.
CATATAN: Anda mungkin berpikir mengapa kita perlu membuat repositori objek. Jawabannya membantu dalam pemeliharaan kode. Misalnya, kami menggunakan tombol dengan nama = btnlogin dalam 10 kasus pengujian yang berbeda. Di masa depan, pengembang memutuskan untuk mengubah nama dari btnlogin menjadi submit. Anda harus membuat perubahan pada 10 kasus uji. Dalam kasus repositori objek, Anda hanya akan melakukan perubahan sekali saja di repositori.
Langkah 5)
- Pengemudi akan meneruskan data dari Excel & Object Repository ke UIOperakelas tion
- UIOperaKelas tion memiliki fungsi untuk melakukan tindakan yang sesuai dengan kata kunci seperti CLICK, SETTEXT dll… yang disebutkan di excel
- UIOperakelas tion adalah a Java kelas yang memiliki implementasi kode sebenarnya untuk melakukan operasi pada elemen web
Proyek lengkapnya akan terlihat seperti-
Mari kita lihat sebuah contoh:
Skenario Uji: Kami sedang menjalankan 2 kasus uji
- Kasus Uji 1:
- Pergi ke
https://demo.guru99.com/V4/
- Masukkan ID Pengguna
- Masukkan kata kunci
- Klik Setel Ulang
- Kasus Uji 2:
- Pergi ke
https://demo.guru99.com/V4/
- Masukkan ID Pengguna
- Masukkan kata kunci
- Klik Login
objek.properti
url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset
BacaGuru99ExcelFile.java
package excelExportAndFileIO; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadGuru99ExcelFile { public Sheet readExcel(String filePath,String fileName,String sheetName) throws IOException{ //Create a object of File class to open xlsx file File file = new File(filePath+"\\"+fileName); //Create an object of FileInputStream class to read excel file FileInputStream inputStream = new FileInputStream(file); Workbook guru99Workbook = null; //Find the file extension by spliting file name in substing and getting only extension name String fileExtensionName = fileName.substring(fileName.indexOf(".")); //Check condition if the file is xlsx file if(fileExtensionName.equals(".xlsx")){ //If it is xlsx file then create object of XSSFWorkbook class guru99Workbook = new XSSFWorkbook(inputStream); } //Check condition if the file is xls file else if(fileExtensionName.equals(".xls")){ //If it is xls file then create object of XSSFWorkbook class guru99Workbook = new HSSFWorkbook(inputStream); } //Read sheet inside the workbook by its name Sheet guru99Sheet = guru99Workbook.getSheet(sheetName); return guru99Sheet; } }
ReadObject.java
package operation; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReadObject { Properties p = new Properties(); public Properties getObjectRepository() throws IOException{ //Read object repository file InputStream stream = new FileInputStream(new File(System.getProperty("user.dir")+"\\src\\objects\\object.properties")); //load all objects p.load(stream); return p; } }
UIOperation.java
package operation; import java.util.Properties; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class UIOperation { WebDriver driver; public UIOperation(WebDriver driver){ this.driver = driver; } public void perform(Properties p,String operation,String objectName,String objectType,String value) throws Exception{ System.out.println(""); switch (operation.toUpperCase()) { case "CLICK": //Perform click driver.findElement(this.getObject(p,objectName,objectType)).click(); break; case "SETTEXT": //Set text on control driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value); break; case "GOTOURL": //Get url of application driver.get(p.getProperty(value)); break; case "GETTEXT": //Get text of an element driver.findElement(this.getObject(p,objectName,objectType)).getText(); break; default: break; } } /** * Find element BY using object type and value * @param p * @param objectName * @param objectType * @return * @throws Exception */ private By getObject(Properties p,String objectName,String objectType) throws Exception{ //Find by xpath if(objectType.equalsIgnoreCase("XPATH")){ return By.xpath(p.getProperty(objectName)); } //find by class else if(objectType.equalsIgnoreCase("CLASSNAME")){ return By.className(p.getProperty(objectName)); } //find by name else if(objectType.equalsIgnoreCase("NAME")){ return By.name(p.getProperty(objectName)); } //Find by css else if(objectType.equalsIgnoreCase("CSS")){ return By.cssSelector(p.getProperty(objectName)); } //find by link else if(objectType.equalsIgnoreCase("LINK")){ return By.linkText(p.getProperty(objectName)); } //find by partial link else if(objectType.equalsIgnoreCase("PARTIALLINK")){ return By.partialLinkText(p.getProperty(objectName)); }else { throw new Exception("Wrong object type"); } } }
Jalankan Tes.java
package testCases; import java.util.Properties; import operation.ReadObject; import operation.UIOperation; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; import excelExportAndFileIO.ReadGuru99ExcelFile; public class ExecuteTest { @Test public void testLogin() throws Exception { // TODO Auto-generated method stub WebDriver webdriver = new FirefoxDriver(); ReadGuru99ExcelFile file = new ReadGuru99ExcelFile(); ReadObject object = new ReadObject(); Properties allObjects = object.getObjectRepository(); UIOperation operation = new UIOperation(webdriver); //Read keyword sheet Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework"); //Find number of rows in excel file int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum(); //Create a loop over all the rows of excel file to read it for (int i = 1; i < rowCount+1; i++) { //Loop over all the rows Row row = guru99Sheet.getRow(i); //Check if the first cell contain a value, if yes, That means it is the new testcase name if(row.getCell(0).toString().length()==0){ //Print testcase detail on console System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+ row.getCell(3).toString()+"----"+ row.getCell(4).toString()); //Call perform function to perform operation on UI operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(), row.getCell(3).toString(), row.getCell(4).toString()); } else{ //Print the new testcase name when it started System.out.println("New Testcase->"+row.getCell(0).toString() +" Started"); } } } }
Setelah eksekusi, output akan terlihat seperti –
Download Selenium File Proyek untuk Demo dalam Tutorial ini
Kerangka Kerja Berbasis Hibrid
Kerangka Kerja Berbasis Hibrid in Selenium adalah sebuah konsep di mana kami menggunakan keunggulan kerangka kerja berbasis Kata Kunci dan kerangka kerja berbasis Data. Ini adalah kerangka kerja yang mudah digunakan yang memungkinkan penguji manual membuat kasus uji hanya dengan melihat kata kunci, data uji, dan repositori objek tanpa mengkode dalam kerangka tersebut.
Di sini untuk kata kunci, kita akan menggunakan file Excel untuk memelihara kasus pengujian, dan untuk data pengujian, kita dapat menggunakan data, penyedia Pengujian kerangka.
Di sini, di kerangka hybrid kami, kami tidak perlu mengubah apa pun dalam kerangka berbasis Kata Kunci, di sini kami hanya perlu mengganti file ExecuteTest.java dengan file HybridExecuteTest.java.
File HybridExecuteTest ini memiliki semua kode untuk kata kunci yang didorong dengan konsep penyedia data.
Representasi gambar lengkap dari kerangka hybrid akan terlihat seperti ini
HybridExecuteTest.java
package testCases; import java.io.IOException; import java.util.Properties; import operation.ReadObject; import operation.UIOperation; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import excelExportAndFileIO.ReadGuru99ExcelFile; public class HybridExecuteTest { WebDriver webdriver = null; @Test(dataProvider="hybridData") public void testLogin(String testcaseName,String keyword,String objectName,String objectType,String value) throws Exception { // TODO Auto-generated method stub if(testcaseName!=null&&testcaseName.length()!=0){ webdriver=new FirefoxDriver(); } ReadObject object = new ReadObject(); Properties allObjects = object.getObjectRepository(); UIOperation operation = new UIOperation(webdriver); //Call perform function to perform operation on UI operation.perform(allObjects, keyword, objectName, objectType, value); } @DataProvider(name="hybridData") public Object[][] getDataFromDataprovider() throws IOException{ Object[][] object = null; ReadGuru99ExcelFile file = new ReadGuru99ExcelFile(); //Read keyword sheet Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework"); //Find number of rows in excel file int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum(); object = new Object[rowCount][5]; for (int i = 0; i < rowCount; i++) { //Loop over all the rows Row row = guru99Sheet.getRow(i+1); //Create a loop to print cell values in a row for (int j = 0; j < row.getLastCellNum(); j++) { //Print excel data in console object[i][j] = row.getCell(j).toString(); } } System.out.println(""); return object; } }
Ringkasan
- Kita dapat membuat tiga jenis kerangka pengujian menggunakan Selenium Pengemudi Web.
- A Selenium kerangka otomatisasi yang dapat diklasifikasikan menjadi Kerangka Kerja Berbasis Data, Berbasis Kata Kunci, dan Kerangka Hibrid.
- Kita dapat mencapai kerangka kerja berbasis data dengan menggunakan TestNGpenyedia data.
- Dalam kerangka berbasis kata kunci, kata kunci ditulis dalam beberapa file eksternal seperti file excel dan kode java akan memanggil file ini dan menjalankan kasus uji.
- Kerangka kerja hybrid adalah perpaduan kerangka kerja berbasis kata kunci dan berbasis data.
Download Selenium File Proyek untuk Demo dalam Tutorial ini