Репозиторий объектов в Selenium

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

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

  • 🇧🇷 Основная концепция: Хранит идентификаторы пользовательского интерфейса в виде пар «ключ-значение», отдельно от Selenium Логика тестирования WebDriver.
  • 📄 Подход с использованием файла свойств: Сохраняйте локаторы в текстовом файле .properties, который будет считываться во время выполнения с помощью класса java.util.Properties.
  • 🧩 Подход с использованием XML-файлов: Используйте XML-файл с объектной моделью документа и dom4j для чтения локаторов через selectSingleNode.
  • 🔧 Процесс реализации: Создайте файл, сохраните в нем данные типа «ключ-значение», считайте значения в переменные, а затем передайте их в функцию findElement.
  • 🛡️ Пособие на поддержание: При изменении локатора обновляйте только файл репозитория, а не каждый затронутый тестовый случай.

Репозиторий объектов в Selenium

Что такое репозиторий объектов?

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

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

Типы репозиториев объектов в Selenium Веб-драйвер

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

Ниже приведены типы репозиториев объектов, которые можно создать в Selenium ВебДрайвер.

  1. Репозиторий объектов с использованием файла свойств
  2. Репозиторий объектов с использованием XML-файла

Selenium Репозиторий объектов веб-драйвера с использованием файла свойств

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

Шаг 1) Создание файла свойств в eclipse

  1. Для начала необходимо создать в Eclipse следующую структуру Java-проекта. Название проекта и название пакета могут быть любыми допустимыми именами.

Создание файла свойств в Eclipse

  1. Щелкните правой кнопкой мыши на главной папке проекта и выберите Создать -> Другое

Создание файла свойств в Eclipse

  1. В следующем окне выберите «Общие» -> «Файл» и нажмите кнопку «Далее».

Создание файла свойств в Eclipse

  1. В окне создания нового файла укажите допустимое имя файла с расширением '.properties' и нажмите кнопку «Готово».

Создание файла свойств в Eclipse

  1. В структуре проекта должен отображаться файл с именем 'application.properties'.

Создание файла свойств в Eclipse

Шаг 2) Сохранение данных в файле свойств

  1. Данные хранятся в файле свойств в виде пар «ключ-значение», при этом ключ является уникальным во всем файле.
  2. Мы попробуем использовать файл свойств для идентификации веб-элементов с помощью значений локаторов.
  3. Откройте файл application.properties в Eclipse и сохраните следующие данные
MobileTesting=//a[text()='MOBILE TESTING']
EmailTextBox = philadelphia-field-email
SignUpButton = philadelphia-field-submit

Сохранение данных в файле свойств

4) Для этого урока используется следующий демонстрационный веб-сайт:

https://demo.guru99.com/test/guru99home/Вот тестовый сценарий:

  • Нажмите на ссылку «Мобильное тестирование» с использованием XPATH.
  • Вернуться назад
  • Введите данные в текстовое поле для ввода адреса электронной почты, используя идентификатор.
  • Нажмите кнопку «Зарегистрироваться», используя идентификатор.

Шаг 3) Чтение данных из файла свойств

  1. Чтение данных из файла свойств можно выполнить с помощью встроенного класса Properties, входящего в пакет java.util.
  2. Для начала необходимо создать объект класса Properties, как показано ниже.
  Properties obj = new Properties();
  1. Нам необходимо создать объект класса FileInputStream, указав путь к файлу свойств.
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
  1. Чтение данных из файла свойств можно выполнить с помощью метода `load`, предоставляемого классом `Properties` в Java. Приведенный ниже код демонстрирует использование метода `load`.
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
obj.load(objfile);
String mobileTesting = obj.getProperty("MobileTesting");

Строка mobileTesting будет содержать XPATH для идентификации ссылки на мобильное тестирование на веб-странице.

Шаг 4) Использование файла свойств в тестовых сценариях

Файл свойств можно использовать в тестовых скриптах, считывая данные из файла свойств и передавая эти данные в качестве параметра методу findElement. Приведенный ниже код демонстрирует использование данных, считанных из файла свойств, в тестовых скриптах.

driver.findElement(By.xpath(obj.getProperty("MobileTesting"))).click();
driver.findElement(By.id(obj.getProperty("EmailTextBox"))).sendKeys("testguru99@gmail.com");
driver.findElement(By.id(obj.getProperty("SignUpButton"))).click();

Ниже приведен полный код, используемый для приведенного выше тестового сценария.

package com.objectrepository.demo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class DemoOR {

    public static void main(String[] args) throws IOException {

        // Create WebDriver Instance
        WebDriver driver;
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/guru99home/");
        driver.manage().window().maximize();
        // Load the properties File
        Properties obj = new Properties();
        FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
        obj.load(objfile);
        // Navigate to link Mobile Testing and Back
        driver.findElement(By.xpath(obj.getProperty("MobileTesting"))).click();
        driver.navigate().back();
        // Enter Data into Form
        driver.findElement(By.id(obj.getProperty("EmailTextBox"))).sendKeys("testguru99@gmail.com");
        driver.findElement(By.id(obj.getProperty("SignUpButton"))).click();
    }

}

Selenium Репозиторий объектов WebDriver с использованием XML-файла

XML расшифровывается как Extensible Markup Language (расширяемый язык разметки). XML-файл использует объектную модель документа (DOM) в качестве базовой структуры. Формат XML-файла будет воспроизводить формат HTML, на основе которого построена веб-страница. Ниже приведен список тем, которые будут рассмотрены.

Шаг 1) Создание XML-файла в eclipse

  1. Приведенную ниже структуру проекта Java необходимо создать в Eclipse.

Создание XML-файла в Eclipse

  1. Щелкните правой кнопкой мыши папку проекта, выберите «Создать» -> «Другое».

Создание XML-файла в Eclipse

  1. Выберите XML-файл в папке XML и нажмите кнопку «Далее».

Создание XML-файла в Eclipse

  1. Введите допустимое имя XML-файла и нажмите кнопку «Готово».

Создание XML-файла в Eclipse

  1. XML-файл будет добавлен в папку проекта, как показано ниже.

Создание XML-файла в Eclipse

Шаг 2) Сохранение данных в файле XML

Данные могут храниться в XML-файле в виде объектной модели документа (DOM). Для простоты мы можем использовать приведенный ниже тестовый сценарий в качестве примера.

  • Нажмите на ссылку «Мобильное тестирование» с использованием XPATH.
  • Вернуться на главную страницу
  • Введите данные в текстовое поле для ввода адреса электронной почты, используя идентификатор.
  • Нажмите кнопку «Зарегистрироваться», используя идентификатор.

Ниже представлен формат XML-файла, который следует использовать.

<menu>
      <mobiletesting>//a[text()='MOBILE TESTING']</mobiletesting>
      <email> philadelphia-field-email</email>
      <signup> philadelphia-field-submit </signup>
 </menu>

Сохраните приведенный выше XML-код в файле Properties.xml.

Сохранение данных в XML-файле

На вкладке «Дизайн» вы увидите

Сохранение данных в XML-файле

Шаг 3) Чтение данных из файла XML

1. Чтение данных из XML-файла можно осуществить с помощью встроенного класса 'dom4j' в Java. Обратите внимание, что перед продолжением работы с кодом необходимо добавить указанные ниже JAR-файлы в путь сборки вашего проекта.

  • jaxen.jar
  • dom4j-1.6.jar

2. Ниже приведён код для чтения данных из XML-файла.

        File inputFile = new File(System.getProperty("user.dir") +"\\properties.xml");
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(inputFile);
        String mobileTesting = document.selectSingleNode("//menu/mobiletesting").getText();
        String emailTextBox = document.selectSingleNode("//menu/email").getText();
        String signUpButton = document.selectSingleNode("//menu/signup").getText();

3. Для начала нам необходимо создать объект File и передать его в качестве параметра методу 'read' класса SAXReader. После успешного чтения данных XML-файла мы можем получить доступ к отдельным узлам XML-документа, используя метод 'selectSingleNode'.

Шаг 4) Использование XML-файла в тестовых сценариях

XML-файл можно использовать в тестовых скриптах, считывая данные из XML-файла и передавая эти данные в качестве параметра методу findElement. Приведенный ниже код демонстрирует использование данных, считанных из XML-файла, в тестовых скриптах.

driver.findElement(By.xpath(mobileTesting)).click();
driver.findElement(By.id(emailTextBox)).sendKeys("testguru99@gmail.com");
driver.findElement(By.id(signUpButton)).click();

Приведённый ниже код демонстрирует использование XML-файла в Selenium WebDriver.

package com.objectrepository.demo;
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class DemoORXML {

    public static void main(String[] args) throws DocumentException {
        // Creating WebDriver Instance
        WebDriver driver;
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/guru99home/");
        driver.manage().window().maximize();
        // Reading XML File
        File inputFile = new File(System.getProperty("user.dir") +"\\properties.xml");
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(inputFile);
        String mobileTesting = document.selectSingleNode("//menu/mobiletesting").getText();
        String emailTextBox = document.selectSingleNode("//menu/email").getText();
        String signUpButton = document.selectSingleNode("//menu/signup").getText();

        // Navigating to Mobile Testing and back
        driver.findElement(By.xpath(mobileTesting)).click();
        driver.navigate().back();
        // Entering Form Data
        driver.findElement(By.id(emailTextBox)).sendKeys("testguru99@gmail.com");
        driver.findElement(By.id(signUpButton)).click();

    }
}

Загрузите веб-драйвер Eclipse Проект

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

В репозитории объектов внешние локаторы хранятся только отдельно. Модель объектной страницы (Page Object Model) — это более широкая модель, которая инкапсулирует локаторы и действия страницы в классы страниц.

Да. Локаторы также можно хранить в файлах Excel или CSV, считывать с помощью таких библиотек, как Apache POI, и передавать в функцию findElement.

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

Да. Несколько инструментов с поддержкой ИИ сканируют страницу, обнаруживают элементы и экспортируют готовые локаторы в репозиторий. Тестировщикам все равно следует проверять локаторы на стабильность.

Функция самовосстановления на основе ИИ отслеживает атрибуты элементов во время выполнения и, если сохраненный локатор перестает работать, автоматически выбирает альтернативный вариант. Это позволяет продолжать тестирование, несмотря на незначительные изменения интерфейса, и снижает затраты на обслуживание.

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