Я ищу способы автоматизировать тестирование виджета приложения Android.Таким образом, очевидно, что частью теста является размещение виджета на главном экране.Я придумал решение, но оно на мой вкус слишком хакерское, поэтому мне интересно, есть ли лучший способ.
Мне нужно, чтобы это работало на эмуляторе с использованием внешнего скрипта.Прямо сейчас я использую простой скрипт bash, но метод, который я использую, должен работать и со скриптом monkeyrunner:
Сначала я определяю функцию для отправки ключей в эмулятор, как уже указано на SO * 1006.*:
function send() { ( nc -w 2 localhost 5554 <<EOL
event send $*
quit
EOL
) | grep -E -v "OK|KO|Android Console" ; }
и
function send_many() { for i in $* ; do send EV_KEY:$i:1 EV_KEY:$i:0 ; done ; }
Функция send()
эквивалентна вызову MonkeyDevice.send (..., DOWN_AND_UP) .
Теперь я могу надежно отправить последовательность клавиш, чтобы открыть меню, выбрать «Добавить» (клавиша), дважды подняться вверх и вниз, чтобы выбрать «Виджет», выбрать мой виджет (он оказывается первым в списке)подождите секунду или две, пока появится пользовательский интерфейс конфигурации виджета, и выберите в нем кнопку установки:
$ send_many KEY_MENU KEY_A KEY_UP KEY_UP KEY_DOWN KEY_ENTER KEY_ENTER
$ sleep 2s
$ send_many KEY_UP KEY_RIGHT KEY_ENTER
Наконец, я обертываю все это в скрипт, который перебирает кучу AVD (например, "test_avd_N "где N - это номер API из 3..12), закрывает любой запущенный эмулятор, открывает новый, ждет его запуска и запускает тестовые сценарии.Я готовлю все AVD с помощью снимков и использую опцию emulator -no-snapshot-save
, чтобы сохранить снимок без изменений между запусками.
Так что в целом это работает, но довольно неприглядно.Интересно, что я мог бы улучшить здесь?