Selenium Okvir: Pokretan podacima, ključnim riječima i hibridom

Što je Selenium Okvir?

The Selenium okvir automatizacije je struktura koda koja održavanje koda čini lakim i učinkovitim. Bez okvira, korisnici mogu postaviti "kod" i "podatke" na isto mjesto koje se ne može ponovno koristiti niti čitati. Okviri proizvode korisne rezultate kao što su povećana mogućnost ponovne upotrebe koda, veća prenosivost, smanjeni troškovi održavanja skripte, bolja čitljivost koda itd.

Vrste Selenium Okvir

Uglavnom su tri vrsta okvira izrađen od strane Selenium WebDriver za automatizaciju ručnih testnih slučajeva

  • Okvir vođen podacima
  • Okvir vođen ključnim riječima
  • Hibridno vođen okvir

Vrste Selenium Okvir

Data Driven Framework in Selenium

Data Driven Framework in Selenium je metoda odvajanja skupova podataka od testnog slučaja. Nakon što se skupovi podataka odvoje od testnog slučaja, on se može lako modificirati za određenu funkcionalnost bez mijenjanja koda. Koristi se za dohvaćanje testnih slučajeva i paketa iz vanjskih datoteka poput nadmašiti, .csv, .xml ili neke tablice baze podataka.

Data Driven Framework in Selenium

Za čitanje ili pisanje Excela, Apache nudi vrlo poznatu knjižnicu POI. Ova biblioteka je dovoljno sposobna za čitanje i pisanje oboje XLS međutim Xlsx format datoteke programa Excel.

Čitati XLS datoteke, an HSSF implementaciju osigurava POI biblioteka.

Čitati XLSX, XSSF provedba POI knjižnica bit će izbor. Proučimo ove implementacije u detalje.

Već smo naučili o testiranju vođenom podacima u našem prethodni vodič

Okvir vođen ključnim riječima u Selenium

Okvir vođen ključnim riječima u Selenium je metoda koja se koristi za ubrzavanje automatiziranog testiranja odvajanjem ključnih riječi za uobičajeni skup funkcija i uputa. Sve operacije i upute koje treba izvršiti zapisuju se u neku vanjsku datoteku poput Excel lista. Korisnici mogu jednostavno kontrolirati i odrediti funkcionalnosti koje žele testirati.

Evo kako izgleda kompletan okvir

Okvir vođen ključnim riječima u Selenium

Kao što vidite, to je okvir od 5 koraka. Proučimo to korak po korak detaljno

Korak 1)

  • Skripta upravljačkog programa Execute.java će pozvati ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java ima POI skriptu za čitanje podataka iz Excela

Korak 2)

  • ReadGuru99ExcelFile.java će pročitati podatke iz TestCase.xlsx
  • Evo kako list izgleda-

Okvir vođen ključnim riječima u Selenium

  • Prema ključnim riječima zapisanim u Excel datoteci, okvir će izvršiti operaciju na korisničkom sučelju.
  • Na primjer, trebamo kliknuti gumb 'Prijava'. Sukladno tome, naš će Excel imati ključnu riječ 'Klikni'. Sada AUT može imati stotine gumba na stranici, za identifikaciju gumba za prijavu, u Excelu ćemo unijeti naziv objekta kao loginButton i tip objekta kao naziv (pogledajte istaknuti red na gornjoj slici). Vrsta objekta može biti Xpath, naziv CSS ili bilo koja druga vrijednost

Korak 3) ReadGuru99ExcelFile.java proslijedit će ove podatke skripti upravljačkog programa Execute.java

Korak 4)

  • Za sve naše web-elemente korisničkog sučelja moramo stvoriti repozitorij objekata gdje ćemo smjestiti njihov lokator elemenata (kao što je Xpath, naziv, CSS put, naziv klase itd.)

Okvir vođen ključnim riječima u Selenium

  • Execute.java (naša skripta upravljačkog programa) pročitat će cijelo spremište objekata i pohraniti ga u varijablu
  • Za čitanje ovog repozitorija objekata potrebna nam je klasa ReadObject koja ima metodu getObjectRepository za čitanje.
  • Okvir vođen ključnim riječima u Selenium

NAPOMENA: Možda mislite zašto trebamo stvoriti repozitorij objekata. Odgovor pomaže u održavanju koda. Na primjer, koristimo gumb s imenom = btnlogin u 10 različitih testnih slučajeva. Ubuduće, programer odlučuje promijeniti ime iz btnlogin u submit. Morat ćete napraviti promjenu u svih 10 testnih slučajeva. U slučaju repozitorija objekata, izvršit ćete promjenu samo jednom u repozitoriju.

Korak 5)

  • Upravljački program će proslijediti podatke iz Excela i repozitorija objekata u UIOperacija klasa
  • UIOperaklasa tion ima funkcije za izvođenje radnji koje odgovaraju ključnim riječima kao što su CLICK, SETTEXT itd… spomenute u excelu
  • UIOperarazred je a Java klasa koja ima stvarnu implementaciju koda za izvođenje operacija na web elementima

Okvir vođen ključnim riječima u Selenium

Kompletan projekt će izgledati kao-

Okvir vođen ključnim riječima u Selenium

Pogledajmo primjer:

Testni scenarij: Izvršavamo 2 testna slučaja

objekt.svojstva

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;
    }
    
}

UIOperacija.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");
            }
        }
    }
}

Nakon izvršenja, izlaz će izgledati kao –

Okvir vođen ključnim riječima u Selenium

Preuzimanje Selenium Projektne datoteke za demo u ovom vodiču

Hibridno vođen okvir

Hibridno vođen okvir in Selenium je koncept u kojem koristimo prednost okvira vođenog ključnim riječima i okvira vođenog podacima. To je okvir jednostavan za korištenje koji ručnim testerima omogućuje stvaranje testnih slučajeva samo gledanjem ključnih riječi, testnih podataka i repozitorija objekata bez kodiranja u okviru.

Ovdje ćemo za ključne riječi koristiti Excel datoteke za održavanje testnih slučajeva, a za testne podatke možemo koristiti podatke, davatelja Testng okvir.

Hibridno vođen okvir

Ovdje u našem hibridnom okviru, ne trebamo ništa mijenjati u okviru koji pokreće ključna riječ, ovdje samo trebamo zamijeniti datoteku ExecuteTest.java datotekom HybridExecuteTest.java.

Hibridno vođen okvir

Ova datoteka HybridExecuteTest sadrži sav kod za ključne riječi vođen konceptom pružatelja podataka.

Kompletan slikovni prikaz hibridnog okvira će izgledati ovako

Hibridno vođen okvir

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;    
    }
}

Rezime

  • Možemo izraditi tri vrste okvira za testiranje pomoću Selenium WebDriver.
  • A Selenium okvir za automatizaciju koji se može klasificirati u okvire vođene podacima, vođene ključnim riječima i hibridne okvire.
  • Pomoću okvira vođenog podacima možemo postići TestNGdavatelj podataka.
  • U okviru koji se temelji na ključnim riječima, ključne riječi su zapisane u nekim vanjskim datotekama kao što je excel datoteka, a java kod će pozvati tu datoteku i izvršiti testne slučajeve.
  • Hibridni okvir je kombinacija okvira vođenog ključnim riječima i okvira vođenog podacima.

Preuzimanje Selenium Projektne datoteke za demo u ovom vodiču