Изменить: ошибка / несоответствие, с которыми я столкнулся, были немедленно устранены командой 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. Таким образом, с этого момента это должен быть почти тот же процесс, который мы использовали для настройки наших настольных тестов.

Еще несколько проблем с этим, но они довольно специфичны для нашей компании и настройки, поэтому я их опущу. Надеюсь, это поможет кому-то в какой-то момент.

Снова и снова

~ Остроумно