Skip to content
Great UI test framework
Kotlin Java
Branch: master
Clone or download
Latest commit aec6198 Nov 7, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Revert "migration to android x" Aug 8, 2019
allure-model
artifacts
docs/kaspresso Rename checkDuring in docs Oct 25, 2019
gradle/wrapper Merge new API Jun 27, 2019
kaspresso Merge pull request #29 from AndreySBer/feature/flaky_safely_negative Oct 28, 2019
sample
static_analysis/config Merge new API Jun 27, 2019
wiki Merge pull request #29 from AndreySBer/feature/flaky_safely_negative Oct 28, 2019
.gitignore
AUTHORS.md updated AUTHORS Sep 9, 2019
CLA.md
CODEOWNERS
CONTRIBUTING.md
LICENSE
README.md
build.gradle
dependencies.gradle
dokka.gradle
gradle.properties
gradlew Initial commit Jan 21, 2019
gradlew.bat Initial commit Jan 21, 2019
publish.gradle
settings.gradle

README.md

Android Arsenal Android Weekly CircleCI

Kaspresso

Kaspresso is a UiTest framework based on Espresso, UIAutomator and Kakao and assisting to write right and no-pain ui tests.

Capabilities

Stability

Kaspresso provides a mechanism to handle a flakiness of Espresso.

Flakiness in ui tests is when one test passes 50 times but breaks at 51 attempt without any understandable reason. Unfortunately, it's a disease of all ui-tests libraries.

Readability

We like a syntax to write ui-tests providing by Kakao. Just compare:

Espresso:

@Test
fun testFirstFeature() {
    onView(withId(R.id.toFirstFeature))
        .check(ViewAssertions.matches(
               ViewMatchers.withEffectiveVisibility(
                       ViewMatchers.Visibility.VISIBLE)))
    onView(withId(R.id.toFirstFeature)).perform(click())
}

Kakao:

@Test
fun testFirstFeature() {
    mainScreen {
        toFirstFeatureButton {
            isVisible()
            click()
        }
    }
}

But we went even further and made Kakao syntax wider and correlated with the test-case you are writing the test on.

Attention on the code below:

@Test
fun shouldPassOnNoInternetScanTest() =
    beforeTest {
        activityTestRule.launchActivity(null)
        // some things with the state
    }.afterTest {
        // some things with the state
    }.run {
        step("Open Simple Screen") {
            MainScreen {
                nextButton {
                    isVisible()
                    click()
                }
            }
        }

        step("Click button_1 and check button_2") {
            SimpleScreen {
                button1 {
                    click()
                }
                button2 {
                    isVisible()
                }
            }
        }

        step("Click button_2 and check edit") {
            SimpleScreen {
                button2 {
                    click()
                }
                edit {
                    flakySafely(timeoutMs = 7000) { isVisible() }
                    hasText(R.string.text_edit_text)
                }
            }
        }

        step("Check all possibilities of edit") {
            scenario(
                CheckEditScenario()
            )
        }
    }

Logging

Kaspresso transform your tests' logs into understandable and pleasant text:

Flexibility

We have introduced a mechanism of interceptors giving an ability to catch all actions going to Espresso.

Thanks to this mechanism, the developer can add additional custom actions at each action of Espresso (a logging, a screenshoting), handle results of actions of Espresso and re-run failed actions (flaky tests handling), for example, and do other interesting things.

Part of interceptors was introduced in Kakao version 2.1, another part of interceptors was introduced in Kaspresso.

Ability to call Adb commands

Espresso or UiAutomator doesn't allow to call adb commands inside a test. That's why we have written special AdbServer repository fixing mentioned problem.

In Kaspresso, the developer can call adb and cmd commands by AdbServer class.

Ability to work with Android System

There are a lot of useful classes in Kaspresso to work with Android System.

Examples of such work:
1. push files,
2. enable/disable network,
3. permissions' giving,
4. emulate phone calls,
5. make screenshots,
6. and other.

Feature's screenshoting

Sometimes when developing new features, there is a need to check if the application works properly in all supported languages. Kaspresso offers a possibility make feature's screenshots fast and automatically.

Configurability

The developer can tune any part of Kaspresso thanks to Kaspresso.Builder.

The philosophy

Kaspresso proposes such very important things for ui-tests as the set of rules on how to write ui-tests.

Wiki

For all information check Kaspresso wiki

Integration

To use AdbServer device library, include the jcenter repository to your root build.gradle file (if it does not exist already):

allprojects {
    repositories {
        jcenter()
    }
}

And then add dependency to your module build.gradle:

androidTestImplementation 'com.kaspersky.android-components:kaspresso:1.0.1'

If you are still using old Android Support libraries, use the <version>-support artifact:

androidTestImplementation 'com.kaspersky.android-components:kaspresso:1.0.1-support'

Support

English support in telegram - t.me/kaspresso_en
Russian support in telegram - t.me/kaspresso

Contribution Policy

Kaspresso is an open source project, and depends on its users to improve it. We are more than happy to find you interested in taking the project forward.
Kindly refer to the Contribution Guidelines for detailed information.

License

Kaspresso is open source and available under the Apache License, Version 2.0.

You can’t perform that action at this time.