Selenium Структура: данные, ключевые слова и гибридный подход

Что такое Selenium Рамки?

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

Виды Selenium Рамки

Есть в основном три тип фреймворка сделанная Selenium WebDriver для автоматизации ручных тестовых случаев

  • Платформа, управляемая данными
  • Фреймворк, управляемый ключевыми словами
  • Гибридная платформа

Виды Selenium Рамки

Data Driven Framework в Selenium

Data Driven Framework в Selenium — это метод отделения наборов данных от тестового примера. После того как наборы данных отделены от тестового примера, их можно легко изменить для конкретной функциональности без изменения кода. Он используется для извлечения тестовых примеров и наборов из внешних файлов, таких как Excel, .csv, .xml или некоторые таблицы базы данных.

Data Driven Framework в Selenium

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

Читать XLS файлы, ХССФ реализация обеспечивается библиотекой POI.

Читать XLSX, XSSF реализация POI библиотека будет выбор. Давайте изучим эти реализации подробно.

Мы уже узнали о тестировании, управляемом данными, в нашем предыдущий учебник

Платформа, управляемая ключевыми словами, в Selenium

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

Вот как выглядит полная структура

Платформа, управляемая ключевыми словами, в Selenium

Как вы можете видеть, это 5-шаговая схема. Давайте изучим это поэтапно подробно

Шаг 1)

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

Шаг 2)

  • ReadGuru99ExcelFile.java будет читать данные из TestCase.xlsx.
  • Вот как выглядит лист:

Платформа, управляемая ключевыми словами, в Selenium

  • В соответствии с ключевыми словами, записанными в файле Excel, платформа выполнит операцию над пользовательским интерфейсом.
  • Например, нам нужно нажать кнопку «Войти». Соответственно, в нашем Excel будет ключевое слово «Клик». Теперь AUT может иметь сотни кнопок на странице. Чтобы идентифицировать кнопку входа в систему, в Excel мы введем имя объекта в качестве кнопки входа в систему и тип объекта в качестве имени (см. выделенную строку на изображении выше). Тип объекта может быть Xpath, именем CSS или любым другим значением.

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

Шаг 4)

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

Платформа, управляемая ключевыми словами, в Selenium

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

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

Шаг 5)

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

Платформа, управляемая ключевыми словами, в Selenium

Полный проект будет выглядеть так:

Платформа, управляемая ключевыми словами, в Selenium

Давайте рассмотрим пример:

Сценарий тестирования: Мы выполняем 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

Скачать 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 Файлы проекта для демонстрации в этом руководстве