Appium
Automation for Apps
Appium is an open source test automation framework for use with native, hybrid and mobile web apps.
It drives iOS, Android, and Windows apps using the WebDriver protocol.
Introducing Appium.
Is native app automation missing from your tool belt? Problem solved.
Watch the Videos
Appium Philosophy
Appium is built on the idea that testing native apps shouldn’t require including an SDK or recompiling your app. And that you should be able to use your preferred test practices, frameworks, and tools. Appium is an open source project and has made design and tool decisions to encourage a vibrant contributing community.
Use your favorite tools
Appium aims to automate any mobile app from any language and any test framework, with full access to back-end APIs and DBs from test code. Write tests with your favorite dev tools using all the above programming languages, and probably more (with the Selenium WebDriver API and language-specific client libraries).
Apium тестирование мобильных приложений
First of all, make sure developer mode is turned on in your Safari preferences so that the remote debugger port is open.
Mobile Safari on a Real iOS Device
For XCUITest
We use appium-ios-device to handle Safari since Appium 1.15. You no longer need to install additional dependencies.
For Instruments
For instruction on how to install and run ios-webkit-debugger-proxy see iOS WebKit debug proxy documentation.
Setup for an iOS real device
Before you can run your tests against Safari on a real device you will need to:
Running your test
Android mobile web automation
Appium supports automating the Chrome browser both real and emulated Android devices.
Then, use desired capabilties like these to run your test in Chrome:
Note that on 4.4+ devices, you can also use the ‘Browser’ browserName cap to automate the built-in browser. On all devices you can use the ‘Chromium’ browserName cap to automate a build of Chromium which you have installed.
Troubleshooting Chromedriver
If your test target requires newer Chromedriver version, chromedriver_autodownload feature will help. It has been available since Appium 1.15.0 with the security option. Read the linked documentation to learn how to use it. chromedriverExecutableDir capability also helps when you need a specific Chromedriver version.
As of Chrome version 33, a rooted device is no longer required. If running tests on older versions of Chrome, devices needed to be rooted as Chromedriver required write access to the /data/local directory to set Chrome’s command line arguments.
If testing on Chrome app prior to version 33, ensure adb shell has read/write access to /data/local directory on the device:
For more Chromedriver specific documentation see ChromeDriver documentation.
Почем Appium для народа
В этой статье мы рассмотрим инструмент Appium. Данная статья является вводным материалом для введения в автоматизированное тестирование мобильных приложений. Она покажет с какими трудностями возможно придется столкнуться при использовании данного инструмента.
Рассмотрим небольшую задачу на примере «калькулятора», попробуем написать автоматизированные тесты для тестирования его и… Начнем с саааамого начала
Содержание
Пару слов о мобильном тестировании. Можно дома не иметь компьютер, ноутбук, но свою жизнь мы не воспринимаем без мобильных девайсов. Тестирование мобильных приложений занимает большую нишу в… тестировании… Мммм… масло масленное, но это так. Эта ниша довольно-таки сложна.
Девайсов такое огромное количество со своими операционными системами, со своими графическими интерфейсами, разрешениями экранов и т.д. Мне кажется список этот нескончаемый. Так вот, в силу огромного разнообразия мобильных устройств, было бы неплохо иметь автоматизированные тесты для наших приложений, дабы уменьшить страдания тестировщиков и не превращать тестирование одной функциональности на сотнях девайсах в “сущий ад” (см. изображение ниже).
Существуют многочленные инструменты для написания автотестов под мобильные девайсы. Для решения поставленных передо мною задач, я выбрал Appium, так как он одновременно подходит для Android и iOS и можно писать автотесты используя «всеми любимую» Java.
Appium— это бесплатный кроссплатформенный инструмент с открытым исходным кодом, который помогает автоматизировать приложения как для Android, так и для iOS. Appium придерживается того же подхода, что и Selenium WebDriver, который получает HTTP-запросы в формате JSON от клиентов и преобразует их в зависимости от платформы, на которой он работает.
Необходимый минимум
Итак, что нам необходимо для работы с Appium?
Для создания тестов под Android выдвигаются следующие требования:
Постановка и решение задачи
Итак, представим, что нам необходимо написать автоматизированные тесты для приложения калькулятор для Android устройств. Для этого нам необходимо скачать Appium с официального сайта и установить его у себя на «машине».
По умолчанию Appium готов слушать localhost с портом 4723. Здесь оставим все без изменений и стартанем сервер.
Теперь Appium готов обрабатывать наши запросы.
Наш будущий автотест необходимо запускать либо на эмуляторе либо на реальном девайсе. Для универсальности данной статьи, рассмотрим работу теста на эмуляторе. Для этого нам понадобится Android Studio. Качаем и инсталим ее самостоятельно. Затем открываем и переходим в Tools — AVD Manager.
Теперь откроем терминал и выполним команду adb devices. Она покажет список приаттаченых девайсов.
Мы видим, что список девайсов пуст, потому что ни один эмулятор не запущен, ни один реальный девайс не подключен к нашей «машине».
Запустим все эмуляторы, которые у нас есть. В моем случае — это два эмулятора. Повторно выполним команду adb devices.
Теперь мы получили непустой список, который содержит ID наших приаттаченных устройств — эмуляторов и девайсов, если таковы имеются.
С эмулятором разобрались, приступим к написанию кода. Как было описано выше, в своих тестах я использую Java.
Для начала создадим экземпляр AndroidDriver. Конструктор данного класса ожидает на вход два параметра:
Desired capabilities — JSON-объект (набор пар ключ-значение), отправленный клиентом серверу.
Desired capabilities описывают особенности создаваемой сессии (имя девайса/эмулятора, операционную систему (ОС), версию ОС, запускаемое приложение и т.д.).
Опишем наши capabilities и создадим AndroidDriver.
deviceName — обязательный парасметр, но для Android он не проверяется. Если говорить о iOS, то при указании имени, необходимо использовать одно из зарезервированных имен (пример такиих имен приведен в комментариях к коду). Описание других параметров приведены в коде (см. изображение выше), но на некоторых из них мы заострим внимание.
udid — уникальный идентификатор устройства. Данный идентификатор устройства мы можем получить командой adb devices.
appPackage — имя Java пакета Android приложения, которое мы хотим запустить.
appActivities — имя activities, которое мы открываем.
appPackage и appActivities можно получать различными способами, но самый простой из них, установить приложение «APK Info» из Google Play.
После открытия данной программы Вы будете видеть список всех установленных приложений. Нас интересует Calculator. Выбираем его из списка.
И тут находится вся необходимая нам информация.
Заполнили их. Далее создаем экземпляр AndroidDriver: прописываем URL Appium и передаем вторым параметром объект capabilities.
Данный код, лишь запустит калькулятор на эмуляторе. Нам необходимо научиться как-то управлять элементами калькулятора, чтобы мы смогли написать простой тест. Принцип тут схож как и в Selenium Web Driver. Нам необходимо обращаться к элементам через какие-либо локаторы. Для их получения нам поможет Appium Inspector. Открываем Appium.
Теперь все наши capabilities описанные в коде, необходимо перенести в Inspector, во вкладку Desired Capabilities.
Инспектор транслирует то, что отображено на устройстве.Чуть правее расположено дерево всех элементов текущей Activity. Чтобы получить атрибуты элемента, необходимо лишь выбрать нужные нам элемент.
После выбора, отображается все атрибуты, которые доступны для данного элемента.В данном случае, нам не так важно как обращаться к элементу: по ID или xPath. Но в больших и сложных приложениях, лучше использовать ID, так как xPath очень замедляет прохождение тестов. Также, при тестировании гибридных приложений — ID будет один для Android и iOS, а xPath — разные. Мы научились получать необходимые атрибуты. Теперь по аналогии с Selenium Web Driver — получим необходимые элементы в коде.
Для получения элемента, я использую метод findElementById. Можно создавать экземпляр класса MobileElement и работать с ним, а можно и без создания. Тут мы определяем элементы цифры 2, + и 3. В конце ожидаю, что результат будет равен 5. В итоге получилось следующее:
Тест и работу по созданию сессии я вынес в отдельные методы. Теперь попробую продемонстрировать, что у нас получилось.
Конклюжен
В данной статье я показал, как быстро начать работу с Appium и что для этого необходимо. Как вы могли заметить, начать писать простые тесты не так уж и сложно. Дальше можно прикрутить отчет к проекту, к примеру, Allure. Но это уже совсем другая история
Возможно у вас возникнут индивидуальные проблемы при установке различных инструментов, которые необходимы для работы с Appium. Но все эти проблемы легко решаются поиском в Google
Тема тестирования под iOS не раскрыта, но я хочу «сказать», а точнее написать пару слов о ней.
Для того, чтобы запустить приложение через Appium на iOS, много времени я потратил на настройку среды (xCode, Appium, сертификаты разработчика и т.д.). Нужно было открыть проект Appium через xCode, указать сертификаты разработчика и иные настройки, собрать проект и лишь потом получилось выполнить команды через Appium на iOS девайсах. После каждого обновления Appium необходимо производить данную процедуру. Возможно, у вас все получится гораздо проще, стоит верить в это. Пока я не нашел другого решения, возможно оно и есть, но меня пока это устраивает.
Хочу еще раз отметить, что при обращении к элементам лучше использовать ID, чем xPath. Даже если элемент не содержит ID, то попросите/заставьте разработчика указывать ID. Это облегчит вам жизнь и увеличит скорость выполнения тестов.
И еще, чем больше у вас реальных устройств, тем больше вероятность найти баг до того, как найдут его конечные пользователи. В принципе, можно и создать свою фабрику девайсов. Но мне кажется, целесообразней все-таки смотреть в сторону облачных решений, например, BrowserStack, SauceLabs и другие.
Тестирование android приложений с использованием selenoid. Поиск location в мобильном приложении с помощью Appium
Я из компании Luxoft.
Предисловие из поста:
Selenoid — это программа, которая позволяет управлять браузерами и Android-эмуляторами с помощью специальных драйверов. Умеет запускать каждый из них изолированно в Docker-контейнере.
Основная идея Selenoid состоит в том, чтобы запускать новый контейнер для каждой сессии (запуска нового браузера или эмулятора) и останавливать его сразу же после закрытия сессии.
Selenoid позволяет поддерживать высокую нагрузку без дополнительных ресурсозатрат.
В этом посте будет запуск простых тестов в Android-эмуляторе.
Подготовка
Предварительно проверьте что ваша система может запускать виртуальные машины.
Аппаратная виртуализация должна поддерживаться вашим процессором. Это означает, что требуются расширения процессора IntelVT или AMDV. Чтобы убедиться, поддерживает ли процессор одно из них, выполните команду:
Docker
На вашей операционной системе обязательно должен быть установлен и запущен Docker.
Установка Selenoid
Если у вас Redhat-based операционная система, вы можете использовать мой репозиторий для установки Configuration manager.
Если у вас не Redhat-based операционная система, то вы можете скачать и использовать бинарник Configuration manager.
Запуск Selenoid используя Configuration manager и формирование browsers.json
Если у вас нет прямого доступа в инет и docker образы вы скачиваете через registry:
Если у вас есть прямой доступ в инет.
Так как Selenoid Configuration manager пока что не умеет формировать browsers.json для мобильного Chrome, то его нужно поправить самостоятельно.
По умолчанию browsers.json формируется в директории
Итоговый файл browsers.json для тестирования Android приложений и Chrome внутри Android эмулятора.
Пока что версия мобильного хрома отстает от версии обычного хрома.
Скачиваем образ мобильного хрома
Изменение browsers.json
При изменении файла browsers.json нужно перезагрузить selenoid
Reloading configuration
Можно сделать Reloading configuration. Подробности по ссылке:
https://aerokube.com/selenoid/latest/#_reloading_configuration
Проверяем что docker контейнер запустился и образы скачались.
Запуск Selenoid UI используя Configuration manager
Проверяем что docker контейнер запустился и образы скачались.
Заходим в selenoid-ui по адресу ip-где-вы-запускали-selenoid-и-selenoid-ui:8080
У вас должно быть гореть зеленым 2 слова CONNECTED и написано android и chrome.
Чтобы получить доступ из Android на хостовую нужно в тестах использовать полное или короткое имя виртуальной машины, где запускается selenoid.
DEMO TEST
Во всех трех java файлах меняем путь в RemoteWebDriver на полное или короткое имя виртуальной машины, где запускается selenoid (надо поменять скриншот).
или на другой адрес, там где вы запустили selenoid.
В файле AndroidRemoteApkTest.java меняем путь где можно скачать вашу APK.
По этой ссылке http:/полное-или-короткое-имя-виртуальной-машины-где-запускается-selenoid/ваша-apk вы должны скачивать APK как с виртуальной машины так внутри docker образов (в том числе и android).
Можно протестировать так:
Если вы будете ссылаться на localhost из docker, то у вас будет вот такая ошибка, так как вы из сети docker пытаетесь обратиться к localhost основного сервера:
Как сделать доступной для скачивания ваши локальные файлы будет ниже.
В файле DemoTest.java добавляем setCapability для запуска chrome на Android чтобы получилось примерно так.
В каждом файле java вы можете включить или выключить запись видео, удаленный просмотр или управление через VNC и запись логов в файл. Чтобы выключить опцию нужно добавить 2 слеша в начало строки.
Чтобы сделать доступной для скачивания файлы из текущей директории, можно запустить в текущей консоли сервис static-server-in-dir:
Запуск тестов
В директории demo-tests запускаем тесты:
Если вам нужно указать настройки и у вас используется maven-прокси (Nexus, Artifactory)
Если запускаем с прямым доступом в инет и без каких-либо настроек
Скорость
Общее время разворачивания android эмулятора и запуск 1 теста занимает меньше 1 минуты.
Руководство по Appium для тестирования устройств под Andoid и iOS
Appium — это кроссплатформенный инструмент с открытым исходным кодом, который помогает автоматизировать тестирование мобильных приложений для Android и iOS.
Appium поддерживает мобильные, нативные и гибридные приложения.
Существует три типа мобильных приложений:
Почему Appium стал популярным инструментом для автоматизации мобильных приложений?
Appium — кроссплатформенный инструмент, т.е. позволяет писать тесты для мобильных платформ (iOS, Android, Windows), используя API. Это один из самых широко используемых инструментов для регрессионного тестирования приложений на смартфонах и планшетах.
Настройка Appium на Windows
Краткий перечень ПО и устройств, необходимых для автоматизации тестирования мобильного приложения с помощью Appium:
USB-драйвер для тестового устройства (Moto G)
Шаг #1: Установить инструментальный набор JDK.
Шаг #2: Задать путь для системной переменной Java (Environment Variable Path)
Шаг #3: Скачать и установить Android SDK здесь и обновить API.
Обновите API, как показано на скриншоте:
Шаг #4: Теперь понадобится установить Appium для Windows.
Шаг #5: Установите Node JS отсюда: Node JS download
Шаг #6: Установите путь для ANDROID_HOME и для JAVA_HOME
Уточните путь для инструментов в Android SDK.
Эти папки присутствуют в adt-bundle-windows-x86_64-20140702\sdk
Теперь понадобится обновить системную переменную (скриншот ниже)
Обновите инструменты (папка присутствует в Android SDK).
Нажмите комбинацию клавиш Win+R
Впишите CMD. Теперь в CMD впишите «adb». adb будет доступен.
Подготовка мобильного устройства для автоматизации в Appium
Подключите свое мобильное устройство для тестирования к ПК через USB. Включите режим разработчика (Developer Mode) в устройстве перед автоматизацией приложения.
Как включить режим разработчика/опции на смартфоне Android или планшете:
1) Откройте настройки, нажмите вкладку «About», нажмите «Software Information», нажмите «More».
2) Нажмите «Build number» 7 раз, чтобы активировать опцию разработчика.
3) Вернитесь к настройкам — появились ли «Developer options»?
4) Нажмите «Developer options», выберите опцию «USB Debugging» из меню на следующем экране.
Более детальные инструкции — по ссылке.
5) Скачайте и установите USB-драйверы для тестового устройства на ПК.
6) В терминале впишите «adb devices»
Список подключенных устройств
Это высветит список устройств, которые подключены к системе. В качестве примера автоматизации будет использован App Contact Manager.apk. Установите на устройство Contact Manager.apk.
Начало автоматизации Android-приложения с помощью Appium
Запустите appium.exe на ПК.
Appium должен быть запущен и соответствовать следующим условиям.
Примечание: не меняйте название устройства в настройках Android. При запуске Appium Server, адрес сервера, а также адрес порта будут установлены по умолчанию. Адрес порта по умолчанию будет 4723.
В настройках Android пользователю необходимо установить путь APK, где расположен APK, проверить путь приложения, пакет и запустить Activity.
Подключите своей андроидофон к ПК и включите режим отладки USB.
Откройте командную строку.
Впишите команду adb logcat.
Откройте приложение на своем андроидофоне. Сразу же нажмите CTRL + C в командной строке.
com.example.android.contactmanager — название пакета и com.example.android.contactmanager.ContactManager — это название активности приложения Contact Manager.
На скриншоте выше заполнена вся необходимая информация в Appium, т.е. пакет, активность, название мобильного устройства.
Как обнаружить элемент, используя UIAutomatorViewer?
1) Для автоматизации приложения понадобится вначале найти элементы приложения, для которых нужна автоматизация. Будет использован UIAutomatorViewer.
2) Подключите к ПК устройство, на котором установлено приложение.
3) Откройте терминал.
Впишите ‘adb devices‘.
Список подключенных устройств
Так можно будет увидеть список устройств, которые подключены к ПК.
4) Откройте приложение, которое вы хотите автоматизировать в мобильном устройстве.
5) Откройте UIAutomatorViewer и пройдите по навигации:
6) На скриншоте устройства проверьте, что приложение и UIAutomaterViewer запущены.
7) Эта опция позволяет сделать скриншот приложения с полной информацией обо всех элементах, которые видны в приложении.
Кликните кнопку Add Contact (добавить контакт) для тестового сценария.
В качестве указателя может использоваться By.name(“Add Contact”)
Указатель By.className (android.widget.EditText)
Указатель By.name(“Save”) для кнопки Save.
Первая программа для автоматизации приложения на Appium
Запустите скрипт, размещенный ниже, приложение Contact Manager запустится на фактическом устройстве и все логи вводятся в консоли Appium. Так можно увидеть все действия, которые запустил этот скрипт.