Библиотека gs-automation#

Описание#

Библиотека gs-automation.jar предназначена для упрощения написания автоматических тестов и/или скриптов взаимодействия с пользовательским интерфейсом (UI) прикладных приложений Global ERP.

Пользовательский интерфейс является деревом html-элементов, отображаемым веб-браузером. Библиотека содержит набор классов, соответствущих набору элементов пользовательского интерфейса и скрывающих взаимодействие с html-элементам веб-браузера. Взаимодействие классов библиотеки с html-элементам веб-браузера осуществляется средствами библиотеки Selenium, реализующей протокол удалённого управления браузерами WebDriver Api.

Note

Список поддерживаемых браузеров и их версий определяются библиотекой Selenium. Java библиотека Selenium подключена к gs-automation.jar как зависимость и загружается средой разработки из репозитория.

Места публикации#

Библиотека#

Библиотека опубликована в репозитории https://repo.global-system.ru

Документация#

GS-AUTOMATION 1.0.1 JavaDoc

Вместе с библиотекой опубликован gs-automation-javadoc.jar,автоматически загружаемый средой разработки IDEA после подключения библиотеки gs-automation.jar к проекту.

Исходные коды#

Вместе с библиотекой опубликован gs-automation-sources.jar,автоматически загружаемый средой разработки IDEA после подключения библиотеки gs-automation.jar к проекту.

Версионирование#

Версии библиотеки имеют формат: gs-automation-{major}.{minor}.{release}.jar.

  • {release} - увеличивается при: рефакторинге; внесении исправлений ошибок; расширении существующего функционала, не требующего изменений требований к минимальным версиям AS.

  • {minor} - увеличивается при: изменении требований к минимальным версиям сервера; добавлении большого объёма нового функционала.

Требования к версиям AS#

Минимальные версии сервера приложений, с которыми может работать библиотека, указываются в атрибуте манифеста библиотеки Server-Minimal-Versions через точку с запятой.

Пример: "Server-Minimal-Versions": "1.23.0-ms8;1.22.0-rc6"

Библиотека, с приведёнными в примере требованиями, может работать с версиями:

  • AS 1.23.0-ms8 и выше.

  • AS 1.22.0-rc6 … AS 1.22.x.

Таблица совместимости версий AS#

Версия библиотеки

Версии сервера приложений

1.0.0

1.23.0-ms8, 1.22.0-rc6

Концепция#

Библиотека может быть использована в любых проектах, способных подключать java-библиотеки.

Создание клиента#

Работа с классами библиотеки начинается с создания экземпляра строителя ClientBuilder и построения экземпляра клиента веб-браузера Client, декорирующего экземпляр org.openqa.selenium.remote.RemoteWebDriver, запускающего и управляющего процессом веб-браузера.

При построении клиента определяются:

  • Конкретная реализация RemoteWebDriver (ChromeDriver, EdgeDriver и т.п.).

  • Адрес сервера приложений Global ERP.

  • Стратегия входа в систему и выбора приложения LoginStrategy .

  • Стратегия закрытия приложения и выхода из системы LogoutStrategy.

  • Учётные данные пользователя и администратора.

Подключение клиента#

В начале работы с клиентом необходимо вызвать метод Client#login(), который выполнит запуск веб-браузера, подключение к системе и открытие приложения. После успешного выполнения всех действий, будет возвращён объект Application.

Выполнение действий#

Тестовый скрипт, вызывая методы объекта Application, выполняет необходимые действия и проверки над UI приложения Global ERP.

Закрытие клиента#

В завершении работы с клиентом необходимо вызвать метод Client#logout(), который выполнит закрытие приложения, завершит пользовательскую сеанс на сервере и закроет веб-браузер.

Требования#

  1. Сервер приложений с версией, равной версии библиотеки или более поздней. C учётом описания в разделе версионирование.

  2. В конфигурации сервера должны быть включены опции автоматизации Configuration.Client.Automation:

    global3.config.xml#
    <client>
        <automation metaDataAttributes="true"
                    jexlExecution="true"
                    operExecution="true"/>
    </client>
    
  3. Тестовый проект должен использовать JDK 11 и выше.

    Note

    Java 11 является минимальной версией, необходимой для работы библиотеки Selenium 4.x.

Функциональные возможности#

  • Аутентификация

    Аутентификация в системе, выход из системы.

    Warning

    Реализована только передача учётных данных (логин+пароль) через URL.

  • Выбор приложения

    Запуск требуемого приложения

    Warning

    Реализован только выбор приложения через сегмент URL-адреса.

  • Нажатие кнопок

    Нажатие(эмуляция клика левой кнопкой мыши) на пункт гл.меню, кнопку тулбара.

    Warning

    Известна проблема не срабатывания клика кнопки тулбара с первого раза после ввода в карточку.

  • Ожидания форм

    Ожидание открытия Главной/MDI/Modal/Lookup-формы и диалогов.

  • Поиск выборок

    Поиск/ожидание появления выборки/выборок в интерфейсе по имени и отображению.

  • Пользовательский ввод.

    Ввод значений в поля карточки.

    Warning

    Реализован ввод только в текстовые поля.

  • Выполнение Jexl

    Выполнение Jexl-скрипта в контексте серверной выборки с возможностью вернуть строковый результат. Для выборки возможно вызвать те же методы, что в scala-коде операций.

  • Выполнение операции

    Выполнение операции выборки по имени с возможностью вернуть строковый результат.

  • Управление пользовательским сеансами.

    Принудительное закрытие пользовательской сессии или сессий при нештатном выполнении скрипта автоматизации.

Использование#

Подключение к проекту#

Откройте или создайте в IDEA java-проект, использующий JDK 11 или выше.

Добавьте в build.gradle репозиторий и зависимость от библиотеки.

build.gradle#
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
        vendor = JvmVendorSpec.BELLSOFT
    }
}

repositories {
    maven { url = "https://repo.global-system.ru/artifactory/common" }
    maven { url = "https://repo.global-system.ru/artifactory/libs-release" }
}

dependencies {
    implementation 'ru.bitec:gs-automation:1.23.0-ms8'
    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.junit.jupiter:junit-jupiter-api'
    testImplementation 'org.junit.platform:junit-platform-suite'
}

Пример юнит-теста, использующего библиотеку#

ClientTest.java#
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import ru.bitec.gs.automation.client.Client;
import ru.bitec.gs.automation.client.ClientBuilder;
import ru.bitec.gs.automation.client.login.*;
import ru.bitec.gs.automation.client.ui.Application;
import ru.bitec.gs.automation.security.CredentialsFactory;
import ru.bitec.gs.automation.security.UserPassword;
import ru.bitec.gs.automation.security.UserPasswordSolution;

public class ClientTest {
    @Test
    public void loginAndOpenCloseApplication_noExceptions() throws Exception {
        UserPasswordSolution userCredential = CredentialsFactory.userPasswordSolution("admin", "admin", "PGTEST");
        UserPassword adminCredential = CredentialsFactory.userPassword("admin", "admin");
        LoginStrategy loginStrategy = LoginStrategyFactory.urlCredentials(
                userCredential,
                "gtk-Gs3_QAApplication",
                "gtk-ru.bitec.app.btk.Btk_Notification#Head");

        RemoteWebDriver remoteWebDriver = new ChromeDriver();
        try (Client client = ClientBuilder.forWebDriver(remoteWebDriver)
                .setUrl("http://localhost:8080")
                .setLoginStrategy(loginStrategy)
                .setAdminCredentials(adminCredential)
                .build()) {
            Application application = client.login();
            try {
                application.mainForm().mainMenu().itemByCaption("Use cases", "Справочник с MDI-карточкой").click();
            } finally {
                client.logout();
            }
        }
    }
}

Пример проекта, использующего библиотеку#

Архив проекта опубликован в git.global-system.ru