Что пишут в блогах

Подписаться

Онлайн-тренинги

Что пишут в блогах (EN)

Разделы портала

Про инструменты

.
Как получить «локаторы» для автоматизации тестирования Android приложений
20.06.2012 12:14

Автор: Андрей Дзыня

В рамках курса Автоматизация тестирования Android приложений я получил интересный вопрос: как узнать "локатор" объекта в Android приложении? Есть ли какой-то инструмент типа “firebug”, чтобы это посмотреть?

Я решил ответить на этот вопрос в публичной форме, так как тема действительно интересная и практически не освещена в интернете.

Для того, что понять к какому элементу Android приложения обращаться, есть три способа:

  • использование утилиты APK Analyzer
  • анализ исходного кода приложения
  • использование Hierarchy View в Eclipse IDE

 

Предлагаю начать с самого простого способа – использования утилиты APKAnalyzer.

Первым делом нужно скачать это приложение, которое вообще весьма полезно и им должен научиться владеть каждый разработчик или тестировщик приложений для Android.

https://github.com/sonyericssondev/ApkAnalyser/downloads

Запускаем программу, настраиваем, прописывая пути к ANDROIDSDK и тестируемому приложению в виде APK файла.

File - > SetPath

Подтверждаем выбор путем нажатия кнопки ОК, после чего на главном экране жмем кнопку “обновить” (самая левая, с иконкой в виде круга).

Инструмент проанализирует внутренности APK файла и покажет его содержимое в удобном для анализа виде.

Чтобы получить доступ к ресурсу, разворачиваем папки в представлении APK-файла:


Выбираем нужный нам ресурс и получаем его значение. В данном случае “OK”

В самом низу видно, к какому layout.xml принадлежит кнопка. Другими словами, на каком экране она отображается.

Открывая note_editor видим название Activity которое используется для отображения элементов:

Мы получили интересующую нас информацию для использования в тестовом проекте.

Нахождение объектов путем анализа исходного кода приложения:

Второй подход более прагматичен, и применяется разработчиками и тестировщиками, которые не боятся залезть во внутренности кода Android-приложения.

Как мы уже видели на предыдущем примере, в состав любого Android-приложения входят две важные папки:
- resources, где находится файл strings.xml. Файл описывает текст элементов всего приложения. Иногда разработчики хранят текст в константах класса или интерфейса, в этом случае стоит им напоминать, что интерфейсные константы лучше вынести в xml-файл.

После компиляции приложения доступ к ресурсам осуществляется через вспомогательный класс R.strings.
- layout, где находятся описания интерфейса программы. После компиляции доступ к ресурсам доступен через класс R.id.

Итак, если нам нужно нажать на кнопку Add note - ищем в strings.xml текст Add note, смотрим имя ресурса и вызываем из теста.

solo.clickOnMenuItem(solo.getString(R.id.add_note));

 

Класс R в данном случае должен быть импортирован из пакета исходного кода приложения, а не тестового проекта.

Подобным же образом работаем и с остальными ресурсами.

Если нужно получить доступ к объекту не по тексту, а по ID - делаем следующее.

В папке layout находим xml-файл с описанием нужного нам экрана, найти в нём ищем нужный id.

Кроме того, в Eclipse есть возможность просмотреть Graphicallayout, где можно подсмотреть id элемента нажатием правой клавишей мыши.

Обращение к элементу по идентификатору выполняется следующим образом:

solo.getView(R.id.note);

Использование HierarchyView в EclipseIDE для получения полной картины "локаторов" в Android приложении

Это, наверное, самый загадочный способ. Для того чтобы получить полную карту приложения в графическом виде нужно сделать следующее.
Открыть Eclipse, запустить эмулятор, установить на него приложение. Перейти в перспективу Hierarchy View. Выбрать текущий Activity из списка в диалоге Windows. Из меню Window выбрать ShowView -> TreeView. Детальный анализ по цепочке даст нам информацию обо всех элементах приложения и по каким ID к ним достучаться.

Вывод

Какой из способов использовать - решать Вам. Я предпочитаю второй, с прямым доступом в исходный код. Это требует понимания внутренней структуры приложения, но это в любом случае необходимо, чтобы качественно автоматизировать тестирование Android приложения.
Если вы знаете еще какие-то способы, в дополнение к описанным выше - свяжитесь со мной или напишите комментарий.

Спасибо за внимание!

Обсудить в форуме