Изграждане на рамка, управлявана от данни, управлявана от ключови думи и хибридна селен



Този блог обяснява какво представлява рамката на Selenium, нейните предимства и как да внедрите Data Driven, Keyword Driven & Hybrid рамки в селен.

Предишният в тази серия са ви запознати с основните концепции при тестване на селен.В този блог обаче ще ви кажа как да използвате рамка на Selenium, за да оптимизирате структурата на кода си и това ще ви приближи, за да станете .

Какво представлява рамката на селен?

Селеновата рамка е кодова структура за улесняване на поддръжката на кода и по-добра четливост на кода. Рамката включва разбиване на целия код на по-малки парчета код, които тестват определена функционалност.





Кодът е структуриран така, че „наборът от данни“ да е отделен от действителния „тестов случай“, който ще тества функционалността на уеб приложението. Той може също да бъде структуриран по начин, при който тестовите случаи, които трябва да бъдат изпълнени, се извикват (извикват) от външно приложение (като .csv).

Съществуват редица рамки, но 3 често използвани рамки селен са:



Тези рамки ще бъдат обсъдени с демонстрация в този блог. Но преди да продължа, позволете ми да ви кажа защо трябва да има рамка на Selenium и какви ползи ще имате от използването им.

Защо се нуждаем от рамка на Селен?

Без изградена рамка, ще има един тестов случай, който ще включва цялата функционалност на теста. Страшното е, че този единствен тестов случай има способността да издига до милион реда код. Така че е доста очевидно, че такъв огромен случай ще бъде труден за четене. Дори ако искате да промените някоя функционалност по-късно, тогава ще ви е трудно да промените кода.

Тъй като прилагането на рамка ще доведе до по-малки, но множество парчета код, има различни предимства.



Ползи от рамката на селен

  • Увеличено повторно използване на код
  • Подобрена четливост на кода
  • По-висока преносимост
  • Намален скриптподдръжка

След като вече знаете основите на рамките, позволете ми да обясня подробно всеки от тях.

Рамка за управление на данни

Управлявана от данни рамка в Selenium е техниката за отделяне на „набора от данни“ от действителния „тест“ (код). Тази рамка напълно зависи от входните тестови данни. Тестовите данни се подават от външни източници като Excel файл, .CSV файл или друга база данни.

управлявана от данни рамка - селенова рамка - edureka

Тъй като тестовият случай е отделен от набора от данни, можем лесно да модифицираме тестовия случай на определена функционалност, без да правим промени на едро във вашия код. Например, ако искате да модифицирате кода за функционалност за вход, можете да промените точно това, вместо да се налага да модифицирате и всяка друга зависима част в същия код.

Освен това можете лесно да контролирате колко данни трябва да бъдат тествани. Можете лесно да увеличите броя на тестовите параметри, като добавите повече полета за потребителско име и парола към файла на Excel (или други източници).

дълбоко срещу плитко копиране на Java

Например, ако трябва да проверя данните за вход в уеб страница, тогава мога да запазя набора от идентификационни данни за потребителско име и парола във файл на Excel и да предам идентификационните данни на кода, за да извърша автоматизация в браузъра в отделен файл на Java клас.

Използване на Apache POI със Selenium WebDriver

WebDriver не поддържа директно четене на Excel файлове. Следователно използваме Apache POI за четене / писане във всеки офис документ на Microsoft. Можете да изтеглите Apache POI (набор от JAR файлове) от тук . Изтеглете zip файла или tar файла според вашите изисквания и ги поставете заедно с набора от JAR за селен.

За координацията между основния код и набора от данни ще се погрижи Доставчици на данни TestNG, която е библиотека, която идва като част от JAR файловете на Apache POI. За демонстрационни цели създадох файл на Excel, наречен „LoginCredentials“, в който потребителските имена и пароли са съхранени в различни колони.

Погледнете кода по-долу, за да разберете тестовия случай. Това е прост код за тестване на функционалността за влизане в приложение за резервация на полет.

пакет 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 публичен клас DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') public void DemoProject (String username, String password) хвърля InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') нов ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (потребителско име) driver.findElement (By.name ('парола') )). sendKeys (парола) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). match ('Find a Flight: Mercury Tours: '),' Невалидни идентификационни данни ') System.out.println (' Входът е успешен ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int редове = config.getRowCount (0) Обект [] [] идентификационни данни = нов обект [редове] [2] за (int i = 0i

Ако сте забелязали отгоре, имаме метод, наречен „TestDataFeed ()“. В този метод създадох екземпляр на обект от друг клас, наречен “ReadExcelFile”. Докато създавах екземпляр на този обект, подадох пътя на моя Excel файл, съдържащ данните. По-нататък съм дефинирал цикъл for за извличане на текста от работната книга на Excel.

Но за четене на данните от даден номер на лист, номер на колона и номер на ред, обажданията се извършват до класа „ReadExcelFile“. Кодът на моя “ReadExcelFile” е по-долу.

пакет DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook публичен клас ReadExcelFile {XSSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSFFSXF 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 row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return return}}

Първо обърнете внимание на библиотеките, които съм импортирал. Внесъл съм Apache POI XSSF библиотеки, които се използват за четене / запис на данни в Excel файлове. Тук съм създал конструктор (обект от същия метод), за да предаде стойностите: номер на лист, номер на ред и номер на колона. За да разбера по-добре тази рамка, моля да преминете през видеото по-долу, където обясних това структурирано.

Управлявана от данни рамка в Selenium WebDriver | Урок за селен

Сега нека преминем към рамката, т.е. рамката, управлявана от ключови думи.

Управлявана от ключови думи рамка

Управлявана от ключови думи рамка е техника, при която всички операции и инструкции, които трябва да бъдат изпълнени, се пишат отделно от действителния тестов случай. Приликата, която има с рамката за управление на данни, е, че операциите, които трябва да се извършат, отново се съхраняват във външен файл като лист на Excel.

прилагане на свързан списък в c

Операциите, за които говоря, не са нищо друго освен методите, които трябва да бъдат изпълнени като част от тестов случай. Предимството на Framework Driven framework е, че можете лесно да контролирате функционалностите, които искате да тествате. Можете да посочите методите, които тестват функционалността на приложението във файла excel. По този начин ще бъдат тествани само тези имена на методи, които са посочени в Excel.

Например за влизане в уеб приложението можем да напишем множество методи в основния тестов случай, при който всеки тестов случай ще тества определена функционалност. За инстанциране на драйвера на браузъра може да има един метод, за намиране на полетата за потребителско име и парола, може да има методи, за навигация до уеб страница може да има друг метод и т.н.

Погледнете кода по-долу, за да разберете как изглежда рамката. Редовете, които са коментирани в кода по-долу, служат като обяснение, ако не разбирате.

пакет 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 публичен клас Действия {публичен статичен драйвер WebDriver публична статична невалид 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 ('login')). ​​Click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} публична статична пустота closeBrowser () {driver.quit ()}}

Както можете да видите, различните функционалности, които трябва да бъдат тествани, присъстват в отделни методи, които чакат да бъдат извикани. Сега тези методи ще бъдат извикани от друг клас въз основа на наличието на името на метода във файла excel. И по подобен начин, за да прочета файла на Excel и да изпратя обратно резултатите, написах друг клас. И двете са показани по-долу.

Файлът на класа, извикващ методите, е това.

какво е прекъсване на ред в html
пакет KeywordDriven публичен клас DriverScript {public static void main (String [] args) хвърля изключение {// Деклариране на пътя на Excel файла с името на Excel файла String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // тук предаваме пътя на Excel и SheetName като аргументи за свързване с Excel файл ReadExcelData.setExcelFile (sPath, 'Sheet1') // Засега се използват твърдо кодирани стойности за реда и колоните на Excel // За реда на Excel се използват твърдо кодирани стойности колони за сега // В следващите глави ще заменим тези твърдо кодирани стойности с вариаби // Това е цикълът за четене на стойностите на колона 3 (Action Keyword) ред по ред за (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() } } } } 

И файлът на класа, който чете стойностите на Excel е този.

пакет 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 ReadAx XSSFSheet ExcelWSheet private static XSSFWorkbook ExcelWBook private static XSSFCell Cell // Този метод е да зададете пътя на файла и да отворите файла на Excel // Предайте Excel Path и SheetName като аргументи на този метод public static void setExcelFile (String Path, String SheetName) хвърля Изключение {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Този метод е за четене на тестовите данни от клетката на Excel // В това предаваме параметри / аргументи като публичен статичен низ StCellData (номер RowNum, int ColNum) ред и номер Num изхвърля изключение {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Сега да преминем към последната част на този блог на Framework на Selenium, където ще ви покажа как да изградите хибридна рамка.

Хибридна рамка

Хибридната рамка е техника, при която можем да използваме най-добре както рамката (ите), управлявана от данни, така и управляваната от ключови думи селен. Използвайки примерите, показани по-горе в този блог, можем да изградим хибридна рамка, като съхраним методите за изпълнение в Excel файл (подход, управляван от ключови думи) и предадем тези имена на методи на Java Reflection Class (подход, управляван от данни), вместо да създавате Ако / Иначе цикъл в класа „DriverScript“.

Погледнете модифицирания клас 'DriverScript' в кодовия фрагмент по-долу.Тук, вместо да се използват множество цикли If / Else, подходът, управляван от данни, се използва за четене на имената на методите от файла на Excel.

пакет HybridFramework импортиране java.lang.reflect.Method публичен клас DriverScriptJava {// Това е обект на клас, деклариран като 'публичен статичен' // За да може да се използва извън обхвата на метода main [] public static действия actionKeywords public static String sActions // Това е обект на клас на отражение, деклариран като 'public static' // За да може да се използва извън обхвата на main [] метод public static Метод метод [] public static void main (String [] args) хвърля изключение {// Деклариране на пътя на Excel файла с името на Excel файла String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Тук предаваме пътя на Excel и SheetName за свързване с файла на Excel // Този метод е създаден преди това ReadExcelData.setExcelFile (sPath, 'Sheet1') // Засега се използват твърдо кодирани стойности за реда и колоните на Excel // По-късно ще използваме тези твърдо кодирани стойности много по-ефективно // Това е цикълът за четене стойностите на реда в колоната (Action Keyword) по ред // Това означава, че този цикъл ще изпълни всички стъпки, споменати за тестовия случай в лист Тестови стъпки за (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

За да разбера по-добре тази концепция за Data Driven, Driven Keyword & Hybrid Driven frameworks, ви моля да гледате видеото по-долу.

Selenium Framework с помощта на Java | Урок за селен | Онлайн обучение за селен

Надявам се този блог да ви е бил полезен и да ви даде ясно разбиране за това какво представлява рамката на Selenium, как е полезна и как да изградите структурата на кода си, като използвате тези 3 рамки на Selenium. Следете повече блогове от тази поредица.

Ако искате да научите селен и да изградите кариера в тестващата област, разгледайте нашия интерактивен онлайн онлайн тук това идва с поддръжка 24 * 7, която да ви води през целия период на обучение. Понятията, свързани с „Селеновата рамка“, имат задълбочен обхват в курса на Edureka.

Имате въпрос към нас? Моля, споменете го в раздела за коментари и ние ще се свържем с вас.