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