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

⚡ Розумний підсумок

Selenium Фреймворк: Підходи, що базуються на даних, ключових словах та гібридному підході, визначають, як тестувальники організовують код автоматизації, розділяють тестові дані та використовують логіку повторного використання. У цій статті пояснюється кожен тип фреймворку, його архітектура, переваги та покрокове впровадження з практичними порадами. Selenium Приклади коду WebDriver.

  • Основне визначення: A Selenium Фреймворк — це структурована архітектура коду, яка покращує можливість повторного використання, портативність та підтримку автоматизованих тестових скриптів.
  • 📊 Впровадження на основі даних: Відокремлюйте тестові дані від логіки за допомогою Excel, CSV або XML та зчитуйте вхідні дані через Apache POI (HSSF для XLS, XSSF для XLSX).
  • 🔑 Дизайн, орієнтований на ключові слова: Керуйте діями інтерфейсу користувача за допомогою таблиць ключових слів та репозиторіїв об'єктів, щоб ручні тестувальники могли створювати кейси без написання тексту Java Код.
  • Гібридна оптимізація: Поєднувати TestNG постачальники даних з виконанням ключових слів для отримання гнучкості, масштабованості та зменшення витрат на обслуговування скриптів.
  • 🧩 Перевага репозиторію об'єктів: Централізуйте локатори у файлі властивостей, щоб зміни елементів вимагали оновлення лише одного розташування у всіх тестових випадках.

Selenium Рамки

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

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

Навіщо використовувати a Selenium Структура автоматизації?

Добре продуманий Selenium Фреймворк вирішує три постійні проблеми автоматизації тестування: дублювання коду, крихкі локатори та некеровані тестові дані. Завдяки чіткій структурі команди можуть масштабувати свої набори від кількох скриптів до сотень, не втрачаючи контролю.

  • Ремонтопридатність: Централізовані локатори та допоміжні методи означають, що одна зміна оновлює кожен тест, який використовує цей елемент.
  • Багаторазовість: Такі поширені операції, як вхід, навігація або введення даних у форму, записуються один раз і викликаються в багатьох тестових випадках.
  • Масштаб Додавання нових тестових випадків стає оновленням даних, а не завданням кодування, що дозволяє не-розробникам створювати сценарії.
  • Звітність та співпраця: Стандартизована структура спрощує інтеграцію з інструментами звітності, конвеєрами CI/CD та системою контролю версій.

Види Selenium Рамки

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

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

Види Selenium Рамки

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

Data Driven Framework в Selenium

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

Data Driven Framework в Selenium

Для читання або запису файлів Excel Apache надає добре відому бібліотеку POI. Ця бібліотека може обробляти як XLS та XLSX формати. The HSSF реалізація читає застарілі XLS-файли, тоді як XSSF Реалізація обробляє сучасні XLSX-файли.

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

Keyword Driven Framework в Selenium

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

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

Keyword Driven Framework в Selenium

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

Крок 1)

  • Скрипт драйвера Execute.java викликає ReadGuru99ExcelFile.java.
  • ЧитатиGuru99ExcelFile.java містить код POI, який зчитує дані з Excel.

Крок 2)

  • ЧитатиGuru99ExcelFile.java зчитує дані з TestCase.xlsx.
  • Ось як виглядає аркуш:

Таблиця Excel, керована ключовими словами, у Selenium

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

Крок 3) ЧитатиGuru99ExcelFile.java передає проаналізовані дані назад до драйверного скрипта Execute.java.

Крок 4)

  • Для всіх веб-елементів інтерфейсу користувача ви підтримуєте репозиторій об'єктів, який зберігає локатори елементів, такі як XPath, ім'я, CSS або ім'я класу.

Репозиторій об'єктів у Keyword Driven Framework

  • Execute.java (скрипт драйвера) зчитує весь репозиторій об'єктів та зберігає його у змінній.
  • Допоміжний клас ReadObject надає метод getObjectRepository, який завантажує репозиторій під час виконання.

Допоміжний клас ReadObject для фреймворку, керованого ключовими словами

ПРИМІТКА: Ви можете запитати, навіщо потрібен репозиторій об'єктів. Відповідь — зручність у підтримці. Якщо кнопка з назвою = btnlogin використовується в 10 тестових випадках, а розробник перейменовує її для надсилання, інакше вам доведеться відредагувати 10 файлів. З репозиторієм об'єктів ви змінюєте локатор в одному місці.

Крок 5)

  • Драйвер передає дані з Excel та репозиторію об'єктів до інтерфейсу користувача.Operaклас ції.
  • UIOperation містить функції, які зіставляють кожне ключове слово, таке як CLICK та SETTEXT, з конкретною дією WebDriver.
  • UIOperaція є Java клас, який містить реальну реалізацію для взаємодії з веб-елементами.

UIOperaклас ції в Keyword Driven Framework

Повна структура проекту виглядає так:

Повна структура проекту Keyword Driven Framework

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

Тестовий сценарій: Ми виконуємо 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 File object to open the xlsx file
        File file = new File(filePath + "\\" + fileName);
        // Create a FileInputStream to read the Excel file
        FileInputStream inputStream = new FileInputStream(file);
        Workbook guru99Workbook = null;
        // Detect the file extension
        String fileExtensionName = fileName.substring(fileName.indexOf("."));
        if (fileExtensionName.equals(".xlsx")) {
            guru99Workbook = new XSSFWorkbook(inputStream);
        } else if (fileExtensionName.equals(".xls")) {
            guru99Workbook = new HSSFWorkbook(inputStream);
        }
        // Read the 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 the 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":
                driver.findElement(this.getObject(p, objectName, objectType)).click();
                break;
            case "SETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).sendKeys(value);
                break;
            case "GOTOURL":
                driver.get(p.getProperty(value));
                break;
            case "GETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).getText();
                break;
            default:
                break;
        }
    }

    private By getObject(Properties p, String objectName, String objectType) throws Exception {
        if (objectType.equalsIgnoreCase("XPATH")) {
            return By.xpath(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CLASSNAME")) {
            return By.className(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("NAME")) {
            return By.name(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CSS")) {
            return By.cssSelector(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("LINK")) {
            return By.linkText(p.getProperty(objectName));
        } 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 {
        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 the number of rows in the Excel file
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        for (int i = 1; i < rowCount + 1; i++) {
            Row row = guru99Sheet.getRow(i);
            if (row.getCell(0).toString().length() == 0) {
                System.out.println(row.getCell(1).toString() + "----" + row.getCell(2).toString() + "----" +
                        row.getCell(3).toString() + "----" + row.getCell(4).toString());
                operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                        row.getCell(3).toString(), row.getCell(4).toString());
            } else {
                System.out.println("New Testcase->" + row.getCell(0).toString() + " Started");
            }
        }
    }
}

Після виконання вивід виглядає так:

Вихідні дані виконання фреймворку, керованого ключовими словами

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

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

Гібридна платформа in Selenium поєднує в собі сильні сторони фреймворків, керованих ключовими словами (Keyword Driven), та фреймворків, керованих даними (Data Driven). Це проста у використанні модель, яка дозволяє тестувальникам створювати тестові випадки, просто редагуючи ключові слова, тестові дані та репозиторій об'єктів, без написання коду фреймворку.

Тут файли Excel зберігають ключові слова для кожного кроку, і TestNGАвтора постачальник даних надає тестові дані. Такий поділ дозволяє масштабувати як словник дій, так і варіації вхідних даних незалежно.

Гібридна архітектура керованого фреймворку

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

Заміна компонентів гібридної керованої структури

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

Повне зображення гібридної структури виглядає так:

Повне представлення гібридної керованої структури

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 {
        if (testcaseName != null && testcaseName.length() != 0) {
            webdriver = new FirefoxDriver();
        }
        ReadObject object = new ReadObject();
        Properties allObjects = object.getObjectRepository();
        UIOperation operation = new UIOperation(webdriver);
        operation.perform(allObjects, keyword, objectName, objectType, value);
    }

    @DataProvider(name = "hybridData")
    public Object[][] getDataFromDataprovider() throws IOException {
        Object[][] object = null;
        ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
        Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        object = new Object[rowCount][5];
        for (int i = 0; i < rowCount; i++) {
            Row row = guru99Sheet.getRow(i + 1);
            for (int j = 0; j < row.getLastCellNum(); j++) {
                object[i][j] = row.getCell(j).toString();
            }
        }
        System.out.println("");
        return object;
    }
}

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

Поширені запитання

Оберіть «Ключові слова», коли тестувальникам, які працюють вручну, потрібно створювати кейси без кодування. Оберіть «Ключові дані», коли один і той самий скрипт має виконуватися з багатьма варіантами вхідних даних. Використовуйте «Гібрид», коли вам потрібна одночасно гнучкість даних та створення тестів на рівні ключових слів.

Apache POI зчитує та записує файли Excel, що використовуються як джерело даних. HSSF обробляє застарілі файли .xls, тоді як XSSF обробляє сучасні файли .xlsx. Разом вони дозволяють вашим тестовим скриптам отримувати динамічні вхідні дані з електронних таблиць без жорсткого кодування даних.

Репозиторій об'єктів централізує локатори елементів, такі як XPath, CSS або ім'я. Якщо розробник перейменовує елемент керування інтерфейсу користувача, ви оновлюєте один запис, а не кожен тестовий випадок, що значно скорочує час обслуговування та ризик пошкоджених скриптів.

Штучний інтелект покращується Selenium фреймворки за допомогою самовідновлювальних локаторів, інтелектуального визначення пріоритетів тестів та візуальної перевірки. Механізми штучного інтелекту виявляють дрейф локаторів, рекомендують стабільні селектори та аналізують шаблони збоїв, що забезпечує надійність гібридних пакетів у міру розвитку тестованої програми.

Так. Сучасні помічники штучного інтелекту аналізують тестовану програму та пропонують бібліотеки ключових слів, зразки вхідних даних та граничні випадки. Тестери переглядають та вдосконалюють пропозиції, що пришвидшує налаштування фреймворку, зберігаючи при цьому...ping людський нагляд за логікою критичної перевірки.

Підсумуйте цей пост за допомогою: