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

⚡ Умное резюме

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

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

Selenium Рамки

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

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

Зачем использовать Selenium Фреймворк автоматизации?

Хорошо продуманный Selenium Этот фреймворк решает три распространённые проблемы автоматизации тестирования: дублирование кода, ненадежные локаторы и неуправляемые тестовые данные. Благодаря четкой структуре команды могут масштабировать свои наборы тестов от нескольких скриптов до сотен, не теряя контроля.

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

Виды Selenium Рамки

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

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

Виды Selenium Рамки

В следующих разделах подробно объясняется каждая из предложенных моделей, начиная с простейшего подхода, основанного на данных, и заканчивая наиболее гибкой гибридной моделью.

Data Driven Framework в Selenium

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

Data Driven Framework в Selenium

Для чтения и записи файлов Excel Apache предоставляет хорошо известную библиотеку POI. Эта библиотека поддерживает оба варианта обработки. XLS и XLSX форматы. ХССФ реализация считывает устаревшие файлы XLS, в то время как XSSF Реализация поддерживает современные файлы XLSX.

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

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

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

Вот как выглядит вся структура в целом:

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

Как видите, это пятиэтапная схема. Давайте рассмотрим её пошагово подробно.

Шаг 1)

  • Скрипт драйвера Execute.java вызывает функцию Read.Guru99ExcelFile.java.
  • ЧитатьGuruФайл 99ExcelFile.java содержит код POI, который считывает данные из Excel.

Шаг 2)

  • ЧитатьGuruФайл 99ExcelFile.java считывает данные из файла TestCase.xlsx.
  • Вот как выглядит этот лист:

Таблица Excel для построения структуры на основе ключевых слов Selenium

  • На основе ключевых слов, записанных в файле Excel, фреймворк выполняет соответствующее действие в пользовательском интерфейсе.
  • Например, чтобы нажать кнопку с надписью «Войти», в таблице Excel хранится ключевое слово «Click». Для идентификации кнопки «Войти» среди множества других кнопок на странице в строке Excel задается имя объекта как loginButton и тип объекта как name (см. выделенную строку на изображении). Тип объекта также может быть XPath, CSS, class или любой другой стратегией поиска.

Шаг 3) ЧитатьGuruФайл 99ExcelFile.java передает обработанные данные обратно в скрипт драйвера Execute.java.

Шаг 4)

  • Для всех элементов веб-интерфейса вы поддерживаете репозиторий объектов, в котором хранятся указатели элементов, такие как XPath, имя, CSS или имя класса.

Репозиторий объектов в рамках фреймворка, управляемого ключевыми словами.

  • Скрипт Execute.java (драйверный скрипт) считывает весь репозиторий объектов и сохраняет его в переменной.
  • Вспомогательный класс ReadObject предоставляет метод getObjectRepository, который загружает репозиторий во время выполнения.

Вспомогательный класс ReadObject для фреймворка, управляемого ключевыми словами.

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

Шаг 5)

  • Драйвер передает данные из Excel и репозитория объектов в пользовательский интерфейс.Operaкласс.
  • UIOperaФункция `tion` сопоставляет каждое ключевое слово, такое как `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;
    }
}

ЧитатьОбъект.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");
        }
    }
}

Выполнить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 {
        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 Сочетает в себе сильные стороны как фреймворков, ориентированных на ключевые слова, так и фреймворков, ориентированных на данные. Это простая в использовании модель, позволяющая тестировщикам вручную создавать тестовые случаи, просто редактируя ключевые слова, тестовые данные и репозиторий объектов, без написания какого-либо кода фреймворка.

Здесь в файлах Excel хранятся ключевые слова для каждого этапа, и TestNGАвтора поставщик данных Предоставляет тестовые данные. Такое разделение позволяет масштабировать как словарь действий, так и варианты входных данных независимо друг от друга.

Архитектура гибридной управляемой структуры

В нашей гибридной среде структура, основанная на ключевых словах, остается неизменной: мы просто заменяем ExecuteTest.java на HybridExecuteTest.java.

Замена компонентов гибридной управляемой структуры

Этот файл HybridExecuteTest содержит полную логику, управляемую ключевыми словами, в сочетании с TestNGмеханизм поставщика данных.

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

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

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

Часто задаваемые вопросы (FAQ)

Выбирайте режим «На основе ключевых слов», если тестировщикам, работающим вручную, необходимо создавать тестовые сценарии без написания кода. Выбирайте режим «На основе данных», если один и тот же скрипт должен работать со множеством вариантов входных данных. Используйте гибридный режим, если вам одновременно требуется гибкость в работе с данными и создание тестов на уровне ключевых слов.

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

Репозиторий объектов централизует локаторы элементов, такие как XPath, CSS или имя. Если разработчик переименовывает элемент управления пользовательского интерфейса, обновляется только одна запись, а не каждый тестовый случай, что значительно сокращает время на сопровождение и риск возникновения ошибок в скриптах.

ИИ улучшается Selenium фреймворки используют самовосстанавливающиеся локаторы, интеллектуальную приоритезацию тестов и визуальную проверку. Механизмы искусственного интеллекта обнаруживают смещение локаторов, рекомендуют стабильные селекторы и анализируют закономерности сбоев, что обеспечивает надежность гибридных наборов тестов по мере развития тестируемого приложения.

Да. Современные ИИ-помощники анализируют тестируемое приложение и предлагают библиотеки ключевых слов, примеры входных данных и граничные случаи. Тестировщики проверяют и уточняют предложения, что ускоряет настройку фреймворка, сохраняя при этом...ping человеческий контроль за критически важной логикой проверки.

Подведем итог этой публикации следующим образом: