Selenium Фреймворк: на основі даних, ключових слів і гібридів

Що таке Selenium Рамкова?

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

Види Selenium Рамки

В основному їх три тип рамок створена Selenium WebDriver для автоматизації ручних тестів

  • Фреймворк, керований даними
  • Фреймворк на основі ключових слів
  • Гібридна платформа

Види Selenium Рамки

Data Driven Framework в Selenium

Data Driven Framework в Selenium це метод відокремлення наборів даних від тестового випадку. Після того, як набори даних відокремлено від тестового випадку, його можна легко модифікувати для певної функції без зміни коду. Він використовується для отримання тестів і наборів із зовнішніх файлів, таких як перевершувати, .csv, .xml або деякі таблиці бази даних.

Data Driven Framework в Selenium

Щоб читати або писати Excel, Apache надає дуже відому бібліотеку POI. Ця бібліотека достатньо здатна читати і писати обидва XLS та XLSX формат файлу Excel.

Читати XLS файли, ан HSSF реалізацію забезпечує бібліотека POI.

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

Ми вже дізналися про тестування на основі даних у нашому попередній навчальний посібник

Keyword Driven Framework в Selenium

Keyword Driven Framework в Selenium це метод, який використовується для прискорення автоматизованого тестування шляхом розділення ключових слів для загального набору функцій та інструкцій. Усі операції та інструкції, які необхідно виконати, записуються в якомусь зовнішньому файлі, наприклад аркуші Excel. Користувачі можуть легко контролювати та вказувати функції, які вони хочуть перевірити.

Ось як виглядає повний каркас

Keyword Driven Framework в Selenium

Як бачите, це 5-етапна структура. Давайте вивчимо це поетапно детально

Крок 1)

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

Крок 2)

  • ReadGuru99ExcelFile.java читатиме дані з TestCase.xlsx
  • Ось як аркуш виглядає -

Keyword Driven Framework в Selenium

  • Відповідно до ключових слів, записаних у файлі Excel, фреймворк виконуватиме операцію в інтерфейсі користувача.
  • Наприклад, нам потрібно натиснути кнопку «Увійти». Відповідно, наш Excel матиме ключове слово «Click». Тепер AUT може мати сотні кнопок на сторінці, щоб ідентифікувати кнопку входу, в Excel ми введемо ім’я об’єкта як loginButton і тип об’єкта як назву (див. виділений рядок на зображенні вище). Тип об’єкта може бути Xpath, назва CSS або будь-яке інше значення

Крок 3) ReadGuru99ExcelFile.java передасть ці дані до сценарію драйвера Execute.java

Крок 4)

  • Для всіх веб-елементів інтерфейсу користувача нам потрібно створити репозиторій об’єктів, де ми розмістимо їхній локатор елементів (наприклад, Xpath, ім’я, шлях CSS, ім’я класу тощо).

Keyword Driven Framework в Selenium

  • Execute.java (наш сценарій драйвера) прочитає весь репозиторій об’єктів і збереже його в змінній
  • Щоб прочитати це сховище об’єктів, нам потрібен клас ReadObject, який має метод getObjectRepository для його читання.
  • Keyword Driven Framework в Selenium

ПРИМІТКА: Ви можете подумати, навіщо нам створювати репозиторій об’єктів. Відповідь допомагає в обслуговуванні коду. Наприклад, ми використовуємо кнопку з назвою = btnlogin у 10 різних тестових випадках. У майбутньому розробник вирішує змінити назву з btnlogin на submit. Вам доведеться внести зміни в усі 10 тестів. У випадку сховища об’єктів ви вносите зміни лише один раз у сховищі.

Крок 5)

  • Драйвер передасть дані з Excel & Object Repository до інтерфейсу користувачаOperaційний клас
  • UIOperaклас tion має функції для виконання дій, що відповідають ключовим словам, таким як CLICK, SETTEXT тощо…, згаданим у excel
  • UIOperaклас а Java клас, який містить фактичну реалізацію коду для виконання операцій над веб-елементами

Keyword Driven Framework в Selenium

Повний проект виглядатиме так:

Keyword Driven Framework в Selenium

Давайте розглянемо приклад:

Тестовий сценарій: Ми виконуємо 2 тести

  • Тестовий приклад 1:
  • Гото http://demo.guru99.com/V4/
  • Введіть ідентифікатор користувача
  • Введіть пароль
  • Натисніть Скинути
  • Тестовий приклад 2:
  • Гото http://demo.guru99.com/V4/
  • Введіть ідентифікатор користувача
  • Введіть пароль
  • Натисніть Увійти

об'єкт.властивості

url=http://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");
            }
        }
    }
}

Після виконання вихідні дані виглядатимуть так:

Keyword Driven Framework в Selenium

Завантажити Selenium Файли проекту для демонстрації в цьому посібнику

Гібридна платформа

Гібридна платформа in Selenium — це концепція, у якій ми використовуємо переваги рамок, керованих ключовими словами, а також інфраструктури, керованої даними. Це простий у використанні фреймворк, який дозволяє ручним тестувальникам створювати тестові випадки, просто дивлячись на ключові слова, тестові дані та сховище об’єктів без кодування в фреймворку.

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

Гібридна платформа

Тут, у нашій гібридній структурі, нам не потрібно нічого змінювати в структурі, керованій ключовими словами, тут нам просто потрібно замінити файл ExecuteTest.java файлом HybridExecuteTest.java.

Гібридна платформа

Цей файл HybridExecuteTest містить увесь код для ключового слова, керованого концепцією постачальника даних.

Повне графічне зображення гібридного фреймворку буде виглядати так

Гібридна платформа

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.
  • A Selenium рамки автоматизації, які можна класифікувати на керовані даними, керовані ключовими словами та гібридні фреймворки.
  • Ми можемо створити структуру, керовану даними, за допомогою TestNGпостачальник даних.
  • У фреймворку, керованому ключовими словами, ключові слова записуються в деяких зовнішніх файлах, таких як файл excel, і код Java викличе цей файл і виконає тестові випадки.
  • Гібридний фреймворк є сумішшю фреймворку на основі ключових слів і даних.

Завантажити Selenium Файли проекту для демонстрації в цьому посібнику