Android - Espresso 如何在点击并移动到另一个 Activity 后测试 View

标签 android android-espresso ui-testing

我是 Espresso UI 测试的初学者。我有一个问题,我找到了解决方案,但我不知道如何正确地做到这一点 :((

问题: 我有 2 个 ImageView,当我单击一次时将更改它的可绘制对象并启动一个 Activity。我想在点击正确后检查可绘制对象?

我的代码

// In Main Activity
val imageView1 = findViewById(R.id.iv_button1)
imageView1.setOnClickListener {
    imageView1.setImageDrawable(resources.getDrawable(R.drawable.image1))
    startActivity(Intent(applicationContext, OtherAcitivy1::class.java))
}
val imageView2 = findViewById(R.id.iv_button2)
imageView2.setOnClickListener {
    imageView2.setImageDrawable(resources.getDrawable(R.drawable.image2))
    startActivity(Intent(applicationContext, OtherAcitivy2::class.java))
}

// In Android Test Class
...After run activiy
@Test
fun checkClickImageView1() {
    onView(withId(R.id.iv_button1)).perform(click())

    // In here, I want to check the imageview has displayed drawable correctly
    onView(withId(R.id.iv_button1)).check(withDrawableMatcher(R.drawable.image1))
}

但是,它抛出一个异常,即无法使用 R.id.iv_button1 找到 View 。

我想,因为我在单击操作时启动了 OtherActivty2,所以它无法从 OtherActivty2 的 Root View 中找到具有该 id 的 View 。 p>

在这种情况下,有什么解决方案可以帮助我检查 ImageView 的可绘制对象吗?

非常感谢。

最佳答案

我会使用 espresso intents

通过这种方式,您可以捕捉到您的应用将打开其他 Activity 并响应结果。然后,由于您所在的 Activity 没有改变,您可以在那里检查可绘制对象。

你的代码应该是这样的:

@Test
fun checkClickImageView1() {
    val result = Instrumentation.ActivityResult(Activity.RESULT_OK, null)
    // Set up result stubbing when an intent sent to "OtherAcitivy2" is seen.
    intending(hasComponent(OtherAcitivy2::class.java.name)).respondWith(result)
    onView(withId(R.id.iv_button1)).perform(click())

    onView(withId(R.id.iv_button1)).check(withDrawableMatcher(R.drawable.image1))
}

不要忘记在 build.gradle 文件中添加 espresso-intents 依赖项。

关于Android - Espresso 如何在点击并移动到另一个 Activity 后测试 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58297097/

相关文章:

android - 如何将ViewPager放在listview之上?

android - 运行测试时出现问题(<androidx.test.ext.junit.runners.AndroidJUnit4> 没有零参数构造函数)

java - 使用 Espresso 进行 Android 仪器测试失败 : NoSuchMethodError get() in javax. Inject.Provider

iOS:使用 XCUIDevice().siriService 点击按钮

cypress - 如何在 Cypress 中使用 fakerjs

java - Android 中 URLConnection.getOutputStream() 的问题

android - 更改 Xamarin Forms Picker 按钮样式

android - Toast消失后应用程序崩溃

java - Android 中@SmallTest、@MediumTest 和@LargeTest 注解的用途是什么?

android - 空闲资源繁忙时测试 UI