Latte is a lightweight and easy to use UI testing framework for Android utilizing Kotlin DSL.
- Has a very small footprint
- Is a standalone framework
- Utilizes Kotlin DSL
- Uses Android API for matching, interactions and verifications
- Narrows the scope of matches, interactions and verifications to a given type of View
- Enables easy debugging of View's current state
- Gives a fine grained control over view matching process
- Provides a separate library artifact with helper interactions and verifications
- Minimum Android SDK: 21
- Compile Android SDK: 34 or later
In {root}/build.gradle add:
allprojects {
repositories {
maven {
url "https://maven.pkg.github.com/malloth/latte"
}
}
}In {module}/build.gradle add:
dependencies {
androidTestImplementation "pl.codesamurai.latte:core:{LATEST_VERSION}"
androidTestImplementation "pl.codesamurai.latte:core-ktx:{LATEST_VERSION}"
}For current {LATEST_VERSION} please check GitHub's releases tab.
Matching View of a specific type:
val viewMatcher: (View) -> Boolean = { /* matching view's conditions */ }
match(viewMatcher)Ensuring that no matching Views exists in the view hierarchy:
val viewMatcher: (View) -> Boolean = { /* matching view's conditions */ }
noMatch(viewMatcher)Performing actions with matched View:
val viewMatcher: (View) -> Boolean = { /* matching view's conditions */ }
match(viewMatcher) {
// actions performed on a view(s)
}Verifying View's expected state:
val viewMatcher: (View) -> Boolean = { /* matching view's conditions */ }
match(viewMatcher) {
verify {
// assertion(s) performed on a view(s)
}
}or
// GIVEN
val viewMatcher: (View) -> Boolean = { /* matching view's conditions */ }
// WHEN
val matching = match(viewMatcher) {
// actions performed on a view(s)
}
// THEN
matching.verify {
// assertion(s) performed on a view(s)
}Sample use case matching EditText with an id R.id.edit1:
// GIVEN
val editTextWithId: (EditText) -> Boolean = { id == R.id.edit1 }
// WHEN
val matching = match(editTextWithId) {
tap()
type("123")
}
// THEN
matching.verify {
isFocused && hasText("123")
}Inside this repository there's a sample app module with a couple of UI tests, showing how to write those using this framework.
To run all the tests:
./gradlew :sample:pixel2DebugAndroidTest