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

Tipleri Selenium iskelet

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ı.

Veriye Dayalı Çerçeve Selenium

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üğü

Anahtar Kelime Odaklı Çerçeve Selenium

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üğü:

Anahtar Kelime Odaklı Çerçeve Selenium

  • 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.

Anahtar Kelime Odaklı Çerçeve Selenium

  • 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.
  • Anahtar Kelime Odaklı Çerçeve Selenium

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

Anahtar Kelime Odaklı Çerçeve Selenium

Projenin tamamı şöyle görünecek:

Anahtar Kelime Odaklı Çerçeve Selenium

Bir örneğe bakalım:

Test Senaryosu: 2 test senaryosu yürütüyoruz

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:

Anahtar Kelime Odaklı Çerçeve Selenium

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.

Hibrit Odaklı Ç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.

Hibrit Odaklı Çerçeve

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:

Hibrit Odaklı Çerçeve

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ı