Selenium Kehys: Data-, avainsana- ja hybridipohjainen

Mikä on Selenium Puitteet?

- Selenium automaatiokehys on koodirakenne, joka tekee koodin ylläpidosta helppoa ja tehokasta. Ilman kehyksiä käyttäjät voivat sijoittaa "koodin" ja "datan" samaan paikkaan, jota ei voi käyttää uudelleen eikä lukea. Kehykset tuottavat hyödyllisiä tuloksia, kuten paremman koodin uudelleenkäytettävyyden, paremman siirrettävyyden, alemmat skriptien ylläpitokustannukset, paremman koodin luettavuuden jne.

Tyyppisiä Selenium Puitteet

Niitä on pääasiassa kolme tyyppiset puitteet luotu Selenium WebDriver manuaalisten testitapausten automatisointiin

  • Data Driven Framework
  • Avainsanoihin perustuva kehys
  • Hybridikäyttöinen kehys

Tyyppisiä Selenium Puitteet

Data Driven Framework sisään Selenium

Data Driven Framework sisään Selenium on tapa erottaa tietojoukot testitapauksesta. Kun tietojoukot on erotettu testitapauksesta, sitä voidaan helposti muokata tiettyä toimintoa varten koodia muuttamatta. Sitä käytetään noutamaan testitapauksia ja sviittejä ulkoisista tiedostoista, kuten kunnostautua, .csv, .xml tai jotkin tietokantataulukot.

Data Driven Framework sisään Selenium

Excelin lukemista tai kirjoittamista varten Apache tarjoaa erittäin kuuluisan kirjaston POI:n. Tämä kirjasto pystyy tarpeeksi lukemaan ja kirjoittamaan molempia XLS ja XLSX Excelin tiedostomuoto.

Lukea XLS tiedostot, an HSSF toteutuksen tarjoaa POI-kirjasto.

Lukea XLSX, XSSF toteutus KP kirjasto tulee olemaan valinta. Tutkitaanpa näitä toteutuksia yksityiskohtaisesti.

Olemme jo oppineet tietoihin perustuvasta testauksesta edellinen opetusohjelma

Avainsanoihin perustuva kehys Selenium

Avainsanoihin perustuva kehys Selenium on menetelmä, jota käytetään nopeuttamaan automaattista testausta erottamalla avainsanat yleisille toiminnoille ja ohjeille. Kaikki suoritettavat toiminnot ja ohjeet kirjoitetaan johonkin ulkoiseen tiedostoon, kuten Excel-taulukkoon. Käyttäjät voivat helposti hallita ja määrittää toimintoja, joita he haluavat testata.

Tältä koko kehys näyttää

Avainsanoihin perustuva kehys Selenium

Kuten näette, se on 5-vaiheinen kehys. Tutkitaan sitä vaiheittain yksityiskohtaisesti

Vaihe 1)

  • Ohjausskripti Execute.java kutsuu ReadGuru99ExcelFile.java-kutsua
  • ReadGuru99ExcelFile.javassa on POI-komentosarja tietojen lukemiseen Excelistä

Vaihe 2)

  • ReadGuru99ExcelFile.java lukee tiedot tiedostosta TestCase.xlsx
  • Tältä arkki näyttää -

Avainsanoihin perustuva kehys Selenium

  • Excel-tiedostoon kirjoitettujen avainsanojen mukaan kehys suorittaa toiminnon käyttöliittymällä.
  • Meidän on esimerkiksi napsautettava Kirjaudu sisään -painiketta. Vastaavasti Excelissämme on avainsana "Napsauta". Nyt AUT:lla voi olla satoja painikkeita sivulla tunnistaaksemme kirjautumispainikkeen, Excelissä syötämme Object Name:n loginButtoniksi ja objektityypin nimeksi (katso korostettu rivi yllä olevassa kuvassa). Objektityyppi voi olla Xpath, nimi CSS tai mikä tahansa muu arvo

Vaihe 3) ReadGuru99ExcelFile.java välittää nämä tiedot ohjainskriptille Execute.java

Vaihe 4)

  • Kaikille käyttöliittymän verkkoelementeillemme meidän on luotava objektivarasto, johon sijoitamme niiden elementtipaikantimen (kuten Xpath, nimi, CSS-polku, luokan nimi jne.)

Avainsanoihin perustuva kehys Selenium

  • Execute.java (ohjainskriptimme) lukee koko objektivaraston ja tallentaa sen muuttujaan
  • Tämän objektivaraston lukemiseksi tarvitsemme ReadObject-luokan, jossa on getObjectRepository-metodi sen lukemiseen.
  • Avainsanoihin perustuva kehys Selenium

HUOMAUTUS: Saatat ajatella, miksi meidän on luotava objektivarasto. Vastaus auttaa koodin ylläpidossa. Käytämme esimerkiksi painiketta nimi = btnlogin 10 eri testitapauksessa. Tulevaisuudessa kehittäjä päättää muuttaa nimen btnloginista lähettämään. Sinun on tehtävä muutos kaikissa 10 testitapauksessa. Objektiarkiston tapauksessa teet muutoksen vain kerran arkistossa.

Vaihe 5)

  • Ajuri välittää tiedot Excelistä ja objektivarastosta käyttöliittymäänOperaluokkaan
  • UIOperation-luokassa on toimintoja, jotka vastaavat excelissä mainittuja avainsanoja, kuten CLICK, SETTEXT jne.
  • UIOperaluokka on a Java luokka, jolla on koodin todellinen toteutus verkkoelementtien toimintojen suorittamiseksi

Avainsanoihin perustuva kehys Selenium

Koko projekti näyttää tältä -

Avainsanoihin perustuva kehys Selenium

Katsotaanpa esimerkkiä:

Testi skenaario: Suoritamme 2 testitapausta

objekti.ominaisuudet

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

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

Suorituksen jälkeen tulos näyttää tältä -

Avainsanoihin perustuva kehys Selenium

Lataa Selenium Projektitiedostot esittelyä varten tässä opetusohjelmassa

Hybridikäyttöinen kehys

Hybridikäyttöinen kehys in Selenium on konsepti, jossa hyödynnämme sekä avainsanoihin perustuvan että tietopohjaisen kehyksen etuja. Se on helppokäyttöinen kehys, jonka avulla manuaaliset testaajat voivat luoda testitapauksia vain katsomalla avainsanoja, testitietoja ja objektivarastoa ilman koodausta viitekehyksessä.

Täällä avainsanojen osalta käytämme Excel-tiedostoja testitapausten ylläpitämiseen, ja testidatalle voimme käyttää datan tarjoajaa Testng puitteissa.

Hybridikäyttöinen kehys

Tässä hybridikehyksessämme meidän ei tarvitse muuttaa mitään avainsanapohjaisessa kehyksessä, tässä meidän on vain korvattava ExecuteTest.java-tiedosto HybridExecuteTest.java-tiedostolla.

Hybridikäyttöinen kehys

Tässä HybridExecuteTest-tiedostossa on kaikki avainsanojen koodi, joka perustuu tiedontarjoajakonseptiin.

Hybridikehyksen täydellinen kuvallinen esitys näyttää

Hybridikäyttöinen kehys

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

Yhteenveto

  • Voimme luoda kolmen tyyppisen testikehyksen käyttämällä Selenium WebDriver.
  • A Selenium automaatiokehys, joka voidaan luokitella tietovetoisiin, avainsanoihin perustuvaksi ja hybridikehykseksi.
  • Voimme saavuttaa tietopohjaisen kehyksen käyttämällä TestNGn tietojen toimittaja.
  • Avainsanapohjaisessa kehyksessä avainsanat kirjoitetaan joihinkin ulkoisiin tiedostoihin, kuten Excel-tiedostoon, ja Java-koodi kutsuu tätä tiedostoa ja suorittaa testitapauksia.
  • Hybridikehys on sekoitus avainsanalähtöistä ja datapohjaista kehystä.

Lataa Selenium Projektitiedostot esittelyä varten tässä opetusohjelmassa