.. _gsauto_ug_app: Использование в приложении ========================== При использовании библиотеки в самостоятельном приложении необходимо выполнить: 1. :ref:`Подключение клиента ` (:java:type:`Client `) к :term:`серверу приложений` и получение экземпляра приложения :java:type:`Application `. 2. Выполнение основной логики вашей программы с использованием полученного экземпляра приложения. 3. :ref:`Отключение клиента` от сервера приложений. .. _client-connect: Подключение клиента к серверу приложений ---------------------------------------- .. _webdriver-instance: Создание экземпляра Web-драйвера ```````````````````````````````` `Web-драйвер `__ — это компонент библиотеки `Selenium `__, осуществляющий взаимодействие с браузером. Для каждого браузера (например, Chrome, Firefox) существует отдельная реализация Web-драйвера. .. code-block:: java :caption: Пример создания экземпляра Web-драйвера для браузера Chrome. import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.remote.RemoteWebDriver; RemoteWebDriver driver = new ChromeDriver(); .. _user-auth: Установка реквизитов авторизации пользователя и выбор решения ````````````````````````````````````````````````````````````` Реквизиты авторизации пользователя представлены объектом типа :java:type:`UserPassword`. Совокупность реквизитов авторизации пользователя и выбранного решения представляется объектом типа :java:type:`UserPasswordSolution`. Эти объекты создаются с помощью фабричного класса :java:type:`CredentialsFactory`. .. code-block:: java :caption: Создание объектов авторизации. import ru.bitec.gs.automation.security.CredentialsFactory; import ru.bitec.gs.automation.security.UserPassword; import ru.bitec.gs.automation.security.UserPasswordSolution; UserPassword userCredential = CredentialsFactory.userPassword("user", "password"); UserPasswordSolution userSolutionCredential = CredentialsFactory.userPasswordSolution("user", "password", "PGTEST"); Пример демонстрирует создание двух типов объектов авторизации: простого (``userCredential``) и объединённого с выбранным решением (``userSolutionCredential``). .. _admin-auth: Назначение административных реквизитов `````````````````````````````````````` Административные реквизиты необходимы для выполнения действий с пользовательскими сессиями. Назначение производится аналогично установке реквизитов авторизации обычного пользователя. (см. :ref:`user-auth`) .. _connection-strategy: Определение стратегии подключения к серверу приложений `````````````````````````````````````````````````````` Стратегию подключения определяет объект типа :java:type:`LoginStrategy`. Для создания объекта стратегии используется фабрика :java:type:`LoginStrategyFactory`. Методы фабрики принимают реквизиты авторизации, :term:`приложение<Прикладной модуль>` и :term:`форму (фрейм)<Фрейм>`, открываемые при успешной авторизации на сервере приложений. .. code-block:: java :caption: Создание стратегии подключения. import ru.bitec.gs.automation.client.login.LoginStrategy; import ru.bitec.gs.automation.client.login.LoginStrategyFactory; LoginStrategy loginStrategy = LoginStrategyFactory.urlCredentials(userCredential, "gtk-Gs3_QAApplication", "gtk-ru.bitec.app.btk.Btk_Notification#Head"); В примере стратегия определяется объектом авторизации (``userCredential``), приложением (``gtk-Gs3_QAApplication``) и главной формой (``Btk_Notification#Head``). .. _client-object: Создание экземпляра клиента ``````````````````````````` Экземпляр клиента создаётся с помощью строителя :java:type:`ClientBuilder`. При создании экземпляра клиента необходимо указать Web-драйвер, адрес сервера приложений, стратегии подключения для пользователя и для администратора. .. code-block:: java :caption: Создание экземпляра клиента. import ru.bitec.gs.automation.client.Client; import ru.bitec.gs.automation.client.ClientBuilder; Client client = ClientBuilder.forWebDriver(driver).setUrl("http://localhost:8080").setLoginStrategy(loginStrategy).setAdminCredentials(adminCredential).build(); Объект клиента (``client``) используется для последующих операций подключения и отключения от сервера приложений. .. _client-login: Подключение к серверу приложений ```````````````````````````````` Метод :java:meth:`Client#login() ` выполняет подключение к серверу приложений. Метод выполнит последовательность действий: 1. Запуск браузера. 2. Перенаправление браузера на указанный адрес сервера приложений. 3. Авторизация пользователя на сервере приложений. 4. Открытие требуемого приложения и выбранной формы. 5. Проверка успешности выполненных действий. 6. Возвращение объекта приложения (:java:type:`Application `). .. code-block:: java :caption: Подключение к серверу приложений. import ru.bitec.gs.automation.client.ui.Application; Application application = client.login(); Объект :java:type:`приложения` (``application``) используется для дальнейшего взаимодействия с интерфейсом. .. seealso:: - Руководство пользователя: :ref:`gsauto_ug_application` .. _client-disconnect: Отключение от сервера приложений -------------------------------- Метод :java:meth:`Client#logout() ` отключает клиента от сервера приложений. Метод выполнит: 1. Закрытие открытого приложения. 2. Завершение пользовательской сессии на сервере приложений. 3. Закрытие используемого браузера. .. code-block:: java :caption: Отключение от сервера приложений. client.logout(); .. _example: Полный текст программы ---------------------- .. code-block:: java :caption: ClientTest.java package ru.bitec.gsautomation.examples.example1; 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.LoginStrategy; import ru.bitec.gs.automation.client.login.LoginStrategyFactory; 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 { public static void main(String[] args) 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("gs-automation", "Редакторы на карточке").click(); } finally { client.logout(); } } } } Полный пример проекта ``example1`` доступен в :ref:`коллекции примеров проектов`. Использование `DefaultTestEnvironment` -------------------------------------- Дополнительный компонент `gs-automation-environments` предоставляет класс :java:type:`DefaultTestEnvironment`, упрощающий процессы подключения и отключения. .. code-block:: java :caption: ClientTest.java package ru.bitec.gsautomation.examples.example4; import ru.bitec.gs.automation.environment.DefaultTestEnvironment; public class ClientTest extends DefaultTestEnvironment { private ClientTest() { super(); } public void loginAndOpenCloseApplication_noExceptions() throws Exception { testClassPrelude(); application.mainForm().mainMenu().itemByCaption("gs-automation", "Редакторы на карточке").click(); testClassEpilogue(); } public static void main(String[] args) { ClientTest test = new ClientTest(); try { test.loginAndOpenCloseApplication_noExceptions(); } catch (Exception e) { System.err.println(e.getMessage()); } } } Методы :java:meth:`testClassPrelude()` и :java:meth:`testClassEpilogue()` выполняют необходимые операции подключения и отключения от сервера приложений. Параметры подключения настраиваются в файле свойств (``gs-automation.properties``), расположенном в директории запуска приложения. Полный пример проекта ``example4`` доступен в :ref:`коллекции примеров проектов`. .. seealso:: - Спецификация: :ref:`gsauto_envprops` - Спецификация: :ref:`gsauto_repository` - API: :java:type:`ru.bitec.gs.automation.environment.DefaultTestEnvironment` - API окружения выполнения: :doc:`../../javadoc-environments/packages` - Руководство пользователя: :ref:`gsauto_ug_artifacts` - Руководство пользователя: :ref:`gsauto_ug_envprops`