Selenium Raamistik: andmete, märksõnade ja hübriidpõhine

Mis on Selenium Raamistik?

. Selenium automatiseerimise raamistik on koodistruktuur, mis muudab koodi hooldamise lihtsaks ja tõhusaks. Ilma raamistiketa võivad kasutajad paigutada "koodi" ja "andmed" samasse kohta, mis ei ole korduvkasutatav ega loetav. Raamistikud annavad kasulikke tulemusi, nagu suurem koodi korduvkasutatavus, suurem kaasaskantavus, väiksemad skripti hoolduskulud, parem koodi loetavus jne.

Tüübid Selenium Raamistik

Neid on peamiselt kolm raamistike tüüp loodud Selenium WebDriver käsitsi testjuhtumite automatiseerimiseks

  • Andmepõhine raamistik
  • Märksõnapõhine raamistik
  • Hübriidajamiga raamistik

Tüübid Selenium Raamistik

Andmepõhine raamistik sisse Selenium

Andmepõhine raamistik sisse Selenium on meetod andmekogumite testjuhtumist eraldamiseks. Kui andmekogumid on testjuhtumist eraldatud, saab seda hõlpsasti konkreetse funktsiooni jaoks muuta ilma koodi muutmata. Seda kasutatakse testjuhtumite ja komplektide toomiseks välistest failidest, näiteks Excel, .csv, .xml või mõned andmebaasi tabelid.

Andmepõhine raamistik sisse Selenium

Exceli lugemiseks või kirjutamiseks pakub Apache väga kuulsat raamatukogu POI-d. See raamatukogu on piisavalt võimeline nii lugemiseks kui ka kirjutamiseks XLS ja XLSX Exceli failivormingus.

Lugema XLS failid, an HSSF teostuse pakub POI raamatukogu.

Lugema XLSX, XSSF rakendamine POI raamatukogu saab olema valik. Uurime neid rakendusi üksikasjalikult.

Andmepõhise testimise kohta õppisime juba oma eelmine juhendaja

Märksõnapõhine raamistik sisse Selenium

Märksõnapõhine raamistik sisse Selenium on meetod, mida kasutatakse automatiseeritud testimise kiirendamiseks, eraldades märksõnad tavaliste funktsioonide ja juhiste jaoks. Kõik tehtavad toimingud ja juhised on kirjutatud mõnda välisesse faili, näiteks Exceli lehele. Kasutajad saavad hõlpsasti kontrollida ja määrata funktsioone, mida nad soovivad testida.

Siin on, kuidas kogu raamistik välja näeb

Märksõnapõhine raamistik sisse Selenium

Nagu näete, on see 5-astmeline raamistik. Uurime seda samm-sammult üksikasjalikult

Step 1)

  • Draiveri skript Execute.java kutsub esile ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java sisaldab POI-skripti andmete lugemiseks Excelist

Step 2)

  • ReadGuru99ExcelFile.java loeb andmeid failist TestCase.xlsx
  • Siin näeb leht välja -

Märksõnapõhine raamistik sisse Selenium

  • Vastavalt Exceli faili kirjutatud märksõnadele teostab raamistik toimingu kasutajaliideses.
  • Näiteks peame klõpsama nuppu "Logi sisse". Vastavalt sellele on meie Excelis märksõna "Kliki". Nüüd võib AUT-l olla lehel sadu nuppe, sisselogimisnupu tuvastamiseks sisestame Excelis sisselogimisnupuks Objekti nime ja nimena objekti tüübi (vt ülaltoodud pildil esiletõstetud rida). Objekti tüüp võib olla Xpath, nimi CSS või mõni muu väärtus

Step 3) ReadGuru99ExcelFile.java edastab need andmed draiveri skriptile Execute.java

Step 4)

  • Kõigi meie kasutajaliidese veebielementide jaoks peame looma objektihoidla, kuhu paigutame nende elementide asukoha (nt Xpath, nimi, CSS-i tee, klassi nimi jne).

Märksõnapõhine raamistik sisse Selenium

  • Execute.java (meie draiveri skript) loeb kogu objektihoidla ja salvestab selle muutujas
  • Selle objektihoidla lugemiseks vajame klassi ReadObject, millel on selle lugemiseks meetod getObjectRepository.
  • Märksõnapõhine raamistik sisse Selenium

MÄRKUS: Võite mõelda, miks me peame looma objektihoidla. Vastus aitab koodi hooldamisel. Näiteks kasutame nuppu nimi = btnlogin 10 erineval testjuhul. Edaspidi otsustab arendaja muuta nime btnlogin asemel esitajaks. Peate muutma kõigis 10 testjuhtumis. Objektihoidla puhul teete muudatuse hoidlas vaid üks kord.

Step 5)

  • Draiver edastab andmed Exceli ja objektihoidlast kasutajaliideseleOperaklassi
  • UIOperation klassil on funktsioonid toimingute tegemiseks, mis vastavad Excelis mainitud märksõnadele nagu KLIKK, SETTEXT jne.
  • UIOperaklass on a Java klass, millel on veebielementidega toimingute tegemiseks koodi tegelik rakendamine

Märksõnapõhine raamistik sisse Selenium

Kogu projekt näeb välja selline -

Märksõnapõhine raamistik sisse Selenium

Vaatame näidet:

Testi stsenaarium: Teostame 2 testjuhtumit

objekt.omadused

url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset

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

Pärast täitmist näeb väljund välja selline -

Märksõnapõhine raamistik sisse Selenium

Lae alla Selenium Selle õpetuse demo projektifailid

Hübriidajamiga raamistik

Hübriidajamiga raamistik in Selenium on kontseptsioon, mille puhul kasutame nii märksõnapõhise raamistiku kui ka andmepõhise raamistiku eeliseid. See on hõlpsasti kasutatav raamistik, mis võimaldab käsitsi testijatel luua testjuhtumeid, vaadates lihtsalt märksõnu, testandmeid ja objektide hoidlat ilma raamistikus kodeerimata.

Siin märksõnade jaoks kasutame testjuhtumite haldamiseks Exceli faile ja testandmete jaoks saame kasutada pakkuja andmeid Testng raamistik.

Hübriidajamiga raamistik

Meie hübriidraamistikus ei pea me märksõnapõhises raamistikus midagi muutma, siin peame lihtsalt asendama faili ExecuteTest.java failiga HybridExecuteTest.java.

Hübriidajamiga raamistik

Sellel HybridExecuteTesti failil on kogu märksõna kood, mis põhineb andmepakkuja kontseptsioonil.

Hübriidraamistiku täielik pildiline esitus näeb välja selline

Hübriidajamiga raamistik

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

kokkuvõte

  • Kasutades saame luua kolme tüüpi testraamistikku Selenium Veebidraiver.
  • A Selenium automatiseerimisraamistik, mida saab liigitada andmepõhiseks, märksõnapõhiseks ja hübriidraamistikuks.
  • Saame saavutada andmepõhise raamistiku kasutades TestNGandmepakkuja.
  • Märksõnapõhises raamistikus kirjutatakse märksõnad mõnesse välisesse faili, näiteks Exceli faili, ja Java-kood kutsub seda faili ja käivitab testjuhtumid.
  • Hübriidraamistik on segu märksõnapõhisest ja andmepõhisest raamistikust.

Lae alla Selenium Selle õpetuse demo projektifailid