Какво представлява селеновата рамка?
В рамка Селенът е структура код, който прави поддръжка код лесна и ефективна. Без рамки потребителите могат да поставят „кода“ и „данните“ на едно и също място, което не е нито за многократна употреба, нито за четене. Рамките дават полезни резултати като увеличена повторна употреба на кода, по-висока преносимост, намалени разходи за поддръжка на скриптове, по-добра четливост на кода и др.
Съществуват предимно три типа рамки, създадени от Selenium WebDriver за автоматизиране на ръчни тестови случаи
- Тестова рамка за управление на данни
- Тестова рамка, управлявана от ключови думи
- Хибридна тестова рамка
Управлявана от данни рамка в селен
Data Driven Framework в Selenium е метод за отделяне на набори от данни от тестовия случай. След като наборите от данни са отделени от тестовия случай, той може лесно да бъде модифициран за определена функционалност, без да се променя кодът. Той се използва за извличане на тестови случаи и набори от външни файлове като Excel, .csv, .xml или някои таблици на базата данни.
За да чете или пише Excel, Apache предоставя много известна библиотечна POI. Тази библиотека е достатъчно способна да чете и пише както XLS, така и XLSX файлов формат на Excel.
За четене на XLS файлове се осигурява изпълнение на HSSF от POI библиотека.
За да прочетете XLSX, XSSF внедряването на POI библиотека ще бъде изборът. Нека да проучим подробно тези изпълнения.
Вече научихме за тестването на данни в нашия предишен урок
Управлявана от ключови думи рамка в селен
Управлявана от ключови думи рамка в Selenium е метод, използван за ускоряване на автоматизираното тестване чрез отделяне на ключови думи за общ набор от функции и инструкции. Всички операции и инструкции, които трябва да се извършат, се записват в някакъв външен файл като лист на Excel. Потребителите могат лесно да контролират и определят функционалностите, които искат да тестват.
Ето как изглежда цялата рамка
Както можете да видите, това е 5 стъпка рамка. Нека го изучим поетапно в детайли
Етап 1)
- Драйверният скрипт Execute.java ще извика ReadGuru99ExcelFile.java
- ReadGuru99ExcelFile.java има POI скрипт за четене на данни от Excel
Стъпка 2)
- ReadGuru99ExcelFile.java ще чете данни от TestCase.xlsx
- Ето как изглежда листът-
- Според ключовите думи, написани в Excel файл, рамката ще изпълнява операцията върху потребителския интерфейс.
- Например трябва да щракнем върху бутон „Вход“. Съответно нашият Excel ще има ключова дума „Щракване“. Сега AUT може да има стотици бутони на страница, за да идентифицира бутон за влизане, в Excel ще въведем Object Name като loginButton и тип обект като име (вижте маркирания ред в горното изображение). Типът на обекта може да бъде Xpath, име CSS или друга стойност
Стъпка 3) ReadGuru99ExcelFile.java ще предаде тези данни на скрипта на драйвера Execute.java
Стъпка 4)
- За всички наши уеб елементи на потребителския интерфейс трябва да създадем хранилище на обекти, където ще поставим техния локатор на елементи (като Xpath, име, CSS път, име на клас и т.н.)
- Execute.java (нашият скрипт на драйвера) ще прочете цялото хранилище на обекти и ще го съхрани в променлива
- За да прочетем това хранилище на обекти, ни е необходим клас ReadObject, който има метод getObjectRepository, за да го прочетем.
ЗАБЕЛЕЖКА: Може би си мислите защо е необходимо да създадем хранилище на обекти. Отговорът помага при поддръжката на кода. Например използваме бутона с name = btnlogin в 10 различни тестови случая. В бъдеще разработчикът решава да промени името от btnlogin, за да го изпрати. Ще трябва да направите промяна във всичките 10 тестови случая. В случай на хранилище на обекти, ще направите промяната само веднъж в хранилището.
Стъпка 5)
- Драйверът ще предава данните от Excel & Object Repository в клас UIOperation
- Класът UIOperation има функции за извършване на действия, съответстващи на ключови думи като CLICK, SETTEXT и т.н. ... споменати в Excel
- Класът UIOperation е клас Java, който има действителното изпълнение на кода за извършване на операции върху уеб елементи
Пълният проект ще изглежда като-
Нека разгледаме един пример:
Тест сценарий
- Изпълняваме 2 тестови случая
- Тест 1:
- Отидете на http://demo.guru99.com/V4/
- Въведете User ID
- Въведете паролата
- Щракнете върху Нулиране
- Тест 2:
- Отидете на http://demo.guru99.com/V4/
- Въведете User ID
- Въведете паролата
- Щракнете върху Вход
обект.свойства
url = http: //demo.guru99.com/V4/
потребителско име = uid
парола = парола
заглавие = барон
loginButton = btnLogin
resetButton = btnReset
ReadGuru99ExcelFile.java
пакет excelExportAndFileIO;import java.io.File;импортиране на java.io.FileInputStream;импортиране на java.io.IOException;внос org.apache.poi.hssf.usermodel.HSSFWorkbook;внос org.apache.poi.ss.usermodel.Sheet;внос org.apache.poi.ss.usermodel.Workbook;импортиране org.apache.poi.xssf.usermodel.XSSFWorkbook;публичен клас ReadGuru99ExcelFile {публичен лист readExcel (String filePath, String fileName, String sheetName) хвърля IOException {// Създаване на обект от клас File за отваряне на xlsx файлФайлов файл = нов файл (filePath + "\\" + fileName);// Създаване на обект от клас FileInputStream за четене на Excel файлFileInputStream inputStream = нов FileInputStream (файл);Работна книга guru99Workbook = null;// Намерете разширението на файла, като разделите името на файла в подменюто и получите само името на разширениетоString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Проверяваме състоянието дали файлът е xlsx файлif (fileExtensionName.equals (". xlsx")) {// Ако това е xlsx файл, тогава създайте обект от класа XSSFWorkbookguru99Workbook = нов XSSFWorkbook (inputStream);}// Проверяваме дали файлът е xls файлиначе ако (fileExtensionName.equals (". xls")) {// Ако е xls файл, тогава създайте обект от класа XSSFWorkbookguru99Workbook = нов HSSFWorkbook (inputStream);}// Прочетете листа в работната книга по името муЛист guru99Sheet = guru99Workbook.getSheet (sheetName);return guru99Sheet;}}
ReadObject.java
пакетна работа;import java.io.File;импортиране на java.io.FileInputStream;импортиране на java.io.IOException;импортиране на java.io.InputStream;импортиране на java.util.Properties;публичен клас ReadObject {Свойства p = нови Свойства ();публични свойства getObjectRepository () хвърля IOException {// Четене на файл на хранилище на обектInputStream поток = нов FileInputStream (нов файл (System.getProperty ("user.dir") + "\\ src \\ objects \\ object.properties"));// зареждаме всички обектиp.load (поток);връщане p;}}
UIOperation.java
пакетна работа;импортиране на java.util.Properties;внос org.openqa.selenium.By;импортиране на org.openqa.selenium.WebDriver;публичен клас UIOperation {Драйвер за WebDriver;обществена UIOperation (драйвер за WebDriver) {this.driver = драйвер;}публично въвеждане изпълнява (свойства p, операция String, String objectName, String objectType, String стойност) хвърля изключение {System.out.println ("");превключвател (operation.toUpperCase ()) {дело "КЛИК":// Извършване на кликванеdriver.findElement (this.getObject (p, objectName, objectType)). click ();почивка;дело "SETTEXT":// Задаване на текст върху контролаdriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (стойност);почивка;дело "GOTOURL":// Вземете URL на приложениетоdriver.get (p.getProperty (стойност));почивка;дело "GETTEXT":// Вземете текст на елементdriver.findElement (this.getObject (p, objectName, objectType)). getText ();почивка;по подразбиране:почивка;}}/ *** Намерете елемент чрез използване на обект тип и стойност* @param стр* @param objectName* @param objectType* @ завръщане* @throws Изключение* /private By getObject (Properties p, String objectName, String objectType) хвърля изключение {// Намерете по xpathif (objectType.equalsIgnoreCase ("XPATH")) {върнете By.xpath (p.getProperty (objectName));}// намиране по класиначе ако (objectType.equalsIgnoreCase ("CLASSNAME")) {върнете By.className (p.getProperty (objectName));}// намиране по имеиначе ако (objectType.equalsIgnoreCase ("NAME")) {върнете By.name (p.getProperty (objectName));}// Намерете от cssиначе ако (objectType.equalsIgnoreCase ("CSS")) {върнете By.cssSelector (p.getProperty (objectName));}// намирам чрез връзкаиначе ако (objectType.equalsIgnoreCase ("ВРЪЗКА")) {върнете By.linkText (p.getProperty (objectName));}// намиране чрез частична връзкаиначе ако (objectType.equalsIgnoreCase ("PARTIALLINK")) {върнете By.partialLinkText (p.getProperty (objectName));} друго{хвърли ново изключение ("Грешен тип обект");}}}
ExecuteTest.java
пакет testCases;импортиране на java.util.Properties;операция за импортиране.ReadObject;операция за импортиране.внос org.apache.poi.ss.usermodel.Row;внос org.apache.poi.ss.usermodel.Sheet;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;внос org.testng.annotations.Test;импортиране excelExportAndFileIO.ReadGuru99ExcelFile;публичен клас ExecuteTest {@Тестpublic void testLogin () хвърля изключение {// TODO Автоматично генериран мъниче от методWebDriver webdriver = нов FirefoxDriver ();ReadGuru99ExcelFile файл = нов ReadGuru99ExcelFile ();ReadObject обект = нов ReadObject ();Свойства allObjects = object.getObjectRepository ();Операция на UIOperation = нова UIOperation (webdriver);// Прочетете листа с ключови думиЛист guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Намерете броя на редовете в Excel файлаint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Създайте цикъл върху всички редове на Excel файла, за да го прочететеза (int i = 1; i" + row.getCell (0) .toString () + "Started");}}}}
След изпълнението изходът ще изглежда така -
Изтеглете файловете за проект на Selenium за демонстрацията в този урок
Хибридна рамка
Хибридната рамка в Selenium е концепция, при която използваме предимството както на основата на ключови думи, така и на рамката, управлявана от данни. Това е лесна за използване рамка, която позволява на ръчните тестери да създават тестови случаи, като просто разглеждат ключовите думи, тестовите данни и хранилището на обекти, без кодиране в рамката.
Тук за ключови думи ще използваме файлове на Excel, за да поддържаме тестови случаи, а за тестови данни можем да използваме данни, доставчик на Testng framework.
Тук в нашата хибридна рамка не е необходимо да променяме нищо в рамката, управлявана от ключови думи, тук просто трябва да заменим файла ExecuteTest.java с файл HybridExecuteTest.java.
Този файл HybridExecuteTest има целия код за ключова дума, управлявана с концепция за доставчик на данни.
Ще изглежда пълното изобразително представяне на хибридната рамка
HybridExecuteTest.java
пакет testCases;импортиране на java.io.IOException;импортиране на java.util.Properties;операция за импортиране.ReadObject;операция за импортиране.внос org.apache.poi.ss.usermodel.Row;внос org.apache.poi.ss.usermodel.Sheet;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;импортиране на org.testng.annotations.DataProvider;внос org.testng.annotations.Test;импортиране excelExportAndFileIO.ReadGuru99ExcelFile;публичен клас HybridExecuteTest {WebDriver webdriver = нула;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String keyword, String objectName, String objectType, String value) хвърля изключение {// TODO Автоматично генериран мъниче от методif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = нов FirefoxDriver ();}ReadObject обект = нов ReadObject ();Свойства allObjects = object.getObjectRepository ();Операция на UIOperation = нова UIOperation (webdriver);// Функция за извикване за извършване на операция върху потребителския интерфейсoperation.perform (allObjects, keyword, objectName,objectType, стойност);}@DataProvider (name = "hybridData")public Object [] [] getDataFromDataprovider () хвърля IOException {Обект [] [] обект = нула;ReadGuru99ExcelFile файл = нов ReadGuru99ExcelFile ();// Прочетете листа с ключови думиЛист guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Намерете броя на редовете в Excel файлаint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();обект = нов обект [rowCount] [5];за (int i = 0; iРезюме:
- Можем да създадем три типа тестова рамка, използвайки Selenium WebDriver.
- Това са данни, управлявани от ключови думи, и хибридна тестова рамка.
- Можем да постигнем базирана на данни рамка, използвайки доставчика на данни на TestNG.
- В рамката, управлявана от ключови думи, ключовите думи се записват в някои външни файлове като Excel файл и Java кодът ще извика този файл и ще изпълни тестови случаи.
- Хибридната рамка е комбинация от ключова дума и рамка, управлявана от данни.
Изтеглете файловете за проект на Selenium за демонстрацията в този урок