Selenium Рамка: управлявана от данни, ключови думи и хибридно управление

⚡ Умно обобщение

Selenium Рамка: Подходите, базирани на данни, ключови думи и хибрид, определят как тестерите организират кода за автоматизация, отделят тестовите данни и логиката за повторно използване. Тази статия обяснява всеки тип рамка, нейната архитектура, предимства и как да ги имплементира стъпка по стъпка с практически инструкции. Selenium Примери за код на WebDriver.

  • Основна дефиниция: A Selenium Framework е структурирана архитектура на код, която подобрява възможността за многократна употреба, преносимостта и поддръжката на автоматизирани тестови скриптове.
  • 📊 Внедряване, основано на данни: Разделете тестовите данни от логиката, използвайки 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 е метод за отделяне на наборите от тестови данни от логиката на тестовия случай. След като данните бъдат отделени, можете да променяте входните данни за определена функционалност, без да докосвате тестовия код. Обикновено се използва за извличане на тестови случаи и пакети от външни източници, като например Excel, .csv, .xml или таблици на база данни.

Data Driven Framework в Selenium

За четене или запис на Excel файлове, Apache предоставя добре познатата POI библиотека. Тази библиотека може да обработва и двете XLS намлява XLSX формати. The HSSF Имплементацията чете стари XLS файлове, докато XSSF Имплементацията обработва съвременни XLSX файлове.

Вече разгледахме тестването, управлявано от данни, в нашата предишен урок.

Управлявана от ключови думи рамка в Selenium

Управлявана от ключови думи рамка в Selenium е метод, който ускорява автоматизацията чрез разделяне на ключови думи за общи функции и инструкции. Всички операции и инструкции се записват във външен файл, обикновено Excel таблица. Тестерите могат да посочат функционалностите, които искат да валидират, без да променят. Java код, което прави този стил идеален за екипи, където бизнес анализатори или ръчен QA персонал допринасят с дефиниции на тестове.

Ето как изглежда пълната рамка:

Управлявана от ключови думи рамка в Selenium

Както виждате, това е рамка от 5 стъпки. Нека я разгледаме подробно стъпка по стъпка.

Стъпка 1)

  • Скриптът на драйвера Execute.java извиква ReadGuru99ExcelFile.java.
  • ЧетиGuru99ExcelFile.java съдържа POI код, който чете данни от Excel.

Стъпка 2)

  • ЧетиGuru99ExcelFile.java чете данни от TestCase.xlsx.
  • Ето как изглежда листът:

Excel таблица, базирана на рамка за ключови думи Selenium

  • Въз основа на ключовите думи, записани във файла на Excel, рамката извършва съответното действие върху потребителския интерфейс.
  • Например, за да щракнете върху бутон с надпис „Вход“, таблицата на Excel съхранява ключовата дума „Щракване“. За да се идентифицира бутонът за вход сред много други на страницата, редът на Excel определя името на обекта като loginButton и типа на обекта като име (вижте маркирания ред на изображението). Типът на обекта може също да бъде XPath, CSS, клас или всяка друга стратегия за локализиране.

Стъпка 3) ЧетиGuru99ExcelFile.java предава анализираните данни обратно на драйверния скрипт Execute.java.

Стъпка 4)

  • За всички уеб елементи на потребителския интерфейс поддържате хранилище на обекти, което съхранява локатори на елементи, като XPath, име, CSS или име на клас.

Хранилище на обекти в рамка, управлявана от ключови думи

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

Помощен клас ReadObject за рамка, управлявана от ключови думи

ЗАБЕЛЕЖКА: Може би се чудите защо е необходимо хранилище за обекти. Отговорът е поддръжка. Ако бутон с име = btnlogin се използва в 10 тестови случая и разработчикът го преименува, за да изпрати, в противен случай ще редактирате 10 файла. С хранилище за обекти променяте локатора на едно място.

Стъпка 5)

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

UIOperaклас tion в рамката, управлявана от ключови думи

Пълната структура на проекта изглежда така:

Пълна структура на проекта на 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 комбинира силните страни както на рамки, управлявани от ключови думи, така и на рамки, управлявани от данни. Това е лесен за използване модел, който позволява на ръчните тестери да създават тестови случаи, просто като редактират ключови думи, тестови данни и хранилището на обекти, без да пишат код за рамката.

Тук 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 или име. Ако разработчик преименува UI контрол, вие актуализирате един запис, а не всеки тестов случай, което драстично намалява времето за поддръжка и риска от повредени скриптове.

AI се подобрява Selenium рамки чрез самовъзстановяващи се локатори, интелигентно приоритизиране на тестовете и визуална валидация. AI двигателите откриват отклонение на локатора, препоръчват стабилни селектори и анализират модели на откази, което поддържа хибридните пакети надеждни с развитието на тестваното приложение.

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

Обобщете тази публикация с: