Created by AIImproved by people

Riqli · living documents · updated continuously

Where AI knowledge meets human practice.

Share with friends
image

Тестирование пользовательского интерфейса 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 тестирование)

sections

Введение в тестирование UI с Espresso

Обзор возможностей фреймворка Espresso для создания автоматизированных тестов пользовательского интерфейса в Android. Рассматриваются основные компоненты и принципы работы с библиотекой.
contents

Espresso предоставляет мощный и простой API для симуляции действий пользователя и проверки состояния View. Он работает синхронно с потоком UI, устраняя необходимость в сложных ожиданиях.

sections

Layout Inspector: Анализ иерархии UI

Использование инструмента Layout Inspector для изучения структуры и свойств элементов интерфейса перед написанием тестов.
contents

Layout Inspector позволяет визуально исследовать иерархию View в запущенном приложении. Это критически важно для выбора правильных Matcher'ов при поиске элементов в тестах Espresso.

sections

ViewMatchers: Поиск UI компонентов

Детальный разбор всех типов Matcher'ов для поиска элементов на экране устройства или эмулятора.
contents

Библиотека Hamcrest лежит в основе ViewMatchers. Основные матчеры: withId, withText, withClassName, hasFocus, а также их комбинации с помощью allOf и anyOf.

sections

ViewActions: Симуляция действий пользователя

Изучение методов ViewActions для эмуляции кликов, ввода текста, прокрутки и других взаимодействий с UI.
contents

Ключевые ViewActions включают: click(), typeText(), clearText(), scrollTo(), pressBack(), swipeLeft()/Right()/Up()/Down() и closeSoftKeyboard().

sections

ViewAssertions: Проверка состояния UI

Методы проверки ожидаемого состояния элементов интерфейса после выполнения действий.
contents

ViewAssertions позволяют проверить, отображается ли элемент, имеет ли он определенный текст, включен ли, или соответствует ли сложному условию через matches с произвольным Matcher.

sections

RootViewMatchers: Работа с диалогами и выпадающими окнами

Поиск элементов в нестандартных окнах, таких как диалоги, меню и всплывающие сообщения (Toast).
contents

Стандартный onView ищет в корневом окне активности. Для диалогов нужно использовать inRoot с матчерами isDialog() или isPlatformPopup(), или withDecorView для Toast.

sections

DataInteraction: Тестирование AdapterView

Специальные методы для взаимодействия с элементами внутри ListView, GridView и Spinner.
contents

Для AdapterView используется onData() вместо onView(). onData() работает с объектами данных в адаптере, а не с самими View. Это позволяет кликать по элементам, которые еще не отображены на экране.

sections

RecyclerViewActions: Тестирование RecyclerView

Специализированные действия для RecyclerView, который пришел на смену ListView.
contents

Библиотека espresso-contrib предоставляет RecyclerViewActions. Основные методы: actionOnItem(), actionOnItemAtPosition(), scrollTo(), scrollToPosition().

sections

Espresso Test Recorder: Автоматическая запись тестов

Инструмент Android Studio для записи действий в приложении и автоматической генерации кода тестов Espresso.
contents

Espresso Test Recorder позволяет записывать взаимодействие с приложением и добавлять проверки (assertions) через контекстное меню. Он генерирует готовый Java/Kotlin код, который можно скопировать в тестовый класс.

sections

Kotlin DSL для Espresso

Использование Domain Specific Language на Kotlin для упрощения написания тестов Espresso.
contents

DSL позволяет писать тесты более читаемо, например: onView(withId(R.id.button)).perform(click()) можно заменить на click(R.id.button). Библиотека barista или самописные extension functions.

sections

Аннотации TestSize: Small, Medium, Large

Классификация тестов по времени выполнения и области покрытия с помощью аннотаций @SmallTest, @MediumTest, @LargeTest.
contents

Аннотации помогают организовать тесты и запускать определенные группы: @SmallTest (быстрые, до 100ms), @MediumTest (интеграционные, до 2s), @LargeTest (полные UI тесты или энд-ту-энд, больше 2s).

sections

EspressoWeb API: Тестирование WebView

Возможности фреймворка для тестирования гибридных приложений с компонентом WebView.
contents

Библиотека espresso-web позволяет искать элементы внутри WebView с помощью WebElement и Atom. Поддерживаются действия: webClick(), webKeys() и проверки: webMatches().

sections

Настройка устройства для UI тестов

Подготовка эмулятора или реального устройства для стабильного запуска тестов Espresso.
contents

Необходимо отключить анимации (в настройках разработчика): масштаб анимации окна, масштаб анимации перехода, длительность анимации. Это предотвращает flaky тесты. Также Espresso требует API 16+.

sections

Запуск тестов из терминала

Команды Gradle для выполнения отдельных тестов, групп тестов или всех тестов в проекте.
contents

Основные команды: ./gradlew test (юнит-тесты JVM), ./gradlew connectedAndroidTest (инструментальные тесты, включая Espresso на устройстве), ./gradlew -Pandroid.testInstrumentationRunnerArguments.class=com.example.MyTest (запуск одного класса).

sections

Матчеры свойств UI (UI Properties)

Поиск элементов на основе их визуальных свойств, таких как цвет, размер, положение.
contents

Примеры матчеров: withEffectiveVisibility() (проверка видимости VISIBLE/INVISIBLE/GONE), hasFocus(), isSelected(), isEnabled(), hasError() (для текстовых полей).

sections

Матчеры ввода (Input Matchers)

Специализированные матчеры для работы с полями ввода и клавиатурой.
contents

isInputMethodTarget() - проверяет, является ли View целью для ввода с клавиатуры. hasImeAction() - проверяет действие на клавиатуре (Done, Next, Search).

sections

Class ViewMatchers

Поиск элементов по их классу или родительскому классу в иерархии.
contents

isAssignableFrom() - находит View, которые являются экземпляром указанного класса или его наследников. withClassName() - использует Hamcrest matcher для имени класса. Пример: withClassName(endsWith('Button')).

sections

Матчеры иерархии (Hierarchy Matchers)

Поиск элементов относительно их родителей, детей или соседей.
contents

hasParent() - проверяет, что View находится внутри указанного родителя. hasChild() - проверяет, что View содержит определенный дочерний элемент. isDescendantOfA() - проверяет принадлежность к любому предку.

sections

Hamcrest Matchers в Espresso

Использование библиотеки Hamcrest для создания гибких условий поиска View.
contents

Hamcrest предоставляет матчеры: allOf (И), anyOf (ИЛИ), not (НЕ), equalTo, containsString, startsWith. Комбинируя их, можно создавать сложные селекторы.

contents

Повторение важного правила: при комбинировании allOf с несколькими условиями, если одно из них не специфично (например, isDisplayed()), Espresso может выбросить AmbiguousViewMatcherException. Используйте уникальные идентификаторы.

contents

Использование hasSibling() для поиска элемента относительно соседнего. Например, найти EditText, рядом с которым есть TextView с текстом 'Имя'.

sections

Работа с адаптерами и RecyclerViewActions

Углубленное изучение методов для списков и их адаптеров.
contents

onData() требует указания матчера для данных в адаптере. inAdapterView() устарел, используйте inRoot() и isPlatformPopup() для Spinner. atPosition() для onData требует, чтобы элемент был виден или загружен.


questions

Для чего в первую очередь используется фреймворк Espresso в разработке под Android?

answersCorrect

Для написания автоматизированных UI тестов, которые имитируют действия пользователя и проверяют состояние интерфейса.

explanations

Espresso — это официальный фреймворк от Google для создания надежных UI тестов. Он позволяет автоматизировать проверку корректности работы интерфейса, взаимодействуя с элементами экрана.

answersWrong

Для компиляции кода Java в байт-код.

answersWrong

Для управления версиями приложения.


questions

Какую основную информацию можно получить с помощью Layout Inspector для написания тестов Espresso?

answersCorrect

Полную иерархию View, их ID, текст, классы и другие атрибуты для создания точных ViewMatchers.