Selenium Kerangka: Data, Kata Kunci & Berbasis Hibrid
โก Ringkasan Cerdas
Selenium Kerangka kerja: Pendekatan Data, Kata Kunci, dan Hibrida mendefinisikan bagaimana penguji mengatur kode otomatisasi, memisahkan data pengujian, dan menggunakan kembali logika. Artikel ini menjelaskan setiap jenis kerangka kerja, arsitekturnya, keunggulannya, dan cara mengimplementasikannya langkah demi langkah dengan contoh praktis. Selenium Contoh kode WebDriver.

Apa itu Selenium Kerangka?
The Selenium Kerangka otomatisasi Framework adalah arsitektur kode terstruktur yang membuat pemeliharaan pengujian menjadi sederhana, terukur, dan efisien. Tanpa framework, penguji sering menempatkan kode dan data di lokasi yang sama, yang tidak dapat digunakan kembali dan tidak mudah dibaca. Mengadopsi framework memberikan manfaat yang terukur seperti penggunaan kembali kode yang lebih tinggi, portabilitas yang lebih baik, pengurangan biaya pemeliharaan skrip, peningkatan keterbacaan, dan pemisahan tanggung jawab yang lebih jelas antara logika pengujian dan data input.
Mengapa Menggunakan a Selenium Kerangka Kerja Otomatisasi?
A dirancang dengan baik Selenium Framework ini memecahkan tiga masalah yang terus-menerus muncul dalam otomatisasi pengujian: duplikasi kode, locator yang rapuh, dan data pengujian yang sulit dikelola. Dengan menerapkan struktur yang jelas, tim dapat meningkatkan skala rangkaian pengujian mereka dari beberapa skrip hingga ratusan tanpa kehilangan kendali.
- Pemeliharaan: Locator dan metode pembantu yang terpusat berarti satu perubahan saja akan memperbarui setiap pengujian yang menggunakan elemen tersebut.
- Dapat digunakan kembali: Operasi umum seperti login, navigasi, atau pengisian formulir ditulis sekali dan dijalankan di banyak kasus uji.
- Skalabilitas: Menambahkan kasus uji baru menjadi pembaruan data alih-alih tugas pengkodean, yang memungkinkan non-pengembang untuk berkontribusi dalam pembuatan skenario.
- Pelaporan dan Kolaborasi: Struktur yang terstandarisasi memudahkan integrasi dengan alat pelaporan, pipeline CI/CD, dan kontrol versi.
Jenis dari Selenium Kerangka
Ada tiga yang utama jenis kerangka kerja dibangun di atas Selenium WebDriver untuk mengotomatisasi kasus uji manual. Setiap gaya menargetkan keseimbangan yang berbeda antara upaya pengembang, keterlibatan penguji, dan fleksibilitas data.
- Kerangka Berbasis Data
- Kerangka Berbasis Kata Kunci
- Kerangka Kerja Berbasis Hibrid
Bagian selanjutnya akan menjelaskan setiap kerangka kerja secara detail, dimulai dari pendekatan berbasis data yang paling sederhana dan berlanjut ke model hibrida yang paling fleksibel.
Kerangka Kerja Berbasis Data di Selenium
Kerangka Kerja Berbasis Data di Selenium adalah metode untuk memisahkan kumpulan data uji dari logika kasus uji. Setelah data dipisahkan, Anda dapat memodifikasi input untuk fungsi tertentu tanpa menyentuh kode pengujian. Metode ini umumnya digunakan untuk mengambil kasus uji dan rangkaian uji dari sumber eksternal seperti Excel, .csv, .xml, atau tabel basis data.
Untuk membaca atau menulis file Excel, Apache menyediakan pustaka POI yang terkenal. Pustaka ini dapat menangani keduanya. xls ke XLSX format. Itu HSSF implementasi membaca file XLS lama, sementara XSSF Implementasi ini menangani file XLSX modern.
Kami sudah membahas Pengujian Berbasis Data di artikel kami sebelumnya. tutorial sebelumnya.
Kerangka Berbasis Kata Kunci di Selenium
Kerangka Berbasis Kata Kunci di Selenium adalah metode yang mempercepat otomatisasi dengan memisahkan kata kunci untuk fungsi dan instruksi umum. Semua operasi dan instruksi ditulis dalam file eksternal, biasanya lembar Excel. Penguji dapat menentukan fungsionalitas yang ingin mereka validasi tanpa memodifikasi Java kode, yang menjadikan gaya ini ideal untuk tim di mana analis bisnis atau QA manual berkontribusi dalam mendefinisikan pengujian.
Berikut tampilan kerangka kerja lengkapnya:
Seperti yang Anda lihat, ini adalah kerangka kerja 5 langkah. Mari kita pelajari langkah demi langkah secara detail.
Langkah 1)
- Skrip driver Execute.java memanggil Read.Guru99ExcelFile.java.
- BacaGuru99ExcelFile.java berisi kode POI yang membaca data dari Excel.
Langkah 2)
- BacaGuru99ExcelFile.java membaca data dari TestCase.xlsx.
- Beginilah tampilan lembar tersebut:
- Berdasarkan kata kunci yang tertulis dalam file Excel, kerangka kerja tersebut melakukan tindakan yang sesuai pada antarmuka pengguna (UI).
- Sebagai contoh, untuk mengklik tombol berlabel โLoginโ, lembar Excel menyimpan kata kunci โKlikโ. Untuk mengidentifikasi tombol Login di antara banyak tombol lainnya pada suatu halaman, baris Excel mendefinisikan Nama Objek sebagai loginButton dan Tipe Objek sebagai nama (lihat baris yang disorot pada gambar). Tipe Objek juga dapat berupa XPath, CSS, kelas, atau strategi pencari lokasi lainnya.
Langkah 3) BacaGuru99ExcelFile.java meneruskan data yang telah diuraikan kembali ke skrip penggerak Execute.java.
Langkah 4)
- Untuk semua elemen UI web, Anda memelihara repositori objek yang menyimpan penunjuk elemen seperti XPath, nama, CSS, atau nama kelas.
- Execute.java (skrip penggerak) membaca seluruh repositori objek dan menyimpannya dalam sebuah variabel.
- Kelas pembantu ReadObject mengekspos metode getObjectRepository yang memuat repositori pada saat runtime.
CATATAN: Anda mungkin bertanya-tanya mengapa repositori objek diperlukan. Jawabannya adalah kemudahan pemeliharaan. Jika sebuah tombol dengan nama = btnlogin digunakan dalam 10 kasus uji dan pengembang mengubah namanya menjadi submit, Anda harus mengedit 10 file. Dengan repositori objek, Anda mengubah locator di satu tempat.
Langkah 5)
- Driver tersebut meneruskan data dari Excel dan repositori objek ke UI.Operakelas tion.
- UIOperation berisi fungsi-fungsi yang memetakan setiap kata kunci seperti CLICK dan SETTEXT ke aksi WebDriver tertentu.
- UIOperation adalah sebuah Java Kelas yang berisi implementasi sebenarnya untuk berinteraksi dengan elemen web.
Struktur proyek lengkapnya terlihat seperti ini:
Mari kita lihat contoh praktis:
Skenario Uji: Kami 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 File object to open the xlsx file
File file = new File(filePath + "\\" + fileName);
// Create a FileInputStream to read the Excel file
FileInputStream inputStream = new FileInputStream(file);
Workbook guru99Workbook = null;
// Detect the file extension
String fileExtensionName = fileName.substring(fileName.indexOf("."));
if (fileExtensionName.equals(".xlsx")) {
guru99Workbook = new XSSFWorkbook(inputStream);
} else if (fileExtensionName.equals(".xls")) {
guru99Workbook = new HSSFWorkbook(inputStream);
}
// Read the 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 the 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":
driver.findElement(this.getObject(p, objectName, objectType)).click();
break;
case "SETTEXT":
driver.findElement(this.getObject(p, objectName, objectType)).sendKeys(value);
break;
case "GOTOURL":
driver.get(p.getProperty(value));
break;
case "GETTEXT":
driver.findElement(this.getObject(p, objectName, objectType)).getText();
break;
default:
break;
}
}
private By getObject(Properties p, String objectName, String objectType) throws Exception {
if (objectType.equalsIgnoreCase("XPATH")) {
return By.xpath(p.getProperty(objectName));
} else if (objectType.equalsIgnoreCase("CLASSNAME")) {
return By.className(p.getProperty(objectName));
} else if (objectType.equalsIgnoreCase("NAME")) {
return By.name(p.getProperty(objectName));
} else if (objectType.equalsIgnoreCase("CSS")) {
return By.cssSelector(p.getProperty(objectName));
} else if (objectType.equalsIgnoreCase("LINK")) {
return By.linkText(p.getProperty(objectName));
} 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 {
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 the number of rows in the Excel file
int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
for (int i = 1; i < rowCount + 1; i++) {
Row row = guru99Sheet.getRow(i);
if (row.getCell(0).toString().length() == 0) {
System.out.println(row.getCell(1).toString() + "----" + row.getCell(2).toString() + "----" +
row.getCell(3).toString() + "----" + row.getCell(4).toString());
operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
row.getCell(3).toString(), row.getCell(4).toString());
} else {
System.out.println("New Testcase->" + row.getCell(0).toString() + " Started");
}
}
}
}
Setelah dieksekusi, outputnya akan terlihat seperti ini:
Download Selenium File Proyek untuk Demo dalam Tutorial ini
Kerangka Kerja Berbasis Hibrid
Kerangka Kerja Berbasis Hibrid in Selenium Menggabungkan kekuatan dari kerangka kerja Keyword Driven dan Data Driven. Ini adalah model yang mudah digunakan yang memungkinkan penguji manual untuk membuat kasus uji hanya dengan mengedit kata kunci, data uji, dan repositori objek, tanpa menulis kode kerangka kerja apa pun.
Di sini, file Excel menyimpan kata kunci untuk setiap langkah, dan TestNG'S penyedia data menyediakan data uji. Pemisahan ini memungkinkan Anda untuk menskalakan kosakata tindakan dan variasi input secara independen.
Untuk kerangka kerja hibrida kami, tidak ada perubahan dalam struktur berbasis kata kunci: kami hanya mengganti ExecuteTest.java dengan HybridExecuteTest.java.
File HybridExecuteTest ini berisi logika berbasis kata kunci lengkap yang dikombinasikan dengan TestNGmekanisme penyedia data.
Gambaran lengkap dari kerangka kerja hibrida tersebut tampak 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 {
if (testcaseName != null && testcaseName.length() != 0) {
webdriver = new FirefoxDriver();
}
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
operation.perform(allObjects, keyword, objectName, objectType, value);
}
@DataProvider(name = "hybridData")
public Object[][] getDataFromDataprovider() throws IOException {
Object[][] object = null;
ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");
int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
object = new Object[rowCount][5];
for (int i = 0; i < rowCount; i++) {
Row row = guru99Sheet.getRow(i + 1);
for (int j = 0; j < row.getLastCellNum(); j++) {
object[i][j] = row.getCell(j).toString();
}
}
System.out.println("");
return object;
}
}
Download Selenium File Proyek untuk Demo dalam Tutorial ini












