Selenium Структура: данные, ключевые слова и гибридный подход
Что такое Selenium Рамки?
Команда Selenium Платформа автоматизации — это структура кода, которая делает обслуживание кода простым и эффективным. Без фреймворков пользователи могут размещать «код» и «данные» в одном и том же месте, которое невозможно ни использовать повторно, ни читать. Фреймворки дают полезные результаты, такие как повышение возможности повторного использования кода, более высокая переносимость, снижение затрат на обслуживание сценариев, лучшая читаемость кода и т. д.
Виды Selenium Рамки
Есть в основном три тип фреймворка сделанная Selenium WebDriver для автоматизации ручных тестовых случаев
- Платформа, управляемая данными
- Фреймворк, управляемый ключевыми словами
- Гибридная платформа
Data Driven Framework в Selenium
Data Driven Framework в Selenium — это метод отделения наборов данных от тестового примера. После того как наборы данных отделены от тестового примера, их можно легко изменить для конкретной функциональности без изменения кода. Он используется для извлечения тестовых примеров и наборов из внешних файлов, таких как Excel, .csv, .xml или некоторые таблицы базы данных.
Для чтения или записи Excel Apache предоставляет очень известную библиотеку POI. Эта библиотека способна читать и писать как XLS и XLSX формат файла Excel.
Читать XLS файлы, ХССФ реализация обеспечивается библиотекой POI.
Читать XLSX, XSSF реализация POI библиотека будет выбор. Давайте изучим эти реализации подробно.
Мы уже узнали о тестировании, управляемом данными, в нашем предыдущий учебник
Платформа, управляемая ключевыми словами, в Selenium
Платформа, управляемая ключевыми словами, в Selenium — это метод, используемый для ускорения автоматического тестирования за счет разделения ключевых слов для общего набора функций и инструкций. Все операции и инструкции, которые необходимо выполнить, записаны в каком-то внешнем файле, например, в листе Excel. Пользователи могут легко контролировать и указывать функции, которые они хотят протестировать.
Вот как выглядит полная структура
Как вы можете видеть, это 5-шаговая схема. Давайте изучим это поэтапно подробно
Шаг 1)
- Сценарий драйвера Execute.java вызовет ReadGuru99ExcelFile.java.
- ReadGuru99ExcelFile.java имеет скрипт POI для чтения данных из Excel.
Шаг 2)
- ReadGuru99ExcelFile.java будет читать данные из TestCase.xlsx.
- Вот как выглядит лист:
- В соответствии с ключевыми словами, записанными в файле Excel, платформа выполнит операцию над пользовательским интерфейсом.
- Например, нам нужно нажать кнопку «Войти». Соответственно, в нашем Excel будет ключевое слово «Клик». Теперь AUT может иметь сотни кнопок на странице. Чтобы идентифицировать кнопку входа в систему, в Excel мы введем имя объекта в качестве кнопки входа в систему и тип объекта в качестве имени (см. выделенную строку на изображении выше). Тип объекта может быть Xpath, именем CSS или любым другим значением.
Шаг 3) ReadGuru99ExcelFile.java передаст эти данные в скрипт драйвера Execute.java.
Шаг 4)
- Для всех наших веб-элементов пользовательского интерфейса нам необходимо создать репозиторий объектов, в который мы поместим локатор их элементов (например, Xpath, имя, путь CSS, имя класса и т. д.).
- Execute.java (наш скрипт драйвера) прочитает весь репозиторий объектов и сохранит его в переменной.
- Чтобы прочитать этот репозиторий объектов, нам нужен класс ReadObject, у которого есть метод getObjectRepository для его чтения.
ПРИМЕЧАНИЕ: Вы можете подумать, зачем нам создавать хранилище объектов. Ответ помогает в обслуживании кода. Например, мы используем кнопку с именем = btnlogin в 10 различных тестовых случаях. В будущем разработчик решит изменить имя с btnlogin на submit. Вам придется внести изменения во все 10 тестовых случаев. В случае репозитория объектов вы внесете изменение в репозиторий только один раз.
Шаг 5)
- Драйвер передаст данные из Excel и репозитория объектов в пользовательский интерфейс.Operaкласс
- UIOperaКласс tion имеет функции для выполнения действий, соответствующих ключевым словам, таким как CLICK, SETTEXT и т. д., упомянутым в Excel.
- UIOperaкласс – это Java класс, который имеет фактическую реализацию кода для выполнения операций над веб-элементами
Полный проект будет выглядеть так:
Давайте рассмотрим пример:
Сценарий тестирования: Мы выполняем 2 тестовых случая
- Тестовый пример 1:
- Идти к
https://demo.guru99.com/V4/
- Введите идентификатор пользователя
- Введите пароль
- Нажмите Сбросить
- Тестовый пример 2:
- Идти к
https://demo.guru99.com/V4/
- Введите идентификатор пользователя
- Введите пароль
- Нажмите Войти
объект.свойства
url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset
ЧитатьGuru99ExcelFile.java
package excelExportAndFileIO; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadGuru99ExcelFile { public Sheet readExcel(String filePath,String fileName,String sheetName) throws IOException{ //Create a object of File class to open xlsx file File file = new File(filePath+"\\"+fileName); //Create an object of FileInputStream class to read excel file FileInputStream inputStream = new FileInputStream(file); Workbook guru99Workbook = null; //Find the file extension by spliting file name in substing and getting only extension name String fileExtensionName = fileName.substring(fileName.indexOf(".")); //Check condition if the file is xlsx file if(fileExtensionName.equals(".xlsx")){ //If it is xlsx file then create object of XSSFWorkbook class guru99Workbook = new XSSFWorkbook(inputStream); } //Check condition if the file is xls file else if(fileExtensionName.equals(".xls")){ //If it is xls file then create object of XSSFWorkbook class guru99Workbook = new HSSFWorkbook(inputStream); } //Read sheet inside the workbook by its name Sheet guru99Sheet = guru99Workbook.getSheet(sheetName); return guru99Sheet; } }
ЧитатьОбъект.java
package operation; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReadObject { Properties p = new Properties(); public Properties getObjectRepository() throws IOException{ //Read object repository file InputStream stream = new FileInputStream(new File(System.getProperty("user.dir")+"\\src\\objects\\object.properties")); //load all objects p.load(stream); return p; } }
UIOperation.java
package operation; import java.util.Properties; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class UIOperation { WebDriver driver; public UIOperation(WebDriver driver){ this.driver = driver; } public void perform(Properties p,String operation,String objectName,String objectType,String value) throws Exception{ System.out.println(""); switch (operation.toUpperCase()) { case "CLICK": //Perform click driver.findElement(this.getObject(p,objectName,objectType)).click(); break; case "SETTEXT": //Set text on control driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value); break; case "GOTOURL": //Get url of application driver.get(p.getProperty(value)); break; case "GETTEXT": //Get text of an element driver.findElement(this.getObject(p,objectName,objectType)).getText(); break; default: break; } } /** * Find element BY using object type and value * @param p * @param objectName * @param objectType * @return * @throws Exception */ private By getObject(Properties p,String objectName,String objectType) throws Exception{ //Find by xpath if(objectType.equalsIgnoreCase("XPATH")){ return By.xpath(p.getProperty(objectName)); } //find by class else if(objectType.equalsIgnoreCase("CLASSNAME")){ return By.className(p.getProperty(objectName)); } //find by name else if(objectType.equalsIgnoreCase("NAME")){ return By.name(p.getProperty(objectName)); } //Find by css else if(objectType.equalsIgnoreCase("CSS")){ return By.cssSelector(p.getProperty(objectName)); } //find by link else if(objectType.equalsIgnoreCase("LINK")){ return By.linkText(p.getProperty(objectName)); } //find by partial link else if(objectType.equalsIgnoreCase("PARTIALLINK")){ return By.partialLinkText(p.getProperty(objectName)); }else { throw new Exception("Wrong object type"); } } }
ВыполнитьTest.java
package testCases; import java.util.Properties; import operation.ReadObject; import operation.UIOperation; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; import excelExportAndFileIO.ReadGuru99ExcelFile; public class ExecuteTest { @Test public void testLogin() throws Exception { // TODO Auto-generated method stub WebDriver webdriver = new FirefoxDriver(); ReadGuru99ExcelFile file = new ReadGuru99ExcelFile(); ReadObject object = new ReadObject(); Properties allObjects = object.getObjectRepository(); UIOperation operation = new UIOperation(webdriver); //Read keyword sheet Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework"); //Find number of rows in excel file int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum(); //Create a loop over all the rows of excel file to read it for (int i = 1; i < rowCount+1; i++) { //Loop over all the rows Row row = guru99Sheet.getRow(i); //Check if the first cell contain a value, if yes, That means it is the new testcase name if(row.getCell(0).toString().length()==0){ //Print testcase detail on console System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+ row.getCell(3).toString()+"----"+ row.getCell(4).toString()); //Call perform function to perform operation on UI operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(), row.getCell(3).toString(), row.getCell(4).toString()); } else{ //Print the new testcase name when it started System.out.println("New Testcase->"+row.getCell(0).toString() +" Started"); } } } }
После выполнения вывод будет выглядеть так:
Скачать Selenium Файлы проекта для демонстрации в этом руководстве
Гибридная платформа
Гибридная платформа in Selenium это концепция, в которой мы используем преимущества как платформы, управляемой ключевыми словами, так и структуры, управляемой данными. Это простая в использовании платформа, которая позволяет тестировщикам вручную создавать тестовые примеры, просто просматривая ключевые слова, тестовые данные и репозиторий объектов, без написания кода в среде.
Здесь для ключевых слов мы будем использовать файлы Excel для поддержки тестовых примеров, а для тестовых данных мы можем использовать данные, поставщика TestNG фреймворк.
Здесь, в нашей гибридной платформе, нам не нужно ничего менять в платформе, управляемой ключевыми словами, здесь нам просто нужно заменить файл ExecuteTest.java на файл HybridExecuteTest.java.
Этот файл HybridExecuteTest содержит весь код для ключевых слов, основанный на концепции поставщика данных.
Полное графическое представление гибридной структуры будет выглядеть так
ГибридExecuteTest.java
package testCases; import java.io.IOException; import java.util.Properties; import operation.ReadObject; import operation.UIOperation; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import excelExportAndFileIO.ReadGuru99ExcelFile; public class HybridExecuteTest { WebDriver webdriver = null; @Test(dataProvider="hybridData") public void testLogin(String testcaseName,String keyword,String objectName,String objectType,String value) throws Exception { // TODO Auto-generated method stub if(testcaseName!=null&&testcaseName.length()!=0){ webdriver=new FirefoxDriver(); } ReadObject object = new ReadObject(); Properties allObjects = object.getObjectRepository(); UIOperation operation = new UIOperation(webdriver); //Call perform function to perform operation on UI operation.perform(allObjects, keyword, objectName, objectType, value); } @DataProvider(name="hybridData") public Object[][] getDataFromDataprovider() throws IOException{ Object[][] object = null; ReadGuru99ExcelFile file = new ReadGuru99ExcelFile(); //Read keyword sheet Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework"); //Find number of rows in excel file int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum(); object = new Object[rowCount][5]; for (int i = 0; i < rowCount; i++) { //Loop over all the rows Row row = guru99Sheet.getRow(i+1); //Create a loop to print cell values in a row for (int j = 0; j < row.getLastCellNum(); j++) { //Print excel data in console object[i][j] = row.getCell(j).toString(); } } System.out.println(""); return object; } }
Резюме
- Мы можем создать три типа тестовой среды, используя Selenium ВебДрайвер.
- A Selenium Платформы автоматизации, которые можно разделить на управляемые данными, управляемые ключевыми словами и гибридные платформы.
- Мы можем создать структуру, управляемую данными, используя TestNGпоставщик данных.
- В платформе, управляемой ключевыми словами, ключевые слова записываются в некоторые внешние файлы, такие как файл Excel, и код Java будет вызывать этот файл и выполнять тестовые примеры.
- Гибридная структура представляет собой сочетание структуры, управляемой ключевыми словами и данными.
Скачать Selenium Файлы проекта для демонстрации в этом руководстве