Izdelava podatkovnega pogona, ključnih besed in hibridnega okvira selena



V tem blogu je razloženo, kaj je okvir selena, njegove prednosti in kako v selen uporabiti ogrodje, ki temelji na podatkih, ključnih besedah ​​in hibrid.

Prejšnji v tej seriji so vam predstavili osnovne koncepte pri testiranju selena.V tem blogu pa vam bom povedal, kako uporabljati okvir Selenium za optimizacijo strukture kode, kar vas bo približalo in postalo .

Kaj je okvir selena?

Selenium framework je struktura kode za poenostavitev vzdrževanja kode in boljšo berljivost kode. Okvir vključuje razbijanje celotne kode na manjše koščke kode, ki preizkušajo določeno funkcionalnost.





uporabite python v vizualnem studiu

Koda je strukturirana tako, da je 'nabor podatkov' ločen od dejanskega 'testnega primera', ki bo preizkusil funkcionalnost spletne aplikacije. Lahko je tudi strukturiran tako, da se testni primeri, ki jih je treba izvesti, prikličejo (prikličejo) iz zunanje aplikacije (na primer .csv).

Obstajajo številni okviri, toda 3 najpogosteje uporabljeni okviri Selenium so:



O teh okvirih bomo razpravljali z predstavitvijo v tem blogu. Toda preden nadaljujem, naj vam povem, zakaj mora biti vzpostavljen okvir Selenium in kakšne koristi boste imeli od njihove uporabe.

Zakaj potrebujemo okvir selena?

Brez vzpostavljenega okvira bo en testni primer, ki bo obsegal celotno testno funkcionalnost. Strašljivo je, da lahko ta en sam testni primer dvigne do milijon vrstic kode. Tako očitno je, da bo tako velik test težko brati. Tudi če želite pozneje spremeniti katero koli funkcionalnost, boste težko spremenili kodo.

Ker bo izvajanje okvira povzročilo manjše, vendar več kosov kosov, obstajajo različne prednosti.



Prednosti okvira selena

  • Povečana ponovna uporaba kode
  • Izboljšana berljivost kode
  • Večja prenosljivost
  • Zmanjšana skriptavzdrževanje

Zdaj, ko poznate osnove okvirov, naj podrobneje razložim vsakega od njih.

Data Driven Framework

Okvir, ki temelji na podatkih, v seleniju je tehnika ločevanja 'podatkovnega niza' od dejanskega 'testnega primera' (koda). Ta okvir je popolnoma odvisen od vhodnih testnih podatkov. Preskusni podatki se napajajo iz zunanjih virov, kot je datoteka excel, datoteka CSV ali katera koli druga baza podatkov.

podatkovni okvir - okvir selena - edureka

Ker je testni primer ločen od nabora podatkov, lahko enostavno spremenimo testni primer določene funkcionalnosti, ne da bi spremenili kodo. Če želite na primer spremeniti kodo za prijavo, lahko spremenite samo to, namesto da bi morali v isti kodi spremeniti tudi kateri koli drugi odvisni del.

Poleg tega lahko tudi enostavno nadzirate, koliko podatkov je treba preizkusiti. Število testnih parametrov lahko enostavno povečate tako, da v datoteko excel (ali druge vire) dodate več polj za uporabniško ime in geslo.

Če moram na primer preveriti prijavo na spletno stran, lahko nabor poverilnic za uporabniško ime in geslo obdržim v datoteki excel in jih posredujem kodi za avtomatizacijo brskalnika v ločeni datoteki razreda Java.

Uporaba Apache POI s selenium WebDriver

WebDriver ne podpira neposredno branja datotek excel. Zato uporabljamo Apache POI za branje / pisanje v kateri koli Microsoftov pisarniški dokument. Z Apache POI (nabor datotek JAR) lahko prenesete iz tukaj . Prenesite datoteko zip ali tar v skladu z vašo zahtevo in ju postavite skupaj z naborom selenium JAR-jev.

Za usklajevanje glavne kode in nabora podatkov bo poskrbel Ponudniki podatkov TestNG, ki je knjižnica, ki je del datotek Apache POI JAR. Za predstavitev sem ustvaril datoteko excel z imenom »LoginCredentials«, v kateri so bila uporabniška imena in gesla shranjena v različnih stolpcih.

Oglejte si spodnjo kodo, da boste razumeli testni primer. To je preprosta koda za preizkušanje prijavne funkcionalnosti aplikacije za rezervacijo leta.

paket DataDriven import org.openqa.selenium.By import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.AfterMethod import org.testng.annotations.DataProvider import org.testng.annotations.Test javni razred DDTExcel {gonilnik ChromeDriver @Test (dataProvider = 'testdata') public void DemoProject (uporabniško ime niza, geslo niza) vrže InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') nov ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (uporabniško ime) driver.findElement (By.name ('geslo') )). sendKeys (geslo) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). match ('Find a Flight: Mercury Tours: '),' Neveljavne poverilnice ') System.out.println (' Prijava uspešna ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') javni objekt [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int vrstice = config.getRowCount (0) Objekt [] [] poverilnice = nov objekt [vrstice] [2] za (int i = 0i

Če ste opazili od zgoraj, imamo metodo z imenom 'TestDataFeed ()'. V tej metodi sem ustvaril primerek predmeta drugega razreda z imenom »ReadExcelFile«. Med instantacijo tega predmeta sem vnesel pot svoje datoteke excel, ki vsebuje podatke. Nadalje sem določil zanko for za pridobivanje besedila iz delovnega zvezka excel.

Toda za branje podatkov z dane številke lista, številke stolpca in številke vrstice se pokliče razred »ReadExcelFile«. Koda mojega »ReadExcelFile« je spodaj.

paket DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook javni razred ReadExcelFile {XSSFFFSHFSFFSFFSWFxEFSWFxEFSFFSWFxSFFSWFxEFSFFWEXFFSWFXFSFSFFWEXFSFFWEXFF excelPath) {poskusite {File src = nova datoteka (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} catch (Exception e) {System.out.println (e.getMessage ())}} public String getData (int sheetnumber, int row, int column) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (row) .getCell (column) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int vrstica = wb.getSheetAt (sheetIndex) .getLastRowNum () vrstica = vrstica + 1 povratna vrstica}}

Najprej si oglejte knjižnice, ki sem jih uvozila. Uvozila sem Apache POI XSSF knjižnice, ki se uporabljajo za branje / pisanje podatkov v datoteke excel. Tu sem ustvaril konstruktor (objekt iste metode) za posredovanje vrednosti: številka lista, številka vrstice in številka stolpca. Da bi bolje razumeli ta okvir, vas prosim, da si ogledate spodnji video, kjer sem to strukturirano razložil.

Podatkovni okvir v programu Selenium WebDriver | Vadnica za selen

Zdaj pa pojdimo na ogrodje, tj. Ogrodje, ki ga poganjajo ključne besede.

Okvir na podlagi ključnih besed

Okvir, ki temelji na ključnih besedah, je tehnika, pri kateri so vse operacije in navodila, ki jih je treba izvesti, napisani ločeno od dejanskega testnega primera. Podobnost z ogrodjem Data Driven je v tem, da se operacije, ki jih je treba izvesti, spet shranijo v zunanjo datoteko, kot je Excelov list.

Operacije, o katerih govorim, niso nič drugega kot metode, ki jih je treba izvesti kot del testnega primera. Prednost ogrodja, ki ga poganjajo ključne besede, je, da lahko enostavno nadzirate funkcionalnosti, ki jih želite preizkusiti. V datoteki excel lahko določite metode, ki preizkušajo funkcionalnost aplikacije. Tako bodo preizkušena samo tista imena metod, ki so navedena v Excelu.

Na primer, za prijavo v spletno aplikacijo lahko v glavni testni primer napišemo več metod, v katerih bo vsak testni primer preizkusil določeno funkcionalnost. Za instanciranje gonilnika brskalnika bi lahko obstajala ena metoda, za iskanje polj uporabniškega imena in gesla bi lahko obstajali načini, za navigacijo do spletne strani bi lahko obstajala druga metoda itd.

razlika med metom in meti v javi

Oglejte si spodnjo kodo, da boste razumeli, kako izgleda ogrodje. Vrstice, ki so opisane v spodnji kodi, so razlaga, če ne razumete.

paket KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.By import org.openqa.selenium.WebDriver javni razred Dejanja {javni statični gonilnik WebDriver javna statična praznina openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigate () {driver .manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} public static void input_Username () {driver.findElement (By.name (' userName ')). sendKeys (' mercury ')} public static void input_Password () {driver.findElement (By.name (' password ')). sendKeys (' mercury ')} public static void click_Login () {driver.findElement (By.name ('prijava')). Click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} javna statična void closeBrowser () {driver.quit ()}}

Kot lahko vidite, so različne funkcije, ki jih je treba preizkusiti, prisotne v ločenih metodah, ki čakajo na klic. Zdaj bodo te metode poklicane iz drugega razreda na podlagi prisotnosti imena metode v datoteki excel. In podobno sem za branje datoteke excel in pošiljanje rezultatov napisal še en razred. Oba sta prikazana spodaj.

Datoteka razreda, ki prikliče metode, je to.

paket KeywordDriven javni razred DriverScript {public static void main (String [] args) vrže izjemo {// Deklariranje poti datoteke Excel z imenom datoteke Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Tukaj predajamo pot Excel in SheetName kot argumenta za povezavo z Excelovo datoteko ReadExcelData.setExcelFile (sPath, 'Sheet1') // Za Excel vrstice in stolpci se zaenkrat uporabljajo trdo kodirane vrednosti // Za vrstico Excel & za zdaj stolpci // V poznejših poglavjih bomo te trdo kodirane vrednosti nadomestili z različicami // To je zanka za branje vrednosti stolpca 3 (Action Keyword) vrstica za vrstico za (int iRow = 1iRow<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } } 

Datoteka razreda, ki bere vrednosti Excela, je to.

paket KeywordDriven import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCel javni razred ReadExcel javni razred ReadExcel javni razred ReadExcel XSSFSheet ExcelWSheet private static XSSFWorkbook ExcelWBook private static XSSFCell Cell // Ta metoda je nastaviti pot do datoteke in odpreti datoteko Excel // Pass Excel Path in SheetName kot argumenti tej metodi vrže javno statično praznino setExcelFile (String Path, String SheetName) Izjema {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Ta metoda je branje testnih podatkov iz celice Excel // V tem podajamo parametre / argumente kot vrstico Num in Col Num javni statični niz getCellData (int RowNum, int ColNum) vrže izjemo {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Zdaj pa pojdimo na zadnji del tega bloka Selenium framework, kjer vam bom pokazal, kako zgraditi hibridni okvir.

Hibridni okvir

Hibridni okvir je tehnika, pri kateri lahko najbolje uporabimo ogrodje (-e), ki temeljijo na podatkih in na ključnih besedah. Z zgoraj prikazanimi primeri v tem blogu lahko zgradimo hibridni okvir tako, da shranimo metode za izvajanje v datoteko excel (pristop, ki temelji na ključnih besedah) in ta imena metod posredujemo Java Reflection Class (pristop, ki temelji na podatkih), namesto da bi ustvaril Če potem zanka v razredu 'DriverScript'.

Oglejte si spremenjeni razred »DriverScript« v spodnjem delčku kode.Tu se namesto uporabe več zank If / Else uporablja pristop, ki temelji na podatkih, za branje imen metod iz datoteke excel.

paket HybridFramework uvoz java.lang.reflect.Method javni razred DriverScriptJava {// To je predmet razreda, razglašen kot 'javni statični' // Tako, da ga lahko uporabimo zunaj obsega metode main [] public static Actions actionKeywords public static String sActions // To je objekt razreda odseva, razglašen za 'javni statični' // Tako, da ga lahko uporabimo zunaj obsega metode main [] public static method Method [] public static void main (String [] args) vrže izjemo {// Deklariranje poti datoteke Excel z imenom datoteke Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Tu posredujemo pot Excel in SheetName za povezavo z datoteko Excel // Ta metoda je bil prej ustvarjen ReadExcelData.setExcelFile (sPath, 'Sheet1') // Za Excel in vrstice & stolpce se za zdaj uporabljajo trdo kodirane vrednosti // Kasneje bomo te trdo kodirane vrednosti uporabljali veliko bolj učinkovito // To je zanka za branje vrednosti vrstice stolpca (Action Keyword) by row // To pomeni, da bo ta zanka izvedla vse korake, omenjene za testni primer v listu Test Steps for (int iRow = 1iRow<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0i

Da bi bolje razumeli ta koncept podatkovnih pogonov, ključnih besed in hibridnega pogona, vas prosim, da si ogledate spodnji video.

Selenium Framework z uporabo Java | Vadnica za selen | Spletno usposabljanje za selen

Upam, da vam je bil ta blog koristen in da ste jasno razumeli, kaj je okvir Selenium, kako koristen je in kako zgraditi strukturo kode s pomočjo teh 3 okvirjev Selenium. Spremljajte več blogov v tej seriji.

Če se želite naučiti selena in si ustvariti kariero na testni domeni, si oglejte naš interaktivni splet v živo Tukaj je na voljo podpora 24 * 7, ki vas vodi skozi celotno obdobje učenja. Koncepti, povezani z 'Selenijskim ogrodjem', poglobljeno pokrivajo Edurekin tečaj.

Imate vprašanje za nas? Prosimo, omenite to v oddelku za komentarje in se vam bomo javili.