如何解决AndroidStudio 运行录制的 Espresso 测试失败
我正在尝试在 AndroidStudio 4.2 中录制浓缩咖啡测试。录音似乎工作正常。但是,当我尝试运行记录的测试时,它们运行了大约一半,直到出现活动切换,然后它失败了,因为找不到视图,并且我一直收到 NoMatchingViewException
。
我在第一个活动中点击了一堆,这触发了第二个活动的加载。在运行测试时,尝试在第二个活动中查找视图永远不会奏效。
@Test
fun firstRecordedtest() {
val materialButton = onView(
allOf(
withId(R.id.key1Button),withText("1"),childAtPosition(
childAtPosition(
withClassName(`is`("android.widget.LinearLayout")),0
),3
),isdisplayed()
)
)
materialButton.perform(click())
// Activity switches here
// The following never works
val matcher: Matcher<View> = allOf(
withId(R.id.tab_contacts),withContentDescription("Contacts"),childAtPosition(
childAtPosition(
withId(R.id.navigation_view),0
),1
),isdisplayed()
)
val bottomNavigationItemView = onView(matcher)
bottomNavigationItemView.perform(click())
}
我尝试放置不同类型的计时器等以等待视图加载,但它要么卡住,要么失败。我也试过 this answer 没有运气。
我错过了什么吗?即使浓缩咖啡记录仪允许,切换活动后也无法继续测试吗?
解决方法
浓缩咖啡不需要计时器。它将等到 Activity 完全加载,您可以阅读它here
其次,我自己没有使用过录音机,因为它会产生很多噪音。例如下面的代码
val matcher: Matcher<View> = allOf(
withId(R.id.tab_contacts),withContentDescription("Contacts"),childAtPosition(
childAtPosition(
withId(R.id.navigation_view),0
),1
),isDisplayed()
)
我在这里假设点击了 navigation_view 中的一个按钮。 可以简单地替换为
onView(withId(R.id.tab_contacts)).perform(click())
现在,谈到您的测试失败的原因,似乎 materialButton
点击正在执行一些异步工作或执行某种动画。
您可以像这样在 build.gradle 中禁用动画
android {
...
testOptions {
animationsDisabled = true
}
...
}
如果您阅读 here,我总结一下,espresso 应该等待执行任何操作(在您的情况下,单击 tab_contacts
)直到消息队列为空,它将与异步任务同步同样,但是 espresso 不知道其他异步长时间运行的操作。因此,如果您正在使用一些异步操作,您应该考虑使用空闲资源来进行可靠的测试。
但是如果你想快速破解,你可以使用这个睡眠方法:
private fun sleep(millis: Long): ViewAction {
return object : ViewAction {
override fun getConstraints(): Matcher<View> {
return isRoot()
}
override fun getDescription(): String {
return "Going to sleep for " + millis + "milliseconds"
}
override fun perform(uiController: UiController,view: View) {
uiController.loopMainThreadForAtLeast(millis)
}
}
}
并像这样调用上面的方法:
onView(isRoot())
.perform(sleep(
TimeUnit.SECONDS.toMillis(10)
))
,
Espresso 的观点有时很不稳定。您是否尝试使用第二个活动中的另一个视图,或者删除导致测试失败的视图并在没有它的情况下运行测试?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。