Check out how Globo improves streaming experience and achieves omnichannel growth with HeadSpin
Close
Getting Started with Espresso : A Complete Guide

Getting Started with Espresso : A Complete Guide

July 22, 2022
 by 
Shinji KanaiShinji Kanai
Shinji Kanai

To be a great Android developer, you need to be able to write code that is both reliable and concise. This can be a difficult task, but it's made much easier with the help of Espresso, a robust testing framework for Android. 

Espresso is a testing framework for Android that makes it easy to write reliable and concise code. It was created by Google and is now the standard testing framework for Android development.

Check: Different Types of Test Automation Frameworks

In this guide, we'll walk you through the basics of Espresso and show you how to use it to test your apps.

What is Espresso?

Espresso is a Testing Framework for Android that makes writing reliable and concise UI tests easy. It was created by Google and introduced in 2012. Since then, it has become the standard tool for testing Android applications.

Espresso is tightly integrated with the Android SDK tools, making it easy to set up and run tests. It also has excellent support for running tests on real devices and emulators.

Espresso is a powerful testing tool that can be used to test all kinds of Android applications. This guide will focus on how to use Espresso to test your app's user interface.

Also check: A complete guide to user interface testing

Why was Espresso Developed?

Espresso was developed to make writing reliable and concise code for testing Android applications easier. The framework is designed to be simple and easy to use, making it an excellent choice for Android developers who want to get started with automated testing.

Appium vs. Espresso vs. XCUITest: Which is the best tool for mobile automation testing?

Several different testing frameworks are available for mobile automation testing, each with its strengths and weaknesses. This section will compare three of the most popular frameworks: Appium, Espresso, and XCUITest.

Appium is a cross-platform testing framework that supports both Android and iOS applications. It has a large user base and a wide range of features, but it can be challenging to learn and use.

Espresso is a testing framework for Android that Google developed. It's simple to use and well-integrated with the Android SDK, making it an excellent choice for Android developers.

XCUITest is a testing framework for iOS applications developed by Apple. It's easy to use and well-integrated with the XCode development environment, making it a good choice for iOS developers.

Read: iOS Test Automation Tools - The Top Frameworks

Which Testing Framework is Best?

The answer depends on your needs and preferences. If you want a cross-platform solution that supports both Android and iOS applications, Appium is a good option. If you're an Android developer looking for a simple, well-integrated testing framework, Espresso is a good choice. If you're an iOS developer looking for a testing framework that is easy to use and well-integrated with XCode, XCUITest is a good option.

If you want all these tools to be at your fingertips whenever you want to test your mobile applications, then HeadSpin might be the perfect fit. HeadSpin offers a complete mobile testing solution and all these tools.

What are the Benefits of Using Espresso?

Espresso has a number of benefits that make it an excellent choice for automated testing on Android:

  • It is easy to set up and use.
  • It is tightly integrated with the Android SDK tools.
  • It has excellent support for running tests on real devices and emulators.
  • It is potent and can be used to test all kinds of Android applications.
  • It's open-source and well-documented.
  • Google is constantly improving it.

Types of espresso automation tests

Espresso offers two types of tests for android applications, both of them are briefly explained below:

Functional tests: These test the functionality of your app and check that it works as expected. Espresso functional tests test the functionality of your app and check that it works as expected. They verify that the app behaves as expected under different conditions.

Functional tests can be used to verify that the app responds correctly to user input, displays the correct data, and behaves the way you expect it to. They can also be used to test the flow of your app and ensure that all the parts are working together correctly.

Functional tests are essential because they help ensure that your app is reliable and bug-free. By running functional tests regularly, you can catch and fix any problems before they cause severe damage to your app.

Also read: A Complete Guide to Functional Testing

UI tests: These test your app's user interface and check that it looks and feels correct. They can be used to check the layout of your app, verify the appearance of text and icons, and test the functionality of buttons and other user interface elements.

To create a UI test with Espresso, you must create an AndroidTestCase subclass. This class will contain all of your UI tests.

In this class, you can write tests to check your activity's layout, verify the appearance of text and icons, and test the functionality of buttons and other user interface elements. You can also use it to test the flow of your app and ensure that all the parts are working together correctly.

Espresso Basics - Setting up your environment.

Before you can start writing Espresso tests, you need to set up your development environment. This process is well-documented by Google, and it's very straightforward.

You'll need the following:

  • The Android SDK installed on your computer
  • Android Studio 2.0 or higher
  • A device or emulator running Android 4.1 (Jelly Bean) or higher

Clone a sample GitHub project

  1. Navigate to “HeadSpin blog sample” repository.
  2. Click Code and clone the repository. 
  3. Move to “00-getting-started-with-espresso” folder in the cloned location.

Running your first Espresso test

Now that you have your environment set up, it's time to run your first Espresso test. We'll start by running a simple test that checks if the text "Hello, world!" is displayed on the screen.

To do this, run the following gradle command to run tests.

On macOS or Linux

  1. Start an Android emulator or connect an Android device
  2. Run ./gradlew connectedAndroidTest

On Windows

  1. Start an Android emulator or connect an Android device
  2. Run gradlew.bat connectedAndroidTest

You should see the following output:


. . . (3 tests)
PASSED: testHelloWorld()
Congratulations! You've just written and run your first Espresso test.

To learn more about the writing and executing tests on Espresso, check this github repository

The contents of the main test file “HelloWorldTest.kt” should look like this:


package io.headspin.helloworld

import androidx.test.espresso.Espresso
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4

import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Rule

@RunWith(AndroidJUnit4::class)
class HelloWorldTest {

    @get:Rule
    val activityRule = ActivityScenarioRule(MainActivity::class.java)

    @Test
    fun testHelloWorld() {
        Espresso.onView(ViewMatchers.withText("Hello, world!"))
            .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
    }
}

In this test, we're using Espresso to find a view with the text "Hello, world!" and then check that it's displayed on the screen.

Learning How to Use Espresso

Now that you've written your first Espresso test, it's time to learn how to use this powerful testing tool. In this section, we'll cover the basics of Espresso and show you how to use it to test your app's user interface.

Finding views with Espresso

One of the most important things you need to know how to do with Espresso is to find views. To do this, you can use one of the many available ViewMatcher classes.

For example, if you want to find a view by its text content, you can use the withText() method:


Espresso.onView(ViewMatchers.withText("Hello, world!"))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()));

If you want to find a view by its ID, you can use the withId() method:


Espresso.onView(ViewMatchers.withId(R.id.button))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()));

There are many other ViewMatcher classes that you can use to find views, and we'll cover some of them in more detail later on. For now, though, these should be enough to get you started.

 Checking if views are displayed with Espresso

Once you've found the view you want to test; the next step is to check if it's displayed on the screen. You can do this with the ViewAssertion class:


Espresso.onView(ViewMatchers.withText("Hello, world!"))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()));

In this example, we use the matches() method to check if the view is displayed. This method takes a ViewMatcher as an argument, and we're using the isDisplayed() matcher to check if the view is visible on the screen.

Testing if views are enabled or disabled

Another common task when testing with Espresso is checking if views are enabled or disabled. You can do this with the isEnabled() method:


Espresso.onView(ViewMatchers.withId(R.id.button_first))
.check(ViewAssertions.matches(ViewMatchers.isEnabled()));

In this example, we use the isEnabled() matcher to check if a button is enabled. This is handy for testing if a user can interact with a particular view.

Performing actions on views with Espresso

In addition to finding and checking views, Espresso allows you to perform actions on them. For example, if you want to click on a button, you can use the click() method:


import androidx.test.espresso.action.ViewActions
…
Espresso.onView(ViewMatchers.withId(R.id.button_first))
.perform(ViewActions.click());

In this example, we're using the click() action to simulate a user clicking on a button. There are many other actions that you can perform on views, and we'll cover some of them in more detail later on.

 Testing for view interactions with Espresso

One of the most powerful features of Espresso is its ability to test for view interactions. This means you can write tests that check if a user can interact with your app in the way you expect them to.

For example, let's say you have an app with a button that starts a new activity when it's clicked. You can use Espresso to write a test that checks if the button launches the new activity:


Espresso.onView(ViewMatchers.withId(R.id.button_first))
.perform(ViewActions.click());
Espresso.onView(ViewMatchers.withId(R.id.button_second))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()));

In this example, we're using the click() action to simulate a user clicking on the button, and then we're using the check() method to assert that the new activity is displayed. This is a simple example, but you can use Espresso to write much more complex tests for view interactions.

Cleaning up after your tests with Espresso

When you're finished writing your tests, cleaning up after yourself is essential. Espresso provides a convenient way to do this with the pressBack() method:


Espresso.onView(ViewMatchers.withText("Hello, world!"))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
Espresso.pressBackUnconditionally();

In this example, we're using the pressBack() method to simulate a user pressing the back button. This is handy for ensuring that your app is in the state you expect it to be when your tests are finished.

Best practices for writing espresso automation tests

Now that you know the basics of Espresso, it's time to learn some best practices for writing espresso automation tests.

Keep your tests small and focused.

When writing espresso tests, keeping them small and focused is essential. This will help you to avoid creating complex and difficult-to-maintain tests.

Write tests that are easy to understand and maintain.

When writing espresso tests, it's essential to ensure they are easy to understand and maintain. This will help you avoid confusion or problems when modifying your test code.

Be consistent with your naming conventions.

It's essential to be consistent with your naming conventions when writing espresso tests. This will help you to avoid any confusion or problems when reading your test code.

Avoid duplication in your test code.

Duplication in your test code can lead to confusion and problems down the road. It's essential to avoid repetition as much as possible when writing espresso tests.

Use the Espresso idling resource mechanism to avoid flakiness

The Espresso idling resource mechanism can help you avoid flakiness in your espresso tests. This keeps your tests stable and prevents potential issues.

In general, it's best to keep your tests small and focused. This will make them easier to understand and maintain. It's also a good idea to be consistent with your naming conventions. This will help you keep track of your tests and make them easier to debug if necessary. Finally, try to avoid duplication in your test code as much as possible. This will help you to keep your tests clean and maintainable.

Tools and libraries for espresso automation testing

Some tools and libraries can help you with espresso automation testing. Here are some of the most popular:

Espresso Test Recorder: The Espresso Test Recorder is an excellent tool for recording and playback espresso tests. It can help you to create and edit espresso tests quickly. It's also a great way to learn the basics of espresso automation testing.

UI Automator Viewer: The UI Automator Viewer is an excellent tool for visualizing the hierarchy of views in your app. It can help you understand your app's structure and find views more easily. The viewer also includes several valuable features, such as the ability to inspect view properties and view the text contents of a view.

Espresso Intents: This library provides a way to test intents in your app. It can be used to test activities, services, and broadcast receivers.

Robolectric: This is an excellent tool for running espresso tests on your local development machine. This can help debug or troubleshoot tests.

Conclusion

In this guide, we've covered the basics of espresso automation testing. We've looked at how to write and run Espresso tests and some best practices for writing Espresso tests. Then, we looked at tools and libraries that can help you with espresso automation testing. Finally, we've seen how you can use the HeadSpin Platform to automate your espresso tests.

FAQs

1. Does Espresso support test recording?

Ans: Yes. The Espresso Test Recorder is the tool that helps testers create UI tests for their apps without writing any test code. With this tool, testers can record their interactions with a device and add assertions to verify UI elements in particular snapshots of their apps. This tool uses the saved recording and automatically generates a corresponding UI test that testers can run to test their apps.

2. What are the main differences between Appium and Espresso?

Ans: In terms of speed, stability, feedback, and ease of configuration, Espresso delivers more compared to Appium. However, Espresso is used only to perform automated Android UI testing. Meanwhile, Appium lets testers perform tests on cross-platform and iOS apps.

3. What is Espresso-Web?

Ans: Espresso-Web is an entry point to operate with the components of Android WebView UI. It reuses Atoms from the WebDriver API to evaluate and control the behavior of a WebView.

4. What is Android Test Orchestrator?

Ans: Android Test Orchestrator is a tool that helps testers perform Espresso tests on various devices. Testers using AndroidJUnitRunner version 1.0 or higher have access to Android Test Orchestrator.

Getting Started with Espresso : A Complete Guide

4 Parts