Сканер графического интерфейса Android

Кто-нибудь знает хороший инструмент для сканирования графического интерфейса приложения для Android? Я нашел это, но не мог понять, как запустить это...

2 ответа

Решение

Лично я не думаю, что было бы слишком сложно создать простой сканер с графическим интерфейсом, используя MonkeyRunner и AndroidViewClient.

Кроме того, вы можете посмотреть uiautomator и UI Testing

Добро это относительный термин. Я не использовал Robotium, но он часто упоминается в этих кругах.

РЕДАКТИРОВАТЬ - Добавлен пример на основе запроса комментария.

Используя MonkeyRunner и AndroidViewClient, вы можете создать иерархию представлений. Я думаю, что AndroidViewClient имеет встроенный механизм для этого, но я написал свой собственный. Этот код пытается создать макет, похожий на тот, который используется командой дерева Linux. space а также line переменные используются для установки префикса, добавляемого в каждой строке. Конечно, этот код использует рекурсивный обход в глубину.

def printViewListDepth(view, depth=0):
    space = '|' * int(not depth == 0) 
    space += (' ' * 2 * (depth-1)) + '|' * int(not depth-1 <= 0)
    line  = '_' * int(not depth == 0) * 2
    text = view.getText()
    text = text[:10] + int(len(text) > 10) * '...'
    print " [*] %s%s%s %s %s" % (
        space, line, view.getUniqueId(), 
        view.getClass().replace('android.widget.', ''), text)
    for ch in view.children:
        printViewListDepth(ch, depth+1)

Ты звонишь printViewListDepth следующим образом, используя ViewClient возвращается AndroidViewClient:

printViewListDepth(viewClient.root)

Обратите внимание, что в приведенной выше реализации класс View усекается, удаляя "android.widget." и текст View усекается до 10 символов. Вы можете изменить их в соответствии с вашими потребностями.

Редактировать Сканирование GUI

С AndroidViewClient вы можете запросить, является ли просмотр кликабельным, someView.isClickable(), Если это кликабельно, вы можете вызвать сенсорное событие на нем, someView.touch(), Предполагая, что большинство нажатий кнопок открывают различные действия, вам нужно придумать механизм возврата туда, откуда вы пришли, чтобы выполнить рекурсию.

Я полагаю, что это можно сделать с некоторыми усилиями, но вы можете начать с чего-то столь же простого, как нажатие кнопки НАЗАД, device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP), Вам, вероятно, придется разбираться с особыми случаями, связанными с приложением, по мере их возникновения, но это должно привести вас к достойному началу.

Вы можете взглянуть на Testdroid App Crawler. Он доступен в Testdroid Cloud как тип проекта, и вы можете легко запустить его на 15 бесплатных устройствах.

Другие вопросы по тегам