Skip to content

Instantly share code, notes, and snippets.

@cmathew
Last active April 4, 2024 11:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cmathew/28dbec914a06035f023894cd36ef73ea to your computer and use it in GitHub Desktop.
Save cmathew/28dbec914a06035f023894cd36ef73ea to your computer and use it in GitHub Desktop.
Outline for an Espresso test that interacts with BottomSheets in a reliable way
@Test
fun clickButtonInsideExpandedBottomSheet() {
val sheetBehavior = activity.getBottomSheetBehavior()
val expandedSheetIdlingResource = BottomSheetStateResource(sheetBehavior, STATE_EXPANDED)
val settledSheetIdlingResource = BottomSheetSettledResource(sheetBehavior)
// Wait for settled state
withBottomSheetResource(settledSheetIdlingResource) {
// Use BottomSheetSetStateAction to expand the Bottom Sheet
}
// Wait for expanded state
withBottomSheetResource(expandedSheetIdlingResource) {
// Click on button inside Bottom Sheet content
}
// Assert that button had the intended effect
}
private fun withBottomSheetResource(
sheetIdlingResource: IdlingResource,
actionsAndAssertions: () -> Unit
) {
with(sheetIdlingResource) {
idlingRegistry.register(this)
try {
actionsAndAssertions.invoke()
} finally {
idlingRegistry.unregister(this)
}
}
}
@davwheat
Copy link

davwheat commented Aug 3, 2023

Thanks for getting back to me even after so many year since your post! Thanks for the help :)

@kozaxinan
Copy link

hey, we added following dummy assertion to force bottom sheet idling resource to wait until it is done.

 Espresso.onIdle { }
 actionsAndAssertions.invoke()

this ensure that espresso waits for bottom sheet resource to become idle

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment