О чём речь в статье?

Перед вами полноценный, пошаговый гайд (инструкция), о том, как подружить эмулятор андроида (и не только, но в это статье пока только об андроиде поговорим), Genymotion  под операционной системой Windows (10/11). Это очень важно, так как у других операционных систем не наблюдается такого количество потенциальных багов. В статье мы пройдём все этапы установки и интеграции с appium, а так же научимся делать наш первый виртуальный клик. Если данная тема будет кому-то полезной, прошу, не стянетесь, оставляйте комментарии, и задавайте вопросы.

Прежде чем мы начнём, несколько слов о том зачем, и для чего это может понадобиться. Если у вас когда-то были мысли, а можно ли управлять андроид приложением так же круто, как браузером с помощью selenium? Так вот это именно та штука, позволяющая “тестировать” андроид приложения, с помощью python скриптов. Помимо рядового выполнения произвольных действий, вы можете парсить данные из приложений. Например, вы можете создать полноценного бота для instagram, который будет имитировать действия реального человека, без риска получить бан. И на сладкое, данный эмулятор возможно использовать в качестве docker контейнера. Что это значит для вас? Вы сможете завести целую ферму из различных андроид устройств, с различными конфигурациями, управляя всем этим оркестром с помощью вашего python кода.

Этап 1 - Подготовка

Пожалуй важнейшим этапом, будет установка необходимых компонентов, без которых к сожалению ничего работать не будет. И это я не про софт из заголовка, но и про него тоже безусловно =)

Итак, что же нам пондобиться:

Этап 1.2 - Установка софта

Думаю что с установкой первых трёх программ не должна вызвать каких либо трудностей, поскольку проходит полностью в автоматическом режиме. И да, надеюсь если вы читаете это у вас уже установлен python, и какое-либо окружение для работы с ним, в противном случае я думаю вам не стоит читать дальше.

Установка Android sdk

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

В вашем случае оно может выглядеть иначе (скрин с мака взять если что). Но самое главное тут есть, это пункт с Android SDK, его необходимо отметить галочкой (если он вдруг не будет отмечен). И только ради этого мы ставим всю студию.

p.s | Насколько мне известно, вы можете потому удалить студию, оставив только папку с SDK, но я бы не рекомендовал этого делать, так как информация не подтверждена и требует экспериментов.

С установкой JDK я надеюсь у вас тоже трудностей не возникнет, потому что она тоже автоматическая. Если будут какие-то ошибки в процессе, то придётся погуглить.

Этап 2 - Конфигурация

Приступаем как самому интересному, сборке нашего эмулируемого устройства, и его дальнейшее подключение к appium. Ничего сложного тут нет, но есть некоторые нюансы которые важно знать, то собственно ради чего я пишу данную стать, дабы сэкономить вам кучу времени на поиск причины отказа работать.

Этап 2.1 - Genymotion создаём устройство

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

После того как жмякните по плюсу, появиться не кислый список готовы конфигураций известный (и не очень), андроид устройств. Я рекомендую выбирать  что-то небольшой, типа Pixel 2 или Nexus 5x, особенно если ресурсы вашего пк не особо мощные, вы не будите их тратить на отрисовку большого разрешение. Но между нами, с помощь рута (root), внутри самого андроида вы можете изменить конфигурацию на любую, что бы например различные сервисы вас идентифицировали иначе. После выбора устройства просто нажимаем NEXT

Очень важно, название устройства не должно содержать пробелов, иначе ничего работать потом не будет, и хрен вы об это где узнаете.

Имя устройство должно выглядит либо точно так же, либо аналогично. Каждый пробельный символ должен быть заменён на нижнее подчёркивание. Изначально будет НЕ так, и это крайне важно учесть.

Этап 2.2 - Genymotion Google Play

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

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

Этап 2.3 - Appium config

Переходим к самому интересному, для нормальной работы нашей будуще автоматизации, нам нужно два приложения:

Первая это своего рода ADB хаб маршрутизации запросов, а вторая намного интересней. Это своего рода аналог DevTools от хрома, только для андройда. С помощью этого инструмента мы можем инспектировать структуру любого приложения. Понять к каким элементам мы хотим применять нужны нам методы автоматизации.

Appium Server GUI

Начнём с простого, однако я почти нигде (даже в англоязычном ютубе), не нашёл описание правильной конфигурации, по этому и решил написать эту статью, ибо каждый элемент важен, и без этих параметров вам не получиться получить доступ к эмулируемому устройству.

Прежде всего вам необходимо запустить Appium Server GUI, сделать это можно с ярылка на рабочем столе, или из меню пуск. После запуска вас встретит окно быстрого запуска, но нам нужно настроить конфигурацию, кликаем на “Edit Configuration”.

Теперь нужно ввести всего два пути, это путь до папки с установленным ранее Android sdk в моём случае это

C:\Users\moonz\AppData\Local\Android\Sdk

И путь до Java SE Development Kit

C:\Program Files\Java\jdk-19

Выглядеть это должно вот так, и конечно же не забываем нажать кнопку “Save and Restart”

Программа предложит сделать перезагрузку, однако после нажатия скорее всего ничего не произойдёт, это нормально, по этому вам следует самостоятельно закрыть приложение и открыть его снова (рекомендую проверить что конфигурация была успешно применение).

Appium Inspector

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

  • Конфигурация нужна для каждого устройства отдельная.
  • Данное приложение ваш верный друг и товарищ.
  • Если вы долго бездействуете, то соединение с сервером будет прервано (нужно будет перезапустить программу).
  • Если в процессе появилось любое предупреждение, вам будет необходимо в нём разобраться (например нужны будут драйвера).

Перейдём непосредственно к настройкам, из-за которых я вчера потерял весь день, из-за глупой ошибки идиота с stackoverflow, который перепутал wd с wb.. Самое печальное, что эту ошибку допустило ещё с добрый десяток людей, и по факту никто не мог понять в чём дело. На маке и линуксе всё чиниться элементарно через параметры запуска, но винда у нас особенная, тут ничего толком не починить без доступа. Прежде всего настроим тот злополучный Remote Path, он должен быть равен: /wd/hub

Дальше нам необходимо сформировать JSON конфиг, в нём есть необходимые поля (то есть обязательные), а есть не очень, я покажу на пример своего конфига который вполне адекватно производит соединение.

{
  "appium:deviceName": "Google_Nexus_9",
  "platformName": "Android",
  "appium:automationName": "UiAutomator2",
  "appium:noReset": "True"
}

Это минимальный конфиг для подключения, по этому кроме appium:deviceName я думаю тут пояснять нечего. Данная переменная отвечает за имя вашего виртуального устройства, именно по этому оно не должно иметь пробельных символов, иначе софт его не скушает.

Перед нажатием кнопки “Start Session” убедитесь что у вас работает Appium Server GUI, в противном случае вы получите ошибку вида: Could not connect to server….

Если ваше окно выглядит так, то смело можете стартовать сессию. В этом окне должны побежать строки, это говорит о том процесс пошёл успешно. А на экране эмулятора появиться уведомление об установки приложения Appium Settins, это необходимо для корректной работы, по этому не пугайтесь. После установки вы услышите характерный звук, и в окне Appium Inspector вы увидите рабочий стол вашего устройства, значит всё работает корректно, я поздравляю вас с завершением первого этапа.

Этап 3 - Пишем тест

Пришло время написать свой первый простенький тест, который будет тупо нажимать на звонилку, но это в первую очередь поможет вам понять принцип взаимодействия с эмулятором, а так же даст понять, корректно ли вы всё настроили. Итак, для начала я предложу вам в окне программы Appium Inspector, сделать клик в окне эмулятора, по значку телефона, и получить подобное содержимое:

Отсюда нам потребуется только xpath, по аналогии с DOM обычно html документа, мы можем обращаться к элементам операционной системе, просто обращаясь к ним таким образом.

Пишем и запускаем

А теперь нам потребуется любой редактор кода, в моём случае это будет PyCharm, я его обожаю) и не буду скрывать, я приобрёл лицензию на год, пусть это было не простой задачей, но оно того стоит. Перед запуском нам потребуется установить pip пакет самого appium, в теори можно по хардкору использовать и голый selenium, но там есть свои тонкости, об этом как-нибудь в другой раз, по сути appium это надстройка, которая помогает наладить взаимодействие, интерпретируя python код, в команды для adb шела.

  1. Разверните виртуальное окружение, или откройте терминал, или на худой конец cmd.
  2. Пишем команду pip install Appium-Python-Client
  3. Вставляем пример моего кода в окно своего редактора кода.
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy


def test_start():
    capabilities = {
        'platformName': 'Android',
        'deviceName': 'Google_Nexus_9',
        'automationName': 'UiAutomator2',
        'noReset': True,
    }
    url = 'http://localhost:4723/wd/hub'
    driver = webdriver.Remote(url, capabilities)

    try:
        digit1_btn = driver.find_element(by=AppiumBy.XPATH, value='//android.widget.TextView[@content-desc="Phone"]')
        digit1_btn.click()


    finally:

        driver.quit()


if __name__ == '__main__':
    test_start()

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

Ну а в следующих статьях я рассмотрю реальный кейсы автоматизации. Спасибо за внимание.