{Day29}Espresso

Espresso

Espresso是一种UI Test自动化测试框架,可以在短时间跑完测试并且可以跟元件互动。

ActivityTestRule:取得Activity资源

先寻找元件再调用动作or检查

寻找UI元件
onView(Matcher)
1.onView(withId()):利用ID。
2.onView(withText()):利用文字。

操作UI动作
perform(ViewActions)
1.perform(typeText()):输入文字。
2.perform(click()):点击。
3.perform(clearText()):清空文字。

检查
check(ViewAssertion(Matcher))
1.check(matches(withId)):是否有这个ID
2.check(matches(withText)):是否有这个文字
3.check(matches(isDisplayed())):是否有显示

添加 Espresso

build.gradle(Module)

dependencies {
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    androidTestImplementation 'androidx.test:runner:1.3.0'
    androidTestImplementation 'androidx.test:rules:1.3.0'
}

MainActivity.kt

val secret = Random().nextInt(20)
 
check.setOnClickListener {
      if (secret == number.text.toString().toInt()) {
           AlertDialog.Builder(this)
                .setMessage("宾果")
                .show()
      } else {
           AlertDialog.Builder(this)
                .setMessage("没猜中")
                .setPositiveButton(getString(R.string.ok), null)
                .show()
      }
}

创建在(androidTest下)
MainActivityTest.kt

@RunWith(AndroidJUnit4ClassRunner::class)
class MainActivityTest {

    @get:Rule
    val activityRule = ActivityScenarioRule(MainActivity::class.java)

    //测试方法
    @Test
    fun guessWrong() {
        val resources = activityRule.activity.resources
        val secret = activityRule.activity.secret
        for (i in 0..19) {
            if (i != secret) {
                //清空文字
                Espresso.onView(withId(R.id.number))
                    .perform(clearText())
                //写入文字
                Espresso.onView(withId(R.id.number))
                    .perform(typeText(i.toString()))
                //点击按钮
                Espresso.onView(withId(R.id.check))
                    .perform(click())
                //判断文字有没显示
                Espresso.onView(withText("没猜中"))
                   .check(matches(isDisplayed()))
                //按下Alert确认
                Espresso.onView(withText(resources.getString(R.string.ok)))
                    .perform(click())
            }
        }
    }
}


<<:  Day 29 那些软件教我的人生守则

>>:  Day 29 Explore monitoring and reporting

[Day 17] v-model双向绑定是什麽咧??

各位早上起床的第一件事是做什麽呢?今天的我是睁开双眼呦~!根据研究,记下每天做的第一件事,对你的生活...

Day 20:1566. Detect Pattern of Length M Repeated K or More Times

今日题目 题目连结:1566. Detect Pattern of Length M Repeate...

[影片]第29天:物件导向程序设计-可以为null 的数值型态(实例112、113)

4.8 可以为null 的数值型态 实例112 存取可以为null的数值型态 实例113 为Nul...

Day 28 : 应用篇 — 如何透过 Obsidian 帮助知识工作者写作 ? 分享我的 Obsidian 写作流程

前言 近期陆续收到许多朋友的来信,询问 Obsidian 可以如何应用。经过几次的讨论,我发现许多人...

30天程序语言研究

今天是30天程序语言研究的第十三天,由於深度学习老师多让我们上了python的进阶课程里面包括之前没...