Selenium Çerçeve: Veri, Anahtar Kelime ve Hibrit Odaklı
Nedir? Selenium Çerçeve?
The Selenium otomasyon Çerçevesi kod bakımını kolay ve verimli hale getiren bir kod yapısıdır. Çerçeveler olmadan, kullanıcılar "kodu" ve "verileri" yeniden kullanılabilen veya okunamayan aynı konuma yerleştirebilirler. Çerçeveler, artan kod yeniden kullanılabilirliği, daha yüksek taşınabilirlik, daha düşük komut dosyası bakım maliyeti, daha iyi kod okunabilirliği vb. gibi faydalı sonuçlar üretir.
Tipleri Selenium iskelet
Esas olarak üç tane var çerçeve türü tarafından yaratıldı Selenium Manuel test senaryolarını otomatikleştirmek için WebDriver
- Veri Odaklı Çerçeve
- Anahtar Kelime Odaklı Çerçeve
- Hibrit Odaklı Çerçeve
Veriye Dayalı Çerçeve Selenium
Veriye Dayalı Çerçeve Selenium veri kümelerini test senaryosundan ayırma yöntemidir. Veri kümeleri test senaryosundan ayrıldıktan sonra, kodu değiştirmeden belirli bir işlevsellik için kolayca değiştirilebilir. Aşağıdaki gibi harici dosyalardan test senaryolarını ve paketleri getirmek için kullanılır: Excel, .csv, .xml veya bazı veritabanı tabloları.
Bir Excel'i okumak veya yazmak için Apache çok ünlü bir kütüphane POI'si sağlar. Bu kütüphane her ikisini de okuyup yazabilecek kadar yeteneklidir. XLS ve XLSX Excel'in dosya biçimi.
Okumak XLS dosyalar, bir HSSF uygulama POI kütüphanesi tarafından sağlanır.
Okumak XLSX, XSSF uygulanması POI kütüphane seçim olacak. Bu uygulamaları ayrıntılı olarak inceleyelim.
Veriye Dayalı Test hakkında zaten bilgi almıştık. önceki ders
Anahtar Kelime Odaklı Çerçeve Selenium
Anahtar Kelime Odaklı Çerçeve Selenium anahtar kelimeleri ortak işlev ve talimatlar kümesine ayırarak otomatik testi hızlandırmak için kullanılan bir yöntemdir. Yapılacak tüm işlemler ve talimatlar Excel sayfası gibi harici bir dosyaya yazılır. Kullanıcılar test etmek istedikleri işlevleri kolayca kontrol edebilir ve belirtebilirler.
İşte tüm çerçevenin nasıl göründüğü
Gördüğünüz gibi bu 5 adımlı bir çerçeve. Bunu adım adım detaylı bir şekilde inceleyelim
) 1 Adım
- Execute.java sürücü betiği ReadGuru99ExcelFile.java'yı çağıracaktır.
- ReadGuru99ExcelFile.java, Excel'den veri okumak için POI komut dosyasına sahiptir
) 2 Adım
- ReadGuru99ExcelFile.java, TestCase.xlsx'teki verileri okuyacaktır.
- İşte sayfanın nasıl göründüğü:
- Excel dosyasında yazılan anahtar kelimelere göre framework UI üzerinde işlemi gerçekleştirecektir.
- Örneğin 'Giriş' butonuna tıklamamız gerekiyor. Buna uygun olarak Excel'imizde 'Tıklayın' anahtar kelimesi bulunacaktır. Artık AUT bir sayfada yüzlerce düğmeye sahip olabilir, bir Oturum Açma düğmesini tanımlamak için Excel'de Oturum Açma Düğmesi olarak Nesne Adını ve ad olarak nesne türünü gireceğiz (yukarıdaki resimde vurgulanan satıra bakın). Nesne Türü Xpath, CSS adı veya başka herhangi bir değer olabilir
) 3 Adım ReadGuru99ExcelFile.java bu verileri Execute.java sürücü komut dosyasına aktaracaktır.
) 4 Adım
- Tüm UI web öğelerimiz için, öğe bulucuyu (Xpath, ad, CSS yolu, sınıf adı vb. gibi) yerleştireceğimiz bir nesne deposu oluşturmamız gerekir.
- Execute.java (sürücü betiğimiz) Nesne Deposunun tamamını okuyacak ve onu bir değişkende saklayacak
- Bu nesne deposunu okumak için, onu okuyacak getObjectRepository yöntemine sahip bir ReadObject sınıfına ihtiyacımız var.
NOT: Neden bir nesne deposu oluşturmamız gerektiğini düşünebilirsiniz. Cevap kod bakımında yardımcı olur. Örneğin name = btnlogin butonunu 10 farklı test senaryosunda kullanıyoruz. Gelecekte geliştirici, adı btnlogin'den submit'e değiştirmeye karar verir. 10 test senaryosunun tamamında değişiklik yapmanız gerekecektir. Nesne deposu söz konusu olduğunda, değişikliği depoda yalnızca bir kez yapacaksınız.
) 5 Adım
- Sürücü, verileri Excel ve Nesne Deposundan kullanıcı arayüzüne aktaracaktırOperasınıf
- UIOperation sınıfı, excel'de belirtilen CLICK, SETTEXT vb. anahtar kelimelere karşılık gelen eylemleri gerçekleştirecek işlevlere sahiptir.
- UIOperation sınıfı bir Java web öğeleri üzerinde işlemleri gerçekleştirmek için kodun gerçek uygulamasına sahip olan sınıf
Projenin tamamı şöyle görünecek:
Bir örneğe bakalım:
Test Senaryosu: 2 test senaryosu yürütüyoruz
- Test Senaryosu 1:
- Goto
https://demo.guru99.com/V4/
- Kullanıcı Kimliğini Girin
- Şifre girin
- Sıfırla'yı tıklayın
- Test Senaryosu 2:
- Goto
https://demo.guru99.com/V4/
- Kullanıcı Kimliğini Girin
- Şifre girin
- Giriş tıklayın
nesne.özellikler
url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset
ReadGuru99ExcelFile.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"); } } }
ExecuteTest.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"); } } } }
Yürütmeden sonra çıktı şöyle görünecek:
Atomic Cüzdanı indirin : Selenium Bu Eğitimdeki Demoya İlişkin Proje Dosyaları
Hibrit Odaklı Çerçeve
Hibrit Odaklı Çerçeve in Selenium hem Anahtar Kelime odaklı çerçevenin hem de Veri odaklı çerçevenin avantajını kullandığımız bir kavramdır. Manuel test uzmanlarının, çerçevede kodlama yapmadan yalnızca anahtar kelimelere, test verilerine ve nesne deposuna bakarak test senaryoları oluşturmasına olanak tanıyan, kullanımı kolay bir çerçevedir.
Burada anahtar kelimeler için, test senaryolarını sürdürmek amacıyla Excel dosyalarını kullanacağız ve test verileri için, sağlayıcının verilerini kullanabiliriz. Test çerçeve.
Burada, hibrit çerçevemizde, Anahtar Kelime odaklı çerçevede hiçbir şeyi değiştirmemize gerek yok, burada sadece ExecuteTest.java dosyasını HybridExecuteTest.java dosyasıyla değiştirmemiz gerekiyor.
Bu HybridExecuteTest dosyası, veri sağlayıcı konseptiyle yönlendirilen anahtar kelimeye ilişkin tüm kodlara sahiptir.
Hibrit çerçevenin tam resimsel temsili şöyle görünecektir:
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; } }
ÖZET
- Kullanarak üç tür test çerçevesi oluşturabiliriz. Selenium WebDriver.
- A Selenium Veriye Dayalı, Anahtar Kelimeye Dayalı ve Hibrit Çerçeveler olarak sınıflandırılabilen otomasyon çerçevesi.
- Veri odaklı çerçeveyi kullanarak elde edebiliriz TestNG'ın veri sağlayıcısı.
- Anahtar Kelime odaklı çerçevede, anahtar kelimeler excel dosyası gibi bazı harici dosyalara yazılır ve Java kodu bu dosyayı çağırır ve test senaryolarını yürütür.
- Hibrit çerçeve, anahtar kelime odaklı ve veri odaklı çerçevenin bir karışımıdır.
Atomic Cüzdanı indirin : Selenium Bu Eğitimdeki Demoya İlişkin Proje Dosyaları