Ang nakaraan sa seryeng ito ay binigyan ka ng pagkakalantad sa mga pangunahing konsepto sa pagsubok sa Selenium.Gayunpaman, sa blog na ito, sasabihin ko sa iyo kung paano gamitin ang isang balangkas ng Selenium upang ma-optimize ang iyong istraktura ng code at papalapitin ka nito upang maging isang .
Ano ang isang balangkas ng Selenium?
Ang balangkas ng siliniyum ay isang istraktura ng code para sa gawing mas simple ang pagpapanatili ng code, at mas madaling mabasa ang code. Ang isang balangkas ay nagsasangkot ng pagsira sa buong code sa mas maliit na mga piraso ng code, na sumusubok sa isang partikular na pagpapaandar.
Ang code ay nakaayos tulad nito, ang 'hanay ng data' ay pinaghiwalay mula sa aktwal na 'pagsubok na kaso' na susubukan ang pag-andar ng web application. Maaari din itong mabuo sa isang paraan kung saan, ang mga kaso ng pagsubok na kailangang ipatupad ay tinatawag na (invoking) mula sa isang panlabas na aplikasyon (tulad ng isang .csv).
Mayroong isang bilang ng mga balangkas doon, ngunit 3 (mga) karaniwang ginagamit na Selenium framework ay:
Tatalakayin ang mga balangkas na ito sa isang demo sa blog na ito. Ngunit bago magpatuloy, hayaan mo akong sabihin sa iyo kung bakit kailangang magkaroon ng isang balangkas ng Selenium, at kung anong mga benepisyo ang makukuha mo sa paggamit ng mga ito.
Bakit kailangan natin ng isang balangkas ng Selenium?
Nang walang isang balangkas sa lugar, magkakaroon ng isang kaso ng pagsubok na kung saan ay kasama ang buong pagpapaandar ng pagsubok. Ang nakakatakot na bahagi ay, ang solong kaso ng pagsubok na ito ay may kakayahang umangat hanggang sa isang milyong mga linya ng code. Kaya't halata na ang isang pagsubok na kaso na napakalaki ay matigas basahin. Kahit na nais mong baguhin ang anumang pagpapaandar sa paglaon, magkakaroon ka ng isang matigas na oras sa pagbabago ng code.
Dahil ang pagpapatupad ng isang balangkas, ay magreresulta sa mas maliit ngunit maraming mga piraso ng code, mayroong iba't ibang mga benepisyo.
Mga Pakinabang ng balangkas ng Selenium
- Tumaas na muling paggamit ng code
- Pinabuting kakayahang mabasa ang code
- Mas mataas na kakayahang dalhin
- Nabawasan ang iskrippagpapanatili
Ngayong alam mo na ang mga pangunahing kaalaman sa mga balangkas, hayaan mo akong ipaliwanag nang detalyado ang bawat isa sa kanila.
pagkakaiba sa pagitan ng labis na pag-load at pag-override sa c ++
Framework na Hinihimok ng Data
Ang isang balangkas ng Data Driven sa Selenium ay ang pamamaraan ng paghihiwalay ng 'hanay ng data' mula sa aktwal na 'pagsubok na kaso' (code). Ang balangkas na ito ay ganap na nakasalalay sa data ng pagsubok ng pag-input. Ang data ng pagsubok ay pinakain mula sa mga panlabas na mapagkukunan tulad ng isang excel file, .CSV file o anumang database.
Dahil ang kaso ng pagsubok ay pinaghiwalay mula sa hanay ng data, madali naming mababago ang kaso ng pagsubok ng isang partikular na pag-andar nang hindi gumagawa ng mga maramihang pagbabago sa iyong code. Halimbawa, kung nais mong baguhin ang code para sa pag-andar sa pag-login, maaari mo itong baguhin kahit na sa halip na baguhin din ang anumang iba pang umaasa na bahagi sa parehong code.
Bukod dito, madali mo ring makokontrol kung gaano karaming data ang kailangang subukin. Madali mong madaragdagan ang bilang ng mga parameter ng pagsubok sa pamamagitan ng pagdaragdag ng higit pang mga patlang ng username at password sa excel file (o iba pang mga mapagkukunan).
Halimbawa, kung kailangan kong suriin ang pag-login sa isang web page, maaari kong panatilihin ang hanay ng mga kredensyal ng username at password sa isang excel file at ipasa ang mga kredensyal sa code upang maisagawa ang awtomatiko sa browser sa isang hiwalay na file ng klase ng Java.
Paggamit ng Apache POI Sa Selenium WebDriver
Hindi direktang sinusuportahan ng WebDriver ang pagbabasa ng mga excel file. Samakatuwid ginagamit namin Apache POI para sa pagbabasa / pagsusulat sa anumang dokumento ng tanggapan ng Microsoft. Maaari mong i-download ang Apache POI (hanay ng mga JAR file) mula sa dito . I-download ang zip file o tar file ayon sa iyong kinakailangan at ilagay ang mga ito kasama ang hanay ng mga Selenium JAR.
Ang koordinasyon sa pagitan ng pangunahing code at hanay ng data ay aalagaan Mga Nagbibigay ng Data ng TestNG, na isang silid-aklatan na dumarating bilang isang bahagi ng mga file ng Apache POI JAR. Para sa layunin ng demo, lumikha ako ng isang excel file na tinatawag na 'LoginCredentials' kung saan nakaimbak ang mga username at password sa iba't ibang mga haligi.
Tingnan ang code sa ibaba upang maunawaan ang kaso ng pagsubok. Ito ay isang simpleng code para sa pagsubok sa pag-andar ng pag-login ng isang application ng flight booking.
package DataDriven import org.openqa.selenium. Sa pamamagitan ng pag-import ng org.openqa.selenium.chrome.ChromeDriver import org.testng. Assert import org.testng.annotations. AfterMethod import org.testng.annotations. DataProvider import org.testng.annotations.Test pampublikong klase DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') public void DemoProject (String username, String password) throws InterruptException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = bagong ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (username) driver.findElement (By.name ('password' )). sendKeys (password) driver.findElement (By.name ('login')). click () Thread.s Sleep (5000) Assert.assertTrue (driver.getTitle (). mga tugma ('Maghanap ng isang Flight: Mercury Tours: '),' Di-wastong mga kredensyal ') System.out.println (' Matagumpay ang pag-login ')} @AfterMethod walang bisa ProgramTermination () {driver.quit ()} @DataProvider (pangalan =' testdata ') pampublikong Bagay [] [] TestDa taFeed () {ReadExcelFile config = bagong ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int row = config.getRowCount (0) Bagay [] [] mga kredensyal = bagong Bagay [mga hilera] [2] para sa (int i = 0iKung napansin mo mula sa itaas, mayroon kaming isang pamamaraan na pinangalanang 'TestDataFeed ()'. Sa pamamaraang ito, lumikha ako ng isang object na halimbawa ng isa pang klase na pinangalanang 'ReadExcelFile'. Habang sinisimulan ang bagay na ito, pinakain ko ang landas ng aking excel file na naglalaman ng data. Natukoy ko pa ang isang para sa loop upang makuha ang teksto mula sa excel workbook.
Ngunit, para sa pagbabasa ng data mula sa isang naibigay na numero ng sheet, numero ng haligi at numero ng hilera, ang mga tawag ay ginawa sa klase na 'ReadExcelFile'. Ang code ng aking 'ReadExcelFile' ay nasa ibaba.
package DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook public class ReadExcelFile {XSSFWorkbook wb XSSFSheet sheet public ReadExcelFile {XSSFWorkbook wb XSSFSheet sheet public ReadExcelFile {XSSFWorkbook wb XSSFSheet sheet publiko excelPath) {subukan ang {File src = bagong File (excelPath) FileInputStream fis = bagong FileInputStream (src) wb = bagong XSSFWorkbook (fis)} catch (Exception e) {System.out.println (e.getMessage ())}} publiko String getData (int sheetnumber, int row, int haligi) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (row) .getCell (haligi) .getStringCellValue () ibalik ang data} publiko int getRowCount (int sheetIndex) { int row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return row}}Tandaan muna ang mga aklatan na na-import ko. Nag-import na ako Apache POI XSSF mga aklatan na ginagamit upang basahin / isulat ang data upang magdagdag ng mga file. Dito, lumikha ako ng isang tagapagbuo (bagay ng parehong pamamaraan) upang maipasa ang mga halaga: numero ng sheet, numero ng hilera at numero ng haligi. Upang mas maintindihan ang balangkas na ito, hinihiling ko sa iyo na idaan ang nasa ibaba ng video, kung saan ipinaliwanag ko ito sa isang nakabalangkas na pamamaraan.
Framework na Hinimok ng Data Sa Selenium WebDriver | Selenium Tutorial
Ngayon, magpatuloy tayo sa balangkas, ibig sabihin, ang balangkas na Hinihimok ng Keyword.
Framework na Pinatakbo ng Keyword
Ang balangkas ng Keyword Driven ay isang pamamaraan kung saan ang lahat ng mga pagpapatakbo at tagubiling isasagawa ay isinulat nang hiwalay mula sa aktwal na kaso ng pagsubok. Ang pagkakapareho nito sa balangkas ng Data Driven ay iyon, ang mga pagpapatakbo na isasagawa ay naimbak muli sa isang panlabas na file tulad ng sheet ng Excel.
Ang mga pagpapatakbo na pinag-uusapan ko ay walang iba kundi ang mga pamamaraan na kailangang ipatupad bilang bahagi ng isang kaso ng pagsubok. Ang benepisyo sa balangkas ng Keyword Driven ay madali mong makontrol ang mga pagpapaandar na nais mong subukan. Maaari mong tukuyin ang mga pamamaraan na susubukan ang pagpapaandar ng application sa excel file. Samakatuwid, ang mga pangalan ng pamamaraan lamang na tinukoy sa excel ang susubukan.
Halimbawa, para sa pag-log in sa web application, maaari kaming magsulat ng maraming pamamaraan sa pangunahing kaso ng pagsubok, kung saan susubukan ng bawat kaso ng pagsubok ang ilang pag-andar. Para sa instantiating ng driver ng browser ay maaaring may isang paraan, para sa paghahanap ng mga patlang ng username at password, maaaring may mga pamamaraan, para sa pag-navigate sa isang web page ay maaaring may ibang pamamaraan, atbp.
Tingnan ang code sa ibaba para sa pag-unawa sa hitsura ng balangkas. Ang mga linya na na-comment sa ibaba code ay nagsisilbing paliwanag kung hindi mo naiintindihan.
package KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng. Assert import org.testng.annotations. Subukan ang pag-import ng java.util.concurrent.TimeUnit import org.openqa.selenium. Sa pamamagitan ng pag-import ng org.openqa.selenium.WebDriver pampublikong klase ng Mga Pagkilos {public static WebDriver driver public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = bagong ChromeDriver ()} public static void navigate () {driver .manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} pampublikong static na walang bisa na 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 ('login')). Click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}Tulad ng nakikita mo, ang iba't ibang mga pag-andar na kung saan kailangang subukin ay naroroon sa magkakahiwalay na pamamaraan na naghihintay na tawagan. Ngayon, ang mga pamamaraang ito ay tatawagan mula sa isa pang Klase, batay sa pagkakaroon ng pangalan ng pamamaraan sa excel file. At katulad nito, upang mabasa ang excel file, at maibalik ang mga resulta, nagsulat ako ng isa pang Klase. Pareho sa kanila ang ipinapakita sa ibaba.
Ang klase ng file na gumagamit ng mga pamamaraan, ito ba.
package KeywordDriven public class DriverScript {public static void main (String [] args) throws Exception {// Declaring the path of the Excel file with the name of the Excel file String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Here dumadaan kami sa path ng Excel at SheetName bilang mga argumento upang kumonekta sa Excel file ReadExcelData.setExcelFile (sPath, 'Sheet1') // Ginagamit ang mga mahihirap na naka-code na halaga para sa mga hilera at haligi ng Excel sa ngayon // Ginagamit ang mga mahihirap na naka-code na halaga para sa hilera ng Excel & mga haligi para sa ngayon // Sa mga susunod na kabanata papalitan namin ang mga hard coded na halaga na may varibales // Ito ang loop para sa pagbabasa ng mga halaga ng haligi 3 (Action Keyword) na sunod-sunod para sa (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() } } } }At ang file ng klase na binabasa ang mga halagang Excel ay ito.
package 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.XSSFCell public class ReadExcelData {private statem XSSFSheet ExcelWSheet pribadong static XSSFWorkbook ExcelWBook pribadong static XSSFCell Cell // Ang pamamaraang ito ay upang itakda ang Path path at upang buksan ang file ng Excel // Pass Excel Path at SheetName bilang Mga Argumento sa pamamaraang ito ng publiko static void setExcelFile (String Path, String SheetName) throws Exception {FileInputStream ExcelFile = bagong FileInputStream (Path) ExcelWBook = bagong XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Ang pamamaraang ito ay upang basahin ang data ng pagsubok mula sa cell ng Excel // Sa pagpasa namin ng mga parameter / argumento tulad ng Row Num at Col Num na pampublikong static na String getCellData (int RowNum, int ColNum) ay nagtatapon ng Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () ibalik ang CellData}}Ngayon, lumipat tayo sa huling bahagi ng Selenium framework blog na ito, kung saan ipapakita ko sa iyo kung paano bumuo ng isang Hybrid framework.
hatiin ng string ng java ang maraming mga delimiterBalangkas ng hybrid
Ang hybrid framework ay isang diskarte kung saan maaari naming masulit ang parehong paggamit ng Data Driven & Keyword Driven Selenium framework (s). Gamit ang mga halimbawang ipinakita sa itaas sa blog na ito, makakabuo kami ng isang Hybrid framework sa pamamagitan ng pag-iimbak ng mga pamamaraan upang maipatupad sa isang excel file (diskarteng hinihimok ng keyword) at maipapasa ang mga pangalan ng pamamaraan sa Klase ng Reflection ng Java (diskarte na hinihimok ng data) sa halip na lumikha ng isang Kung hindi loop sa klase ng 'DriverScript'.
Tingnan ang binagong klase ng 'DriverScript' sa ibaba ng code na snippet.Dito, sa halip na gumamit ng maraming Kung / Iba pang mga loop, ang diskarteng hinihimok ng data ay ginagamit upang basahin ang mga pangalan ng pamamaraan mula sa excel file.
package HybridFramework import java.lang.reflect.Method public class DriverScriptJava {// Ito ay isang klase ng object, idineklarang 'public static' // Kaya't maaari itong magamit sa labas ng saklaw ng pangunahing [] pamamaraang publiko static na Mga aksyon na aksyonKeywords public static String sActions // Ito ay object ng repleksyon ng klase, na idineklarang 'public static' // Kaya't maaari itong magamit sa labas ng saklaw ng pangunahing [] pamamaraang pampubliko na pamamaraan ng Pamamaraan [] pampubliko na static na walang bisa (String [] args) ay nagtatapon ng Exception {// Pagdeklara ng landas ng file na Excel na may pangalan ng file na Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Narito ipinapasa namin ang path ng Excel at SheetName upang kumonekta sa Excel file // Ang pamamaraang ito ay nilikha dati ng ReadExcelData.setExcelFile (sPath, 'Sheet1') // Ang mga mahihirap na naka-code na halaga ay ginagamit para sa hilera at mga haligi ng Excel sa ngayon // Sa paglaon, gagamitin namin ang halagang masusukat na naka-code na ito nang mas mahusay // Ito ang loop para sa pagbabasa ang mga halaga ng hilera ng haligi (Action Keyword) sa pamamagitan ng row // Nangangahulugan ito na ang loop na ito ay isasagawa ang lahat ng mga hakbang na nabanggit para sa kaso ng pagsubok sa sheet ng Mga Hakbang sa Pagsubok para sa (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 = 0iUpang maunawaan ang konseptong ito ng Mga framework na hinimok ng Data, Drive ng Keyword at Hybrid Driven nang mas mahusay, hinihiling ko sa iyo na panoorin ang video sa ibaba.
Selenium Framework gamit ang Java | Selenium Tutorial | Selenium Training Online
Inaasahan kong ang blog na ito ay kapaki-pakinabang sa iyo at binigyan ka ng isang malinaw na pag-unawa sa kung ano ang isang balangkas ng Selenium, kung paano ito kapaki-pakinabang at kung paano mabuo ang iyong istraktura ng code gamit ang 3 mga balangkas na Selenium. Manatiling nakatutok sa maraming mga blog sa seryeng ito.
Kung nais mong malaman ang Selenium at bumuo ng isang karera sa domain ng pagsubok, pagkatapos suriin ang aming interactive, live-online dito, kasama yan ng 24 * 7 na suporta upang gabayan ka sa buong panahon ng iyong pag-aaral. Ang mga konseptong nauugnay sa 'Selenium Framework' ay may isang malalim na saklaw sa kurso ni Edureka.
May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento at babalikan ka namin.