# Espresso

Published articles for Espresso.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Kaspresso: cравниваем скриншоты и упрощаем проверку дизайна

DevFeed: [Kaspresso: cравниваем скриншоты и упрощаем проверку дизайна](<https://devfeed.tech/articles/kaspresso-c-23063.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/kaspersky/articles/1015854/>)

Author: Nikita-e57 ("Лаборатория Касперского")

Published: 2026-03-31T14:20:02Z

Content type: tutorial

Language: ru

Sources: ["Лаборатория Касперского" RU](<https://devfeed.tech/sources/ru-2.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [kaspresso](<https://devfeed.tech/tags/kaspresso.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [tag-1623e2d0e12a](<https://devfeed.tech/tags/tag-1623e2d0e12a.md>), [tag-20e69fa9a855](<https://devfeed.tech/tags/tag-20e69fa9a855.md>), [tag-831b63de9433](<https://devfeed.tech/tags/tag-831b63de9433.md>), [tag-909d03ed6dc5](<https://devfeed.tech/tags/tag-909d03ed6dc5.md>), [tag-95d977179ee2](<https://devfeed.tech/tags/tag-95d977179ee2.md>), [tag-c34eb7014865](<https://devfeed.tech/tags/tag-c34eb7014865.md>), [tag-e932065bc8da](<https://devfeed.tech/tags/tag-e932065bc8da.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A Russian-language tutorial introduces Kaspresso's screenshot comparison feature for Android UI tests. It explains how to integrate Kaspresso, capture a baseline screenshot, compare later test runs, and handle storage permissions across Android API versions.

### Source excerpt

Хабр, привет! Меня зовут Никита Евдокимов, я работаю старшим разработчиком в "Лаборатории Касперского", а также являюсь мейнтейнером репозитория Kaspresso. Это наш фреймворк для тестирования пользовательских интерфейсов на Android, основанный на Kakao, Espresso и UI Automator. Недавно в нем появилась новая функция: сравнение скриншотов. С ней можно записывать скриншоты приложения, а на последующих прогонах автотестов сравнивать их с новыми скриншотами и отслеживать изменения в интерфейсе. В статье я пошагово покажу, как с ней работать, со скриншотами и примерами кода. Материал подойдет для как опытных, так и начинающих специалистов в области автотестирования, а также для дизайнеров: функция облегчает автоматическое тестирование, с ней быстрее и проще проверять, соответствует ли разработанное приложение макету. Читать далее

## Deprecating idling resource libraries

DevFeed: [Deprecating idling resource libraries](<https://devfeed.tech/articles/deprecating-idling-resource-libraries-20933.md>)

Original publisher: [Read original article](<https://jakewharton.com/deprecating-idling-resource-libraries/>)

Published: 2025-02-19T00:00:00Z

Content type: article

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Monitoring](<https://devfeed.tech/topics/monitoring.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [blog-post](<https://devfeed.tech/tags/blog-post.md>), [compose](<https://devfeed.tech/tags/compose.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

The article announces the deprecation of the RxIdler and okhttp-idling-resource libraries. It argues that tests should wait for user-visible UI conditions rather than internal application mechanisms, and points to Compose testing APIs and custom condition-waiting approaches for View-based layouts.

### Source excerpt

When Espresso was made public a decade ago, one of its banner features was the "idling resource" concept. This monitored the main thread and any background thread pools to prevent your test from progressing until the app became idle. Waiting until idle generally increased the stability of tests since at that point the UI should be stable. We released RxIdler and okhttp-idling-resource for monitoring RxJava schedulers and OkHttp's dispatcher, respectively. Today I am deprecating both libraries. In the years since their release, I have become disillusioned with the idling resource mechanism-and I'm not alone. Like using R.id to target views, idling resources expose the internals of your application to the testing framework in a way that no real user can match. The point of building tests in the robot pattern was to describe interaction at a high-level. If you can't read a UI test to someone over the phone interacting with the real app then it probably encodes implementation detail. "Okay dad, now wait for OkHttp's Dispatcher to report itself as idle before clicking 'continue'." Yeah... no. What do we do as real users? We wait until some UI condition is met which signals our ability to progress. "Okay dad, now wait for the 'continue' button to turn green before clicking it." Much better. We don't care how the application is performing the work nor the means by which it signals the UI that it is complete. Moreover, test failures that occur based on condition waits are failures which can occur in the wild. I've been sitting on these deprecations and this blog post for a few years now. Telling you to switch to a new technique without actually demonstrating it is not great. Turns out that around the same time Google was also changing their tune on idling resources. That guidance has since been promoted to the official documentation as well. These links demonstrate how to wait on conditions using new built-in Compose testing APIs. For View-based layouts, you can write a custo

## Espresso Machine PID controller using ESP32 and RainMaker

DevFeed: [Espresso Machine PID controller using ESP32 and RainMaker](<https://devfeed.tech/articles/espresso-machine-pid-controller-using-esp32-and-rainmaker-13663.md>)

Original publisher: [Read original article](<https://developer.espressif.com/blog/2024/06/espresso-machine/>)

Author: John Lee

Published: 2024-06-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Blog on Developer Portal](<https://devfeed.tech/sources/blog-on-developer-portal.md>)

Topics: [ESP32](<https://devfeed.tech/topics/esp32.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [connectivity](<https://devfeed.tech/tags/connectivity.md>), [cost](<https://devfeed.tech/tags/cost.md>), [esp-idf](<https://devfeed.tech/tags/esp-idf.md>), [esp32](<https://devfeed.tech/tags/esp32.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [machine](<https://devfeed.tech/tags/machine.md>), [rainmaker](<https://devfeed.tech/tags/rainmaker.md>)

### AI overview

This article describes upgrading a low-cost espresso machine with an ESP32 for control and connectivity. It discusses coffee channeling, pre-infusion, and using a PID controller algorithm to improve brewing consistency.

### Source excerpt

This article is about upgrading a regular low cost Espresso machine by adding an ESP32 for both control and connectivity.

## Efficient Testing with Robolectric & Roborazzi Across Many UI States, Devices and Configurations

DevFeed: [Efficient Testing with Robolectric & Roborazzi Across Many UI States, Devices and Configurations](<https://devfeed.tech/articles/efficient-testing-with-robolectric-roborazzi-across-many-ui-states-devices-and-configurations-25690.md>)

Original publisher: [Read original article](<https://sergiosastre.hashnode.dev/efficient-testing-with-robolectric-roborazzi-across-many-ui-states-devices-and-configurations>)

Author: Sergio Sastre Florez

Published: 2023-11-09T21:45:00Z

Content type: tutorial

Language: en

Sources: [Sergio's little tech corner](<https://devfeed.tech/sources/sergio-s-little-tech-corner.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [screenshot-testing](<https://devfeed.tech/topics/screenshot-testing.md>), [ui-testing](<https://devfeed.tech/topics/ui-testing.md>), [Android](<https://devfeed.tech/topics/android.md>), [Software Process](<https://devfeed.tech/topics/software-process.md>), [enum](<https://devfeed.tech/topics/enum.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [devices](<https://devfeed.tech/tags/devices.md>), [emulator](<https://devfeed.tech/tags/emulator.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [google](<https://devfeed.tech/tags/google.md>), [robolectric](<https://devfeed.tech/tags/robolectric.md>), [roborazzi](<https://devfeed.tech/tags/roborazzi.md>), [screenshot-testing](<https://devfeed.tech/tags/screenshot-testing.md>), [screenshots](<https://devfeed.tech/tags/screenshots.md>), [software](<https://devfeed.tech/tags/software.md>), [software-process](<https://devfeed.tech/tags/software-process.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-testing](<https://devfeed.tech/tags/ui-testing.md>)

### AI overview

This tutorial explains how to use Robolectric and Roborazzi for screenshot testing across many UI states, devices, and configurations. It introduces parameterized tests, enum-based UI states, and device qualifiers for generating screenshots efficiently.

### Source excerpt

Robolectric is a popular UI testing tool from Google that enables running UI tests without a physical device or emulator. It supports most androidx.test APIs, like Espresso, ActivityScenario & FragmentScenario as well as ComposeTestRule. Robolectric ...

## Adding Compose to Existing Espresso Tests with createEmptyComposeRule()

DevFeed: [Adding Compose to Existing Espresso Tests with createEmptyComposeRule()](<https://devfeed.tech/articles/adding-compose-to-existing-espresso-tests-with-createemptycomposerule-25123.md>)

Original publisher: [Read original article](<https://handstandsam.com/2023/04/12/adding-compose-to-existing-espresso-tests-with-createemptycomposerule/>)

Author: Sam Edwards

Published: 2023-04-12T13:46:30Z

Content type: tutorial

Language: en

Sources: [Handstand Sam](<https://devfeed.tech/sources/handstand-sam.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Instrumentation](<https://devfeed.tech/topics/instrumentation.md>), [test](<https://devfeed.tech/topics/test.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [instrumentation](<https://devfeed.tech/tags/instrumentation.md>), [test](<https://devfeed.tech/tags/test.md>), [tests](<https://devfeed.tech/tags/tests.md>), [updates](<https://devfeed.tech/tags/updates.md>)

### AI overview

This tutorial explains how to interact with Jetpack Compose elements in existing Android Espresso instrumentation tests without changing the test's existing Activity behavior. It recommends using createEmptyComposeRule() instead of rules that create or launch an Activity.

### Source excerpt

As the documentation says, you can combine both Espresso and Compose in an Android instrumentation test. In order to interact with Compose in an instrumentation test you need a ComposeTestRule. Problem Typically you would create a ComposeTestRule with createComposeRule() in a part of your app that is compose only, but that will create a blank [...]

## An introduction to snapshot testing on Android in 2021 📸

DevFeed: [An introduction to snapshot testing on Android in 2021 📸](<https://devfeed.tech/articles/an-introduction-to-snapshot-testing-on-android-in-2021-25686.md>)

Original publisher: [Read original article](<https://sergiosastre.hashnode.dev/an-introduction-to-snapshot-testing-on-android-in-2021>)

Author: Sergio Sastre Florez

Published: 2021-08-09T20:07:20Z

Content type: tutorial

Language: en

Sources: [Sergio's little tech corner](<https://devfeed.tech/sources/sergio-s-little-tech-corner.md>)

Topics: [screenshot-testing](<https://devfeed.tech/topics/screenshot-testing.md>), [Android](<https://devfeed.tech/topics/android.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [ui-testing](<https://devfeed.tech/topics/ui-testing.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [screenshot-testing](<https://devfeed.tech/tags/screenshot-testing.md>), [testing](<https://devfeed.tech/tags/testing.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-testing](<https://devfeed.tech/tags/ui-testing.md>), [uiautomator](<https://devfeed.tech/tags/uiautomator.md>)

### AI overview

This introduction explains snapshot testing on Android, also known as screenshot testing. It describes how snapshot tests compare rendered views with stored reference images, how they complement interaction-focused UI tests, and how they can detect visual regressions across commits.

### Source excerpt

Snapshot testing (also called screenshot testing) has been in the Android world for a while, since 8th October 2015, when Facebook open sourced the first version of their snapshot testing library. They are a special type of UI tests that inflate a vi...

## Decreasing Applitools Android Boilerplate with Kotlin and JUnit

DevFeed: [Decreasing Applitools Android Boilerplate with Kotlin and JUnit](<https://devfeed.tech/articles/decreasing-applitools-android-boilerplate-with-kotlin-and-junit-20360.md>)

Original publisher: [Read original article](<https://engineering.ziffmedia.com/decreasing-applitools-android-boilerplate-with-kotlin-and-junit-46c61b5e10ce?source=rss----d6bb34696ef5---4>)

Author: Ben Boral

Published: 2019-11-15T17:46:53Z

Content type: tutorial

Language: en

Sources: [RetailMeNot](<https://devfeed.tech/sources/retailmenot.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Boilerplate](<https://devfeed.tech/topics/boilerplate.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [applitools](<https://devfeed.tech/tags/applitools.md>), [boilerplate](<https://devfeed.tech/tags/boilerplate.md>), [code](<https://devfeed.tech/tags/code.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [junit](<https://devfeed.tech/tags/junit.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This tutorial shows how to reduce boilerplate in Applitools visual regression tests for Android by using Kotlin and JUnit. It describes encapsulating repeated setup and cleanup in a helper and JUnit rule so the test code is more concise and easier to maintain.

### Source excerpt

Background At RetailMeNot, we are excited by the promise of automating visual regression tests with Applitools. In this post, I'll show how to make writing Applitools tests for Android a cinch. We'll start with the official integration guide recommendations and then use JUnit and Kotlin features to make our tests concise and maintainable. This post assumes the reader is familiar with Applitools visual testing. Our Starting Point: lots of boilerplate code Applitools's official integration guide for Espresso recommends a test that looks approximately like the below code block. I'll explain each line of this snippet later in the article. But for now, notice the excessive setup code and cleanup code that's getting in the way of our actual test code. This boilerplate would need to be copied for every test. https://medium.com/media/c042e70c7b2c423afde35fc101bc6e31/hrefThe Solution: a much simpler test We can reduce the boilerplate to achieve the following test. By stripping away the setup and cleanup as much as possible, we are left with the kernel of the test. In doing so, the purpose of the test is much easier to comprehend. ApplitoolsHelper, on line 2, has encapsulated the setup and cleanup. This will make long-term maintenance easier, because when the Applitools APIs change, we'll only need to update them in the one location. https://medium.com/media/de1efe74c1f65542057b061fd3b4ad35/hrefThe Required Steps to Run an Applitools Test Before diving into the helper code that enables our concise test, let's review the steps involved in an Applitools visual test: val eyes = Eyes() eyes.apiKey = "YOUR_API_KEY" eyes.appName = "YOUR_APP_NAME" We must initialize the Applitools SDK and set our API key and app name. This is going to be the same for every test in our suite. We will extract this code into a JUnit test rule. eyes.open("TEST_NAME"); This starts the Applitools test session. This must be called with a unique test name for each test. We will use a lambda expression, expl

## Firebase Test Lab December 2017 Update

DevFeed: [Firebase Test Lab December 2017 Update](<https://devfeed.tech/articles/firebase-test-lab-december-2017-update-16242.md>)

Original publisher: [Read original article](<https://firebase.blog/posts/2017/12/firebase-test-lab-december-2017-update>)

Author: Doug Stevenson

Published: 2017-12-12T00:00:00Z

Content type: release

Language: en

Sources: [Firebase Blog](<https://devfeed.tech/sources/firebase-blog.md>)

Topics: [Firebase](<https://devfeed.tech/topics/firebase.md>), [Android](<https://devfeed.tech/topics/android.md>), [Test coverage](<https://devfeed.tech/topics/coverage.md>), [test-coverage](<https://devfeed.tech/topics/test-coverage.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Script](<https://devfeed.tech/topics/script.md>), [APK](<https://devfeed.tech/topics/apk.md>), [App](<https://devfeed.tech/topics/app.md>), [JSON](<https://devfeed.tech/topics/json.md>)

Tags: [2017](<https://devfeed.tech/tags/2017.md>), [android](<https://devfeed.tech/tags/android.md>), [android-testing](<https://devfeed.tech/tags/android-testing.md>), [apk](<https://devfeed.tech/tags/apk.md>), [devices](<https://devfeed.tech/tags/devices.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [huawei](<https://devfeed.tech/tags/huawei.md>), [json](<https://devfeed.tech/tags/json.md>), [news](<https://devfeed.tech/tags/news.md>), [screenshots](<https://devfeed.tech/tags/screenshots.md>), [test-coverage](<https://devfeed.tech/tags/test-coverage.md>), [test-lab](<https://devfeed.tech/tags/test-lab.md>), [testing](<https://devfeed.tech/tags/testing.md>), [update](<https://devfeed.tech/tags/update.md>)

### AI overview

Firebase Test Lab's December 2017 update introduces Robo scripts for guiding automated Android tests through specific actions and screens, clusters screenshots by display characteristics, and adds several test devices.

### Source excerpt

News, tutorials, and updates from the Firebase team.

## Leveraging The Robot Pattern For Espresso Tests

DevFeed: [Leveraging The Robot Pattern For Espresso Tests](<https://devfeed.tech/articles/leveraging-the-robot-pattern-for-espresso-tests-22820.md>)

Original publisher: [Read original article](<http://androidessence.com/leveraging-the-robot-pattern-for-espresso-tests/>)

Author: Adam McNeilly

Published: 2017-07-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Android](<https://devfeed.tech/topics/android.md>), [Development](<https://devfeed.tech/topics/development.md>), [Cheat sheet](<https://devfeed.tech/topics/cheatsheet.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [automated](<https://devfeed.tech/tags/automated.md>), [cheat-sheet](<https://devfeed.tech/tags/cheat-sheet.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A tutorial on using the robot pattern to structure Espresso tests for Android applications, making tests easier to write and update as an app changes. It introduces Espresso, reviews core APIs, and demonstrates testing an add-person workflow.

### Source excerpt

Espresso is a testing framework for Android that allows developers to write automated tests for their applications. The benefit of automated testing is that you can write a test plan, and simply hit run and have all of the important features in your app tested effortlessly, and arguably more consistent and thorough than manual testing. There is no doubt that it is a lot faster. However, one of the lesser known development patterns for automated testing is the robot pattern, which makes writing tests much easier while providing a painless way to update tests whenever your app changes. Let's take a deeper dive into what makes the robot pattern so powerful, and how to implement it in your next test suite.

## Start using Firebase Test Lab for Android at no charge

DevFeed: [Start using Firebase Test Lab for Android at no charge](<https://devfeed.tech/articles/start-using-firebase-test-lab-for-android-at-no-charge-16156.md>)

Original publisher: [Read original article](<https://firebase.blog/posts/2016/11/start-using-firebase-test-lab-for-android-at-no-charge>)

Author: Doug Stevenson

Published: 2016-11-17T00:00:00Z

Content type: news

Language: en

Sources: [Firebase Blog](<https://devfeed.tech/sources/firebase-blog.md>)

Topics: [Firebase](<https://devfeed.tech/topics/firebase.md>), [Android](<https://devfeed.tech/topics/android.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [google](<https://devfeed.tech/tags/google.md>), [launch](<https://devfeed.tech/tags/launch.md>), [test-lab](<https://devfeed.tech/tags/test-lab.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

Firebase Test Lab for Android became available to Firebase Spark and Flame plan users without requiring a credit card or paid Blaze upgrade. Spark and Flame projects received daily quotas for physical and virtual device tests, with limits on devices and test duration.

### Source excerpt

News, tutorials, and updates from the Firebase team.

## Customizing the ListView

DevFeed: [Customizing the ListView](<https://devfeed.tech/articles/customizing-the-listview-30567.md>)

Original publisher: [Read original article](<https://ryanharter.com/blog/2014/02/customizing-the-listview/>)

Published: 2014-02-23T07:00:00Z

Content type: tutorial

Language: en

Sources: [Blogs on Ryan Harter](<https://devfeed.tech/sources/blogs-on-ryan-harter.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [App](<https://devfeed.tech/topics/app.md>), [Android Library](<https://devfeed.tech/topics/android-library.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-library](<https://devfeed.tech/tags/android-library.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [app](<https://devfeed.tech/tags/app.md>), [espresso](<https://devfeed.tech/tags/espresso.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A tutorial on customizing an Android ListView in Android Studio by styling the list, adding sample data, building a custom adapter with custom layouts, and introducing Espresso-based testing through a Gradle project.

### Source excerpt

In the last post we created a basic Android project using Android Studio templates. While it's great that we have a fully functioning master/detail style app, it does look a bit bare. In this post, we'll change this by styling our list view, incorporating (sort of) real data to feed our list. We'll make a custom adapter to drive our list with custom layouts, and introduce testing into the mix to ensure that our app continues to perform as expected.