Изменить: ошибка / несоответствие, с которыми я столкнулся, были немедленно устранены командой php-client Appium. Я оставляю это на случай, если это кому-то поможет, но, ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ЭТО: https://github.com/appium/appium/issues/8419#issuecomment-300573233
В предыдущем посте я прошел процесс настройки Appium для тестирования гибридных приложений. Сегодня я работал над настройкой Appium для тестирования мобильного браузера. Это было исключительно неприятно, и, учитывая отсутствие документации или даже личного опыта, доступных в Интернете, я собираюсь повторить свой процесс, надеясь, что это поможет некоторым из вас.
Во-первых, у меня уже был установлен PHP-клиент Appium через Composer. Прочтите мой предыдущий пост, чтобы узнать подробности, если у вас возникли трудности с этим.
У нас уже есть структура тестирования, в которой есть каталоги для модульных тестов, интеграционных тестов и настольных тестов Selenium, поэтому я создал еще один каталог рядом с ними для тестов Appium.
Я действительно сделал это в своей первоначальной настройке. Внутри этого каталога находится тестовый файл, который я тогда использовал, class.AppiumTest.php
. Он содержит класс, который расширяет PHPUnit_Extensions_AppiumTestCase
и устанавливает для этого desiredCapabilites
:
Я создал новый файл класса class.NxMobileBrowserTest.php
и начал попытки заставить его открыть браузер на мобильном устройстве.
Моим первым шагом было скопировать сценарий bash, который запускает наши тесты Selenium, и немного изменить его, чтобы вместо этого запускать файлы Appium. Это гарантирует, что наши тестовые базы данных поддерживаются в актуальном состоянии во время выполнения тестов, а также запускает фактические тесты через PHPUnit.
Вспомнив свои прошлые ошибки, я сразу же добавил флаг --verbose
к вызову PHPUnit.
Затем произошло кое-что, и я избавлю вас от подробностей, но они включают:
- Константа, которую я создал для своего IP-адреса, была удалена, и мне нужно было добавить ее обратно
- Я напортачил с копированием файлов и каким-то образом создал один со словом "Mobile", написанным с ошибкой как "Moblie", и полностью запутался на несколько минут
- Я сделал полную перезагрузку и воссоздал все, что делал до этого момента, так как казалось, что работает неправильный код. Но, вероятно, я запустил не тот файл.
- Я пилотировал дрон DJI Mavic, что было до смешного эпично (спасибо Хиллелю Фулду!)
В любом случае, после того, как я со всем этим разобрался и вернулся на правильный путь, я потратил много времени, пытаясь понять следующие части документации desiredCapabilities
.
Изменить: это та часть, куда вам следует пойти, прочитать это и не обращать внимания на то, что со мной произошло: https://github.com/appium/appium/issues/8419#issuecomment-300573233
app
= ›Абсолютный локальный путь или удаленного URL-адреса http к .ipa
или .apk
файлу или .zip
, содержащему один из них. Appium сначала попытается установить этот двоичный файл приложения на соответствующее устройство. Обратите внимание, что эта возможность не требуется для Android, если вы укажете возможности appPackage
и appActivity
(см. Ниже). Несовместимо с browserName
.
browserName
= ›Название мобильного веб-браузера для автоматизации. При автоматизации приложения должна быть пустой строкой.
Первое, что я попробовал, - это использовать browserName
в моем массиве desiredCapabilities
вместо app
.
Это дало мне такую неудачу:
The desired capabilities must include either an app, appPackage, or browserName.
Это заблуждение. В моем массиве определенно был browserName
, но этого было недостаточно. По сути, это сообщение об ошибке неверно.
Вам ЛИБО нужно app
ИЛИ вам нужно appPackage
И appActivity
.
Для Chrome это:
appPackage: com.android.chrome
appActivity: com.google.android.apps.chrome.Main
Итак, как только в моем массиве desiredCapabilities
это было исправлено ... Это сработало! Он открыл Chrome на моем устройстве !! НАКОНЕЦ.
[Связанная вещь, которая не работает: открытие Chrome и попытка переключиться на его веб-просмотр. Понятно, что у него нет такого контекста.]
Хорошо, теперь к моему массиву desiredCapabilities
добавлены эти два, а также browserName => "Chrome"
, потому что я думал, что он мне все еще нужен. Я удалил его позже, когда понял, что это не имеет значения.
В рамках теста я попытался открыть новый RemoteWebDriver
, как работают наши тесты Selenium. Это вроде как сработало. Он открывает и закрывает Chrome без видимого перехода на страницу, но отображает HTML-код страницы.
Но тем временем я обнаружил функцию фактического класса Selenium2TestCase
под названием url()
. В качестве эксперимента в рамках моей тестовой функции я сделал
$this->url('http://www.networx.com');
Это работает! Он открывает Chrome, загружает домашнюю страницу Networx и остается на странице, пока этого требует моя команда sleep
. Я прочитал там еще немного кода и нахожу еще несколько полезных функций, пока не получу следующее:
Оно работает! Открывает браузер, ждет, загружает страницу, щелкает, ждет и закрывается.
По сути, кажется, что функции управления страницами, предоставленные в PHPUnit_Extensions_AppiumTestCase
, отражают те, что в RemoteWebDriver
. Таким образом, с этого момента это должен быть почти тот же процесс, который мы использовали для настройки наших настольных тестов.
Еще несколько проблем с этим, но они довольно специфичны для нашей компании и настройки, поэтому я их опущу. Надеюсь, это поможет кому-то в какой-то момент.
Снова и снова
~ Остроумно