<style>.lazy{display:none}</style>Selenium Framework обзор

Selenium Framework обзор

Содержание:

Что такое фреймворк автоматизации Selenium?

Фреймворк автоматизации Selenium – это структура кода, которая делает его обслуживание простым и эффективным. Без фреймворков пользователи могут размещать “код” и “данные” в одном и том же месте, которые в результате будут ни пригодными для повторного использования, ни читаемыми. Фреймворки помогают повысить возможности повторного использования кода, увеличить его переносимость, упростить сопровождение скриптов, улучшить читаемость кода и т.д.

Типы фреймворков Selenium

Существует три основных типа фреймворков, созданных Selenium WebDriver для автоматизации ручных тест-кейсов:

  • Фреймворк, управляемый данными.
  • Фреймворк, управляемый ключевыми словами.
  • Гибридный фреймворк.
Типы фреймворков в Selenium WebDriver
БЕСПЛАТНО СКАЧАТЬ КНИГИ в телеграм канале "Библиотека тестировщика"

Фреймворк, управляемый данными (Data Driven Framework)

Фреймворк, управляемый данными (Data Driven Framework) в Selenium – это метод отделения наборов данных от тест-кейса. Когда наборы данных отделены от теста, их можно легко модифицировать для конкретной функциональности без изменения кода. Этот метод используется для получения тест-кейсов и наборов данных из внешних файлов, таких как Excel, .csv, .xml или таблиц некоторых баз данных.

Для чтения и записи Excel в Apache предусмотрена очень известная библиотека POI. Эта библиотека способна читать и записывать файлы Excel в форматах XLS и XLSX.

Для чтения файлов XLS библиотека POI предоставляет реализацию HSSF.

Для чтения XLSX подойдет реализация XSSF библиотеки POI.

Фреймворк, управляемый ключевыми словами (Keyword Driven Framework)

Keyword Driven Framework в Selenium – это метод, используемый для ускорения автоматизированного тестирования путем выделения ключевых слов для общего набора функций и инструкций. Все операции и инструкции, которые необходимо выполнить, записываются во внешнем файле, например, в листе Excel. Пользователи могут легко контролировать и указывать функции, которые они хотят протестировать.

Вот как выглядит готовый фреймворк:

готовый фреймворк, управляемый ключевыми словами (Keyword Driven Framework)

Как видите, это 5-шаговая схема. Рассмотрим ее подробно:

Шаг 1)

  • Сценарий драйвера Execute.java вызовет файл ReadGuru99ExcelFile.java.
  • ReadGuru99ExcelFile.java содержит POI-скрипт для чтения данных из Excel.

Шаг 2)

  • ReadGuru99ExcelFile.java будет считывать данные из файла TestCase.xlsx.
  • Вот как выглядит лист:
Пример листа Excel для фреймворка, управляемый ключевыми словами
  • В соответствии с ключевыми словами, записанными в файле Excel, фреймворк выполнит операцию над пользовательским интерфейсом.
  • Например, нам нужно нажать кнопку ‘Вход в систему’. Соответственно, в нашем Excel будет ключевое слово ‘Click’. Теперь на тестируемой странице (AUT) могут быть сотни кнопок. Чтобы идентифицировать кнопку Login, мы введем в Excel имя объекта loginButton & тип объекта в качестве имени (см. выделенную строку на рисунке выше). Тип объекта может быть Xpath, имя CSS или любое другое значение.

Шаг 3) ReadGuru99ExcelFile.java передаст эти данные скрипту драйвера Execute.java.

Шаг 4)

  • Для всех наших веб-элементов пользовательского интерфейса необходимо создать хранилище объектов, в котором мы будем размещать их локатор элемента (например, Xpath, имя, CSS-путь, имя класса и т.д.).
создание хранилища объектов для размещения локатора их элемента
  • Execute.java (наш скрипт драйвера) прочитает весь репозиторий объектов и сохранит его в переменной.
  • Для чтения этого хранилища объектов нам необходим класс ReadObject, который имеет метод getObjectRepository для его чтения.
Применение класса ReadObject, который имеет метод getObjectRepository, для чтения хранилища объектов

ПРИМЕЧАНИЕ: Вы можете подумать, зачем нам нужно создавать хранилище объектов. Ответ – для сопровождения кода. Например, мы используем кнопку с именем = btnlogin в 10 различных тестовых случаях. В будущем разработчик решает изменить имя с btnlogin на submit. Придется внести изменения во все 10 тест-кейсов. В случае объектного хранилища изменение производится только один раз в самом хранилище.

Шаг 5)

  • Драйвер будет передавать данные из Excel & Object Repository в класс UIOperation.
  • Класс UIOperation имеет функции для выполнения действий, соответствующих ключевым словам CLICK, SETTEXT и т.д…, упомянутым в Excel.
  • Класс UIOperation – это Java-класс, имеющий фактическую реализацию кода для выполнения операций над веб-элементами

Завершенный проект будет выглядеть следующим образом:

Завершенный проект

Рассмотрим пример:

Сценарий тестирования: Мы выполняем 2 тестовых случая

Тестовый пример 1:

  • Перейти на сайт https://demo.guru99.com/V4/.
  • Ввести идентификатор пользователя.
  • Ввести пароль.
  • Нажать кнопку «Сбросить».

Тестовый пример 2:.

  • Перейти на сайт https://demo.guru99.com/V4/.
  • Ввести идентификатор пользователя.
  • Ввести пароль.
  • Нажать кнопку «Войти».

object.properties

url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset

ReadGuru99ExcelFile.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;    
    }
}

ReadObject.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");
        }
    }
}

ExecuteTest.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");
            }
        }
    }
}

После выполнения вывод будет выглядеть следующим образом:

Пример вывода после выполнения теста
Download the Selenium Project Files for the Demo in this Tutorial

Гибридный фреймворк

Гибридный фреймворк в Selenium – это концепция, в которой мы используем преимущества двух фреймворков – управляемого ключевыми словами, так и управляемого данными. Он прост в использовании и позволяет ручным тестировщикам создавать тест-кейсы, просто просматривая ключевые слова, тестовые данные и репозиторий объектов без кодирования.

В этом примере для ключевых слов мы будем использовать файлы Excel для ведения тест-кейсов, а для тестовых данных можно использовать данные, предоставляемые фреймворком Testng.

Тест-кейс для гибридного фреймворка в Selenium

Нам не нужно вносить изменения в фреймворк, управляемый данными. Мы должны просто заменить файл ExecuteTest.java на HybridExecuteTest.java.

пример замены файла в гибридном фреймворке Selenium

В файле HybridExecuteTest содержится весь код для управления по ключевым словам с использованием концепции поставщика данных.

Полное наглядное представление гибридного фреймворка будет выглядеть следующим образом:

Полное наглядное представление гибридного фреймворка Selenium

HybridExecuteTest.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 WebDriver мы можем создать три типа тестовых фреймворков.
  • Фреймворк автоматизации Selenium можно классифицировать на три типа – Data Driven, Keyword Driven и гибридный.
  • Мы можем реализовать фреймворк Data-driven, используя провайдер данных TestNG.
  • В фреймворке Keyword driven ключевые слова записываются в некоторые внешние файлы, например в файл excel, и java-код вызывает этот файл и выполняет тест-кейсы.
  • Гибридный фреймворк представляет собой смесь двух фреймворков – управляемого ключевыми словами и управляемого данными.
Загрузите файлы проекта Selenium для демонстрации в этом учебном пособии

Перевод статьи «Selenium Framework: Data, Keyword & Hybrid Driven».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *