How to use
Take a screenshot manually
You can take a screenshot by calling captureRoboImage().
app/src/test/java/../ManualTest.kt
Roborazzi supports the following APIs.
Capture | Code |
|---|---|
✅ Jetpack Compose's onNode() |
composeTestRule.onNodeWithTag("AddBoxButton")
.captureRoboImage()
|
✅ Espresso's onView() |
onView(ViewMatchers.isRoot())
.captureRoboImage()
onView(withId(R.id.button_first))
.captureRoboImage()
|
✅ View |
val view: View = composeTestRule.activity.findViewById<View>(R.id.button_second)
view.captureRoboImage()
|
✅ Jetpack Compose lambda |
captureRoboImage() {
Text("Hello Compose!")
}
|
Experimental🧪 ✅ Captures the entire screen, including dialogs |
captureScreenRoboImage()
|
✅ Bitmap |
val bitmap: Bitmap = createBitmap(100, 100, Bitmap.Config.ARGB_8888)
.apply {
applyCanvas {
drawColor(android.graphics.Color.YELLOW)
}
}
bitmap.captureRoboImage()
|
Device configuration
You can configure the device by using the @Config annotation and RobolectricDeviceQualifiers.
Configuration | Code |
|---|---|
✅ Predefined device configuration | You can change the device configuration by adding
@RunWith(AndroidJUnit4::class)
@GraphicsMode(GraphicsMode.Mode.NATIVE)
@Config(qualifiers = RobolectricDeviceQualifiers.Pixel5)
class RoborazziTest {
@Test
@Config(qualifiers = RobolectricDeviceQualifiers.Pixel5)
fun test() {
|
✅ Night mode |
@Config(qualifiers = "+night")
|
✅ Locale |
@Config(qualifiers = "+ja")
|
✅ Screen size |
@Config(qualifiers = RobolectricDeviceQualifiers.MediumTablet)
|
Integrate to your GitHub Actions
See Integrate to your GitHub Actions for CI workflows that store, verify, and compare screenshots.
RoborazziRule (Optional)
RoborazziRule is a JUnit rule for Roborazzi. RoborazziRule is optional. You can use captureRoboImage() without this rule.
RoborazziRule has two features.
Provide context such as
RoborazziOptionsandoutputDirectoryPathetc forcaptureRoboImage().Capture screenshots for each test when specifying RoborazziRule.options.captureType.
For example, The following code generates an output file named **custom_outputDirectoryPath**/**custom_outputFileProvider**-com.github.takahirom.roborazzi.sample.RuleTestWithPath.captureRoboImage.png:
To record test interactions as animated images (captureRoboGif(), recordRoboVideo()), see Capture GIFs and videos.
RoborazziRule options
RoborazziRule.Options has:
captureType— what the rule captures per test:None(default; the rule only provides context),LastImage,AllImage(an image per layout change, likeTestClass_method_0.png), orGif. The image-generating types takeonlyFail = trueto capture only when the test fails. Annotate a test with@RoborazziRule.Ignoreto exclude it from these capture types.outputDirectoryPath/outputFileProvider— where output files go and how they are named.roborazziOptions— theRoborazziOptionsprovided tocaptureRoboImage()in the test.
See RoborazziRule for the full definition.
Image comparator custom settings
When comparing images, you may encounter differences due to minor changes related to antialiasing. You can use the options below to avoid this.
Experimental WebP support and other image formats
You can set roborazzi.record.image.extension to webp in your gradle.properties file to generate WebP images.
WebP is a lossy image format by default, which can make managing image differences challenging. To address this, we provide a lossless WebP image comparison feature. To enable WebP support, add testImplementation("io.github.darkxanter:webp-imageio:0.3.3") to your build.gradle.kts file.
You can also use other image formats by implementing your own AwtImageWriter and AwtImageLoader.
Dump mode
If you are having trouble debugging your test, try Dump mode as follows.

For a machine-readable version of the UI tree for tools and AI agents, see UI tree dump (JSON).
Accessibility Check
Roborazzi Accessibility Checks is a library that integrates accessibility checks into Roborazzi. Please refer to Accessibility Check
Roborazzi options
Please check out RoborazziOptions for available Roborazzi options.