Created by AIImproved by people
Riqli · living documents · updated continuously
Where AI knowledge meets human practice.
Share with friends

Тестирование пользовательского интерфейса Android с помощью Espresso
(espresso android, android ui тестирование, espresso тесты, espresso idling resource, espresso recyclerview тестирование, android espresso onview, espresso intent testing, espresso custom matcher, espresso адаптер для recyclerview, espresso withFailureHandler, espresso webview тестирование)
Введение в тестирование UI с Espresso
Обзор возможностей фреймворка Espresso для создания автоматизированных тестов пользовательского интерфейса в Android. Рассматриваются основные компоненты и принципы работы с библиотекой.Espresso предоставляет мощный и простой API для симуляции действий пользователя и проверки состояния View. Он работает синхронно с потоком UI, устраняя необходимость в сложных ожиданиях.
Layout Inspector: Анализ иерархии UI
Использование инструмента Layout Inspector для изучения структуры и свойств элементов интерфейса перед написанием тестов.Layout Inspector позволяет визуально исследовать иерархию View в запущенном приложении. Это критически важно для выбора правильных Matcher'ов при поиске элементов в тестах Espresso.
ViewMatchers: Поиск UI компонентов
Детальный разбор всех типов Matcher'ов для поиска элементов на экране устройства или эмулятора.Библиотека Hamcrest лежит в основе ViewMatchers. Основные матчеры: withId, withText, withClassName, hasFocus, а также их комбинации с помощью allOf и anyOf.
ViewActions: Симуляция действий пользователя
Изучение методов ViewActions для эмуляции кликов, ввода текста, прокрутки и других взаимодействий с UI.Ключевые ViewActions включают: click(), typeText(), clearText(), scrollTo(), pressBack(), swipeLeft()/Right()/Up()/Down() и closeSoftKeyboard().
ViewAssertions: Проверка состояния UI
Методы проверки ожидаемого состояния элементов интерфейса после выполнения действий.ViewAssertions позволяют проверить, отображается ли элемент, имеет ли он определенный текст, включен ли, или соответствует ли сложному условию через matches с произвольным Matcher.
RootViewMatchers: Работа с диалогами и выпадающими окнами
Поиск элементов в нестандартных окнах, таких как диалоги, меню и всплывающие сообщения (Toast).Стандартный onView ищет в корневом окне активности. Для диалогов нужно использовать inRoot с матчерами isDialog() или isPlatformPopup(), или withDecorView для Toast.
DataInteraction: Тестирование AdapterView
Специальные методы для взаимодействия с элементами внутри ListView, GridView и Spinner.Для AdapterView используется onData() вместо onView(). onData() работает с объектами данных в адаптере, а не с самими View. Это позволяет кликать по элементам, которые еще не отображены на экране.
RecyclerViewActions: Тестирование RecyclerView
Специализированные действия для RecyclerView, который пришел на смену ListView.Библиотека espresso-contrib предоставляет RecyclerViewActions. Основные методы: actionOnItem(), actionOnItemAtPosition(), scrollTo(), scrollToPosition().
Espresso Test Recorder: Автоматическая запись тестов
Инструмент Android Studio для записи действий в приложении и автоматической генерации кода тестов Espresso.Espresso Test Recorder позволяет записывать взаимодействие с приложением и добавлять проверки (assertions) через контекстное меню. Он генерирует готовый Java/Kotlin код, который можно скопировать в тестовый класс.
Kotlin DSL для Espresso
Использование Domain Specific Language на Kotlin для упрощения написания тестов Espresso.DSL позволяет писать тесты более читаемо, например: onView(withId(R.id.button)).perform(click()) можно заменить на click(R.id.button). Библиотека barista или самописные extension functions.
Аннотации TestSize: Small, Medium, Large
Классификация тестов по времени выполнения и области покрытия с помощью аннотаций @SmallTest, @MediumTest, @LargeTest.Аннотации помогают организовать тесты и запускать определенные группы: @SmallTest (быстрые, до 100ms), @MediumTest (интеграционные, до 2s), @LargeTest (полные UI тесты или энд-ту-энд, больше 2s).
EspressoWeb API: Тестирование WebView
Возможности фреймворка для тестирования гибридных приложений с компонентом WebView.Библиотека espresso-web позволяет искать элементы внутри WebView с помощью WebElement и Atom. Поддерживаются действия: webClick(), webKeys() и проверки: webMatches().
Настройка устройства для UI тестов
Подготовка эмулятора или реального устройства для стабильного запуска тестов Espresso.Необходимо отключить анимации (в настройках разработчика): масштаб анимации окна, масштаб анимации перехода, длительность анимации. Это предотвращает flaky тесты. Также Espresso требует API 16+.
Запуск тестов из терминала
Команды Gradle для выполнения отдельных тестов, групп тестов или всех тестов в проекте.Основные команды: ./gradlew test (юнит-тесты JVM), ./gradlew connectedAndroidTest (инструментальные тесты, включая Espresso на устройстве), ./gradlew -Pandroid.testInstrumentationRunnerArguments.class=com.example.MyTest (запуск одного класса).
Матчеры свойств UI (UI Properties)
Поиск элементов на основе их визуальных свойств, таких как цвет, размер, положение.Примеры матчеров: withEffectiveVisibility() (проверка видимости VISIBLE/INVISIBLE/GONE), hasFocus(), isSelected(), isEnabled(), hasError() (для текстовых полей).
Матчеры ввода (Input Matchers)
Специализированные матчеры для работы с полями ввода и клавиатурой.isInputMethodTarget() - проверяет, является ли View целью для ввода с клавиатуры. hasImeAction() - проверяет действие на клавиатуре (Done, Next, Search).
Class ViewMatchers
Поиск элементов по их классу или родительскому классу в иерархии.isAssignableFrom() - находит View, которые являются экземпляром указанного класса или его наследников. withClassName() - использует Hamcrest matcher для имени класса. Пример: withClassName(endsWith('Button')).
Матчеры иерархии (Hierarchy Matchers)
Поиск элементов относительно их родителей, детей или соседей.hasParent() - проверяет, что View находится внутри указанного родителя. hasChild() - проверяет, что View содержит определенный дочерний элемент. isDescendantOfA() - проверяет принадлежность к любому предку.
Hamcrest Matchers в Espresso
Использование библиотеки Hamcrest для создания гибких условий поиска View.Hamcrest предоставляет матчеры: allOf (И), anyOf (ИЛИ), not (НЕ), equalTo, containsString, startsWith. Комбинируя их, можно создавать сложные селекторы.
Повторение важного правила: при комбинировании allOf с несколькими условиями, если одно из них не специфично (например, isDisplayed()), Espresso может выбросить AmbiguousViewMatcherException. Используйте уникальные идентификаторы.
Использование hasSibling() для поиска элемента относительно соседнего. Например, найти EditText, рядом с которым есть TextView с текстом 'Имя'.
Работа с адаптерами и RecyclerViewActions
Углубленное изучение методов для списков и их адаптеров.onData() требует указания матчера для данных в адаптере. inAdapterView() устарел, используйте inRoot() и isPlatformPopup() для Spinner. atPosition() для onData требует, чтобы элемент был виден или загружен.
Для чего в первую очередь используется фреймворк Espresso в разработке под Android?
Для написания автоматизированных UI тестов, которые имитируют действия пользователя и проверяют состояние интерфейса.
Espresso — это официальный фреймворк от Google для создания надежных UI тестов. Он позволяет автоматизировать проверку корректности работы интерфейса, взаимодействуя с элементами экрана.
Для компиляции кода Java в байт-код.
Для управления версиями приложения.
Какую основную информацию можно получить с помощью Layout Inspector для написания тестов Espresso?
Полную иерархию View, их ID, текст, классы и другие атрибуты для создания точных ViewMatchers.