Библиотека 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-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()
, который выполнит закрытие приложения, завершит
пользовательскую сеанс на сервере и закроет веб-браузер.
Требования#
Сервер приложений с версией, равной версии библиотеки или более поздней. C учётом описания в разделе версионирование.
В конфигурации сервера должны быть включены опции автоматизации
Configuration.Client.Automation
:<client> <automation metaDataAttributes="true" jexlExecution="true" operExecution="true"/> </client>
Тестовый проект должен использовать 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 репозиторий и зависимость от библиотеки.
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'
}
Пример юнит-теста, использующего библиотеку#
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