Этап 1 - Подготовка
Пожалуй важнейшим этапом, будет установка необходимых компонентов, без которых к сожалению ничего работать не будет. И это я не про софт из заголовка, но и про него тоже безусловно =)
Итак, что же нам пондобиться:
- Appium
- VirtualBox
- Genymotion
- Android sdk (нужно будет установить Android Studio)
- Java SE Development Kit (JDK)
Этап 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 я думаю тут пояснять нечего. Данная переменная отвечает за имя вашего виртуального устройства, именно по этому оно не должно иметь пробельных символов, иначе софт его не скушает.
Если ваше окно выглядит так, то смело можете стартовать сессию. В этом окне должны побежать строки, это говорит о том процесс пошёл успешно. А на экране эмулятора появиться уведомление об установки приложения Appium Settins, это необходимо для корректной работы, по этому не пугайтесь. После установки вы услышите характерный звук, и в окне Appium Inspector вы увидите рабочий стол вашего устройства, значит всё работает корректно, я поздравляю вас с завершением первого этапа.
Этап 3 - Пишем тест
Пришло время написать свой первый простенький тест, который будет тупо нажимать на звонилку, но это в первую очередь поможет вам понять принцип взаимодействия с эмулятором, а так же даст понять, корректно ли вы всё настроили. Итак, для начала я предложу вам в окне программы Appium Inspector, сделать клик в окне эмулятора, по значку телефона, и получить подобное содержимое:
Отсюда нам потребуется только xpath, по аналогии с DOM обычно html документа, мы можем обращаться к элементам операционной системе, просто обращаясь к ним таким образом.
Пишем и запускаем
А теперь нам потребуется любой редактор кода, в моём случае это будет PyCharm, я его обожаю) и не буду скрывать, я приобрёл лицензию на год, пусть это было не простой задачей, но оно того стоит. Перед запуском нам потребуется установить pip пакет самого appium, в теори можно по хардкору использовать и голый selenium, но там есть свои тонкости, об этом как-нибудь в другой раз, по сути appium это надстройка, которая помогает наладить взаимодействие, интерпретируя python код, в команды для adb шела.
- Разверните виртуальное окружение, или откройте терминал, или на худой конец cmd.
- Пишем команду
pip install Appium-Python-Client
- Вставляем пример моего кода в окно своего редактора кода.
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()
После запуска этого кода, у вас должно открыться приложение звонилки. Если нет, смотрите вывод логотв в терминале запуска вашего скрипта.
Ну а в следующих статьях я рассмотрю реальный кейсы автоматизации. Спасибо за внимание.
привет, как скоро ПОЛНЫЙ гайд по автоматизации мобильного приложения ?
Актива пока нет, интереса не вижу
ТС, а в многопоток можно это осуществить?
Безусловно, я писал про контейнеры
Го гайд еще)))
классная статья!