Как устроен Appium: client–server, драйверы, что такое Appium Server и как он общается с устройством?
1️⃣ Как кратко ответить
Appium — это инструмент для автоматизации мобильных приложений, работающий по архитектуре клиент-сервер. Appium Server принимает команды от клиента, которые затем передаются на устройство через соответствующие драйверы. Драйверы взаимодействуют с нативными API платформы (iOS, Android), чтобы выполнять действия на устройстве.
2️⃣ Подробное объяснение темы
Appium — это популярный инструмент для автоматизации тестирования мобильных приложений. Он поддерживает приложения на платформах iOS и Android и позволяет писать тесты на различных языках программирования, таких как Java, Python, JavaScript и другие. Основная архитектура Appium основана на модели клиент-сервер, что делает его гибким и расширяемым.
Архитектура клиент-сервер
-
Appium Client: Это библиотека, которую разработчики интегрируют в свои тесты. Клиент отправляет HTTP-запросы к Appium Server. Эти запросы содержат команды, которые необходимо выполнить на мобильном устройстве, такие как нажатие кнопки или ввод текста.
-
Appium Server: Это центральный компонент, который принимает команды от клиента и управляет их выполнением. Сервер написан на Node.js и может быть запущен на любой машине, которая имеет доступ к тестируемому устройству. Он обрабатывает входящие HTTP-запросы и передает их соответствующему драйверу.
Драйверы
Драйверы в Appium — это компоненты, которые непосредственно взаимодействуют с мобильными устройствами. Они переводят команды, полученные от Appium Server, в действия, которые могут быть выполнены на устройстве. Существуют разные драйверы для разных платформ:
- XCUITest Driver: Используется для автоматизации iOS-приложений. Он взаимодействует с XCUITest framework от Apple.
- UIAutomator2 Driver: Используется для автоматизации Android-приложений. Он взаимодействует с UIAutomator framework от Google.
- Espresso Driver: Также используется для Android и взаимодействует с Espresso framework.
Appium Server и взаимодействие с устройством
Appium Server выполняет роль посредника между тестами и устройством. Процесс взаимодействия выглядит следующим образом:
-
Запуск Appium Server: Сервер запускается и начинает слушать входящие HTTP-запросы от клиента.
-
Отправка команды клиентом: Клиент отправляет HTTP-запрос с командой, например, "нажать кнопку" или "ввести текст".
-
Обработка команды сервером: Appium Server принимает запрос и определяет, какой драйвер должен обработать команду в зависимости от типа устройства и платформы.
-
Выполнение команды драйвером: Драйвер переводит команду в действия, которые могут быть выполнены на устройстве, используя нативные API платформы.
-
Возврат результата: После выполнения команды драйвер возвращает результат обратно на сервер, который затем отправляет его клиенту.
Пример кода
Ниже приведен пример простого теста на Java с использованием Appium:
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;
public class AppiumTest {
public static void main(String[] args) throws Exception {
// Установка DesiredCapabilities для Android устройства
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("platformName", "Android");
caps.setCapability("deviceName", "MyDevice");
caps.setCapability("appPackage", "com.example");
caps.setCapability("appActivity", "com.example.MainActivity");
// Создание URL для подключения к Appium Server
URL url = new URL("http://localhost:4723/wd/hub");
// Инициализация AndroidDriver для взаимодействия с устройством
AndroidDriver<MobileElement> driver = new AndroidDriver<>(url, caps);
// Пример команды: поиск элемента и выполнение клика
MobileElement element = driver.findElementById("com.example:id/button");
element.click();
// Завершение сессии
driver.quit();
}
}
- DesiredCapabilities: Устанавливает параметры для подключения к устройству, такие как платформа, имя устройства и информация о приложении.
- URL: Указывает на Appium Server, который будет обрабатывать команды.
- AndroidDriver: Используется для отправки команд на Android-устройство.
- findElementById: Находит элемент на экране по его идентификатору.
- click: Выполняет клик по найденному элементу.
- quit: Завершает сессию и освобождает ресурсы.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться