Izgradnja okvira za upravljanje podacima, ključnim riječima i hibridnim selenom



Ovaj blog objašnjava što je okvir Selenium, njegove prednosti i kako implementirati Data Driven, Keyword Driven & Hybrid okvire u selen.

Prethodni u ovoj su vam seriji izložili osnovnim pojmovima u testiranju selena.Međutim, na ovom blogu ću vam reći kako koristiti okvir Selenium za optimizaciju strukture koda i to će vas približiti i postati .

Što je okvir selena?

Selenium framework je struktura koda za pojednostavljivanje održavanja koda i bolju čitljivost koda. Okvir uključuje razbijanje cijelog koda na manje dijelove koda, koji testiraju određenu funkcionalnost.





Kôd je strukturiran tako da je 'skup podataka' odvojen od stvarnog 'test slučaja' koji će testirati funkcionalnost web aplikacije. Također se može strukturirati na način da se test slučajevi koje treba izvršiti pozivaju (pozivaju) iz vanjske aplikacije (poput .csv).

Postoji niz okvira, ali 3 najčešće korištena okvira Selenium su:



O ovim će se okvirima razgovarati s demonstracijom na ovom blogu. Ali prije nego što nastavim dalje, dopustite mi da vam kažem zašto okvir Selenium mora biti postavljen i koje ćete koristi imati od njihovog korištenja.

Zašto nam treba okvir selena?

Bez postavljenog okvira, postojat će jedan test koji će obuhvaćati cjelokupnu testnu funkcionalnost. Zastrašujuće je to što ovaj pojedinačni testni slučaj može povećati do milijun redaka koda. Stoga je prilično očito da će tako težak test biti teško pročitati. Čak i ako kasnije želite izmijeniti bilo koju funkcionalnost, imat ćete poteškoće s izmjenom koda.

Budući da će implementacija okvira rezultirati manjim, ali višestrukim dijelovima koda, postoje razne prednosti.



Prednosti selenovog okvira

  • Povećana ponovna upotreba koda
  • Poboljšana čitljivost koda
  • Veća prenosivost
  • Smanjena skriptaodržavanje

Sad kad znate osnove okvira, dopustite mi da detaljno objasnim svaki od njih.

Okvir vođen podacima

Data Driven framework u Seleniju je tehnika razdvajanja 'skupa podataka' od stvarnog 'test slučaja' (koda). Ovaj okvir u potpunosti ovisi o ulaznim podacima o ispitivanju. Podaci o testiranju dostavljaju se iz vanjskih izvora kao što su excel datoteka, .CSV datoteka ili bilo koja baza podataka.

podatkovni okvir - okvir selena - edureka

Budući da je testni slučaj odvojen od skupa podataka, lako možemo izmijeniti testni slučaj određene funkcije bez velikih promjena u vašem kodu. Na primjer, ako želite izmijeniti kôd za funkcionalnost prijave, tada možete izmijeniti upravo to, umjesto da morate izmijeniti bilo koji drugi ovisni dio u istom kodu.

Osim toga, također možete lako kontrolirati koliko podataka treba testirati. Možete jednostavno povećati broj testnih parametara dodavanjem dodatnih polja za korisničko ime i lozinku u excel datoteku (ili druge izvore).

Na primjer, ako moram provjeriti prijavu na web stranicu, tada mogu zadržati niz vjerodajnica za korisničko ime i lozinku u excel datoteci i proslijediti ih u kod kako bih izvršio automatizaciju u pregledniku u zasebnoj datoteci Java klase.

Korištenje Apache POI sa Selenium WebDriver

WebDriver ne podržava izravno čitanje excel datoteka. Stoga koristimo Apache POI za čitanje / pisanje u bilo koji Microsoftov uredski dokument. Možete preuzeti Apache POI (skup JAR datoteka) sa ovdje . Preuzmite zip datoteku ili tar datoteku prema vašim zahtjevima i stavite ih zajedno s kompletom selenium JAR-ova.

Pobrinut će se koordinacija između glavnog koda i skupa podataka Davatelji podataka TestNG, koja je knjižnica koja dolazi kao dio datoteka Apache POI JAR. U demo svrhu stvorio sam excel datoteku nazvanu 'LoginCredentials' u kojoj su korisnička imena i lozinke pohranjeni u različite stupce.

Pogledajte donji kod da biste razumjeli test slučaj. To je jednostavan kôd za testiranje funkcionalnosti prijave aplikacije za rezervaciju 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 javna klasa DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') public void DemoProject (korisničko ime niza, lozinka niza) baca InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') novi ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (korisničko ime) driver.findElement (By.name ('lozinka') )). sendKeys (lozinka) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). matches ('Pronađi let: Mercury Tours: '),' Nevažeće vjerodajnice ') System.out.println (' Prijava uspješna ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') javni objekt [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int redovi = config.getRowCount (0) Objekt [] [] vjerodajnice = novi objekt [redovi] [2] za (int i = 0i

Ako ste primijetili odozgo, imamo metodu nazvanu 'TestDataFeed ()'. Ovom metodom stvorio sam objektnu instancu druge klase nazvane “ReadExcelFile”. Tijekom instanciranja ovog objekta ubacio sam put moje excel datoteke koja sadrži podatke. Dalje sam definirao for petlju za dohvaćanje teksta iz excelove radne knjige.

Ali, za čitanje podataka s određenog broja lista, broja stupca i broja retka, pozivi se upućuju u klasu 'ReadExcelFile'. Kôd mog 'ReadExcelFile' je ispod.

paket DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook javna klasa ReadExcelFile {XSSFFSFFSHFSFFSFFSFFSFFSWFxSFFSWFxSFFSFFSFFSWFXFSFFSFFSFFSFFSFSFFSFFSFSFFSFFSKFLSFFSFFSKFLSFFSFFSFFSKFLSFFSFFSKFLSFFSKFLSFFSFFSFFSKFSFFSFFSFFFSFFSWFSFFSFFWORK excelPath) {try {File src = new File (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 redak = wb.getSheetAt (sheetIndex) .getLastRowNum () redak = red + 1 povratni redak}}

Prvo zabilježite knjižnice koje sam uvezao. Ja sam uvezao Apache POI XSSF knjižnice koje se koriste za čitanje / pisanje podataka u excel datoteke. Ovdje sam stvorio konstruktor (objekt iste metode) za prosljeđivanje vrijednosti: broja lista, broja retka i broja stupca. Da bih bolje razumio ovaj okvir, molim vas da prođete kroz video u nastavku, gdje sam to strukturirano objasnio.

Okvir podataka upravljan podacima u programu Selenium WebDriver | Vodič za selen

Sada prijeđimo na okvir, tj. Okvir vođen ključnim riječima.

Okvir vođen ključnim riječima

Okvir kojim se upravlja ključnim riječima tehnika je u kojoj se sve radnje i upute koje treba izvršiti pišu odvojeno od stvarnog primjera. Sličnost koju ima s Data Driven framework-om je u tome što se operacije koje treba izvesti ponovno spremaju u vanjsku datoteku poput Excel lista.

Operacije o kojima govorim nisu ništa drugo nego metode koje treba izvršiti kao dio testnog slučaja. Prednost okvira vođenog ključnim riječima je ta što lako možete kontrolirati funkcionalnosti koje želite testirati. U datoteci excel možete odrediti metode kojima se testira funkcionalnost aplikacije. Dakle, testirat će se samo oni nazivi metoda koji su navedeni u excelu.

Na primjer, za prijavu u web aplikaciju možemo napisati više metoda u glavni testni slučaj, u kojem će svaki testni slučaj testirati određenu funkcionalnost. Za instanciranje upravljačkog programa preglednika može postojati jedna metoda, za pronalazak polja korisničkog imena i lozinke mogu biti metode, za navigaciju do web stranice može postojati druga metoda itd.

Pogledajte donji kod za razumijevanje izgleda okvira. Redci koji su komentirani u donjem kodu služe kao objašnjenje ako ne razumijete.

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 akcije javne klase {javni statički upravljački program WebDriver javna statička praznina openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigate () {driver .manage (). timeouts (). implicitnoPričekajte (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} javna statička praznina input_Username () {driver.findElement (By.name (' userName ')). sendKeys (' mercury ')} javna statička praznina input_Password () {driver.findElement (By.name (' lozinka ')). sendKeys (' mercury ')} javna statička praznina click_Login () {driver.findElement (By.name ('login')). ​​Click ()} @Test javna statička praznina verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Pronađi let: Mercury Tours : ')} javna statička void closeBrowser () {driver.quit ()}}

Kao što vidite, različite funkcionalnosti koje treba testirati prisutne su u odvojenim metodama koje čekaju poziv. Sada će se ove metode pozivati ​​iz druge klase, na temelju prisutnosti imena metode u excel datoteci. Slično tome, da bih pročitao excel datoteku i poslao rezultate, napisao sam još jedan razred. Oboje su prikazani u nastavku.

Datoteka klase koja poziva metode, je ovo.

paket KeywordDriven javna klasa DriverScript {public static void main (String [] args) baca iznimku {// Deklariranje puta Excel datoteke imenom Excel datoteke String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // ovdje prosljeđujemo Excel stazu i SheetName kao argumente za povezivanje s Excel datotekom ReadExcelData.setExcelFile (sPath, 'Sheet1') // Za sada se u Excel retku i stupcu koriste tvrdo kodirane vrijednosti // Za Excel redak koriste se tvrdo kodirane vrijednosti stupci za sada // U kasnijim poglavljima zamijenit ćemo ove teško kodirane vrijednosti varijablama // Ovo je petlja za čitanje vrijednosti stupca 3 (Akcija ključne riječi) red po red 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() } } } } 

A datoteka klase koja čita vrijednosti Excela je ovo.

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 public class ReadExcel public class ReadAxell XSSFSheet ExcelWSheet private static XSSFWorkbook ExcelWBook private static XSSFCell Cell // Ova metoda treba postaviti put datoteke i otvoriti Excel datoteku // Proslijediti Excel Path i SheetName kao argumente ovoj metodi javna statička praznina setExcelFile (String Path, String SheetName) baca Iznimka {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Ova metoda služi za čitanje podataka o testiranju iz Excelove ćelije // U tome prenosimo parametre / argumente kao javni redak Num i Col Num javni statički niz getCellData (int RowNum, int ColNum) baca izuzetak {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Sada, prijeđimo na završni dio ovog bloga Selenium framework-a, gdje ću vam pokazati kako izgraditi hibridni framework.

Hibridni okvir

Hibridni okvir je tehnika u kojoj možemo najbolje iskoristiti i podatkovno vođeni i selektivni okvir (i) vođeni ključnim riječima. Koristeći gore prikazane primjere na ovom blogu, možemo izgraditi hibridni okvir spremanjem metoda za izvršavanje u excel datoteku (pristup vođen ključnim riječima) i prosljeđivanjem tih imena metodama Java Reflection Class (pristup vođen podacima) umjesto stvaranja Ako / inače petlja u klasi 'DriverScript'.

ec2 stvoriti instancu iz snimke

Pogledajte modificiranu klasu 'DriverScript' u donjem isječku koda.Ovdje se umjesto korištenja višestrukih petlji If / Else koristi pristup vođen podacima za čitanje imena metoda iz excel datoteke.

paket HybridFramework uvoz java.lang.reflect.Method javna klasa DriverScriptJava {// Ovo je objekt klase, deklariran kao 'javna statička' // Tako da se može koristiti izvan opsega glavne [] metode public static Actions actionKeywords public static String sActions // Ovo je objekt klase refleksije, deklariran kao 'public static' // Tako da se može koristiti izvan opsega glavne [] metode public static method method [] public static void main (String [] args) baca iznimku {// Deklariranje putanje datoteke Excel imenom Excel datoteke String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Ovdje prenosimo Excel put i SheetName za povezivanje s datotekom Excel // Ova metoda je stvoren ranije ReadExcelData.setExcelFile (sPath, 'Sheet1') // Za sada se koriste Excel-ovi redovi i stupci tvrdo kodirane vrijednosti // Kasnije ćemo ove tvrdo kodirane vrijednosti koristiti mnogo učinkovitije // Ovo je petlja za čitanje vrijednosti retka stupca (Action Keyword) by row // To znači da će ova petlja izvršiti sve korake spomenute za testni slučaj u listu Test Steps za (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 bih bolje razumio ovaj koncept upravljanih podacima, ključnih riječi i hibridnih pogona, tražim da pogledate video u nastavku.

Selenium Framework pomoću Jave | Vodič za selen | Online trening za selen

Nadam se da vam je ovaj blog bio koristan i da ste vam jasno razumjeli što je okvir Selenium, kako je koristan i kako izgraditi strukturu koda pomoću ova 3 okvira Selenium. Pratite još blogova u ovoj seriji.

Ako želite naučiti selenij i izgraditi karijeru u domeni testiranja, pogledajte našu interaktivnu mrežu uživo ovdje dolazi s podrškom 24 * 7 koja će vas voditi kroz čitavo razdoblje učenja. Koncepti povezani s 'Selenijskim okvirom' imaju duboko pokrivanje u Edurekinom tečaju.

Imate pitanje za nas? Molimo spomenite to u odjeljku za komentare i javit ćemo vam se.