Skip to content

Commit

Permalink
Merge pull request #319 from KasperskyLab/issue-318/kamulator_tests_i…
Browse files Browse the repository at this point in the history
…n_tutorial

#318. kamulator tests for tutorial
  • Loading branch information
matzuk committed Nov 17, 2021
2 parents f25f393 + b1bf91b commit 35d5d67
Show file tree
Hide file tree
Showing 7 changed files with 144 additions and 8 deletions.
7 changes: 4 additions & 3 deletions tutorial/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ android {
}

dependencies {
implementation("androidx.core:core-ktx:1.5.0")
implementation("androidx.appcompat:appcompat:1.3.0")
implementation("com.google.android.material:material:1.3.0")
implementation("androidx.core:core-ktx:1.7.0")
implementation("androidx.appcompat:appcompat:1.3.1")
implementation("com.google.android.material:material:1.4.0")

androidTestImplementation("com.kaspersky.android-components:kaspresso:1.3.0")
androidTestImplementation("androidx.test.ext:junit-ktx:1.1.3")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.kaspersky.kaspresso.tutorial.kautomator_screen

import com.kaspersky.components.kautomator.component.text.UiButton
import com.kaspersky.components.kautomator.screen.UiScreen

object UiMainScreen : UiScreen<UiMainScreen>() {

override val packageName: String = "com.kaspersky.kaspresso.tutorial"

val simpleButton = UiButton { withId(this@UiMainScreen.packageName, "activity_main_simple_sample_button") }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.kaspersky.kaspresso.tutorial.kautomator_screen

import com.kaspersky.components.kautomator.component.edit.UiEditText
import com.kaspersky.components.kautomator.component.text.UiButton
import com.kaspersky.components.kautomator.screen.UiScreen

object UiSimpleScreen : UiScreen<UiSimpleScreen>() {

override val packageName: String = "com.kaspersky.kaspresso.tutorial"

val button1 = UiButton { withId(this@UiSimpleScreen.packageName, "button_1") }
val button2 = UiButton { withId(this@UiSimpleScreen.packageName, "button_2") }
val edit = UiEditText { withId(this@UiSimpleScreen.packageName, "edit") }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.kaspersky.kaspresso.tutorial.kautomator_test

import com.kaspersky.kaspresso.testcases.api.scenario.BaseScenario
import com.kaspersky.kaspresso.testcases.core.testcontext.TestContext
import com.kaspersky.kaspresso.tutorial.kautomator_screen.UiSimpleScreen

class UiCheckEditScenario<ScenarioData> : BaseScenario<ScenarioData>() {

override val steps: TestContext<ScenarioData>.() -> Unit = {

step("Change the text in edit and check it") {
UiSimpleScreen {
edit {
clearText()
typeText("111")
hasText("111")
}
}
}

step("Change the text in edit and check it. Second check") {
UiSimpleScreen {
edit {
clearText()
typeText("222")
hasText("222")
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.kaspersky.kaspresso.tutorial.kautomator_test

import android.Manifest
import androidx.test.ext.junit.rules.activityScenarioRule
import androidx.test.rule.GrantPermissionRule
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
import com.kaspersky.kaspresso.tutorial.MainActivity
import com.kaspersky.kaspresso.tutorial.R
import com.kaspersky.kaspresso.tutorial.kautomator_screen.UiMainScreen
import com.kaspersky.kaspresso.tutorial.kautomator_screen.UiSimpleScreen
import io.github.kakaocup.kakao.common.utilities.getResourceString
import org.junit.Rule
import org.junit.Test

/**
* In this example you can see a test tuned by default Kaspresso configuration.
* When you start the test you can see output of default Kaspresso interceptors:
* - a lot of useful logs
* - failure handling
* - screenshots in the device
* Also you can see the test DSL simplifying the writing of any test
*/
class UiSimpleTest : TestCase() {

@get:Rule
val runtimePermissionRule: GrantPermissionRule = GrantPermissionRule.grant(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
)

@get:Rule
val activityRule = activityScenarioRule<MainActivity>()

@Test
fun test() =
before {
testLogger.i("Before section")
}.after {
testLogger.i("After section")
}.run {
step("Open Simple Screen") {
testLogger.i("Main section")
device.screenshots.take("Additional_screenshot")

UiMainScreen {
simpleButton {
isDisplayed()
click()
}
}
}

step("Click button_1 and check button_2") {
UiSimpleScreen {
button1 {
click()
}
button2 {
isDisplayed()
}
}
}

step("Click button_2 and check edit") {
UiSimpleScreen {
button2 {
click()
}
edit {
flakySafely(timeoutMs = 7000) { isDisplayed() }
hasText(getResourceString(R.string.simple_fragment_text_edittext))
}
}
}

step("Check all possibilities of edit") {
scenario(
UiCheckEditScenario()
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ object SimpleScreen : KScreen<SimpleScreen>() {
override val viewClass: Class<*> = SimpleActivity::class.java

val button1 = KButton { withId(R.id.button_1) }

val button2 = KButton { withId(R.id.button_2) }

val edit = KEditText { withId(R.id.edit) }
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.kaspersky.kaspresso.tutorial.test

import android.Manifest
import androidx.test.rule.ActivityTestRule
import androidx.test.ext.junit.rules.activityScenarioRule
import androidx.test.rule.GrantPermissionRule
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
import com.kaspersky.kaspresso.tutorial.MainActivity
Expand All @@ -28,7 +28,7 @@ class SimpleTest : TestCase() {
)

@get:Rule
val activityTestRule = ActivityTestRule(MainActivity::class.java, true, false)
val activityRule = activityScenarioRule<MainActivity>()

@Test
fun test() =
Expand All @@ -39,7 +39,6 @@ class SimpleTest : TestCase() {
}.run {
step("Open Simple Screen") {
testLogger.i("Main section")
activityTestRule.launchActivity(null)
device.screenshots.take("Additional_screenshot")

MainScreen {
Expand Down

0 comments on commit 35d5d67

Please sign in to comment.