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
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.
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ää
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ää -
- 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.)
- Execute.java (ohjainskriptimme) lukee koko objektivaraston ja tallentaa sen muuttujaan
- Tämän objektivaraston lukemiseksi tarvitsemme ReadObject-luokan, jossa on getObjectRepository-metodi sen lukemiseen.
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
Koko projekti näyttää tältä -
Katsotaanpa esimerkkiä:
Testi skenaario: Suoritamme 2 testitapausta
- Testitapaus 1:
- Mene
https://demo.guru99.com/V4/
- Anna käyttäjätunnus
- Kirjoita salasana
- Napsauta Palauta
- Testitapaus 2:
- Mene
https://demo.guru99.com/V4/
- Anna käyttäjätunnus
- Kirjoita salasana
- Napsauta Kirjaudu
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ä -
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.
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.
Tässä HybridExecuteTest-tiedostossa on kaikki avainsanojen koodi, joka perustuu tiedontarjoajakonseptiin.
Hybridikehyksen täydellinen kuvallinen esitys näyttää
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