Android studio AndroidStudio运行录制的浓缩咖啡测试失败
我想在AndroidStudio 4.2中录制一个浓缩咖啡测试。录音似乎很好。然而,当我尝试运行记录的测试时,它们运行了大约一半,直到出现活动切换,然后它失败了,因为找不到视图,并且我一直得到Android studio AndroidStudio运行录制的浓缩咖啡测试失败,android-studio,android-espresso,android-espresso-recorder,Android Studio,Android Espresso,Android Espresso Recorder,我想在AndroidStudio 4.2中录制一个浓缩咖啡测试。录音似乎很好。然而,当我尝试运行记录的测试时,它们运行了大约一半,直到出现活动切换,然后它失败了,因为找不到视图,并且我一直得到NoMatchingViewException 我在第一个活动中点击了很多次,这会触发第二个活动的加载。在运行测试时,尝试在第二个活动中查找视图是不起作用的 @Test fun firstRecordedTest() { val materialButton = onView( al
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())
}
@测试
乐趣第一记录测试(){
val materialButton=onView(
全部(
withId(R.id.Key1按钮),withText(“1”),
儿童体位(
儿童体位(
withClassName(`is`(“android.widget.LinearLayout”),
0
),
3.
),
isDisplayed()
)
)
materialButton.perform(单击())
//活动开关在这里
//下面的方法永远不会奏效
val matcher:matcher=allOf(
withId(R.id.tab_contacts),withContentDescription(“contacts”),
儿童体位(
儿童体位(
withId(右id导航视图),
0
),
1.
),
isDisplayed()
)
val bottomNavigationItemView=onView(匹配器)
bottomNavigationItemView.perform(单击())
}
我曾尝试放置不同种类的计时器等来等待视图加载,但要么它被卡住,要么它失败。我也试过,但运气不好
我错过什么了吗?即使espresso recorder允许,在切换活动后也不可能继续测试吗?espresso有时会对视图产生不稳定的影响。您是否尝试使用第二个活动中的另一个视图,或删除导致测试失败的视图,并在没有该视图的情况下运行测试?Espresso有时对这些视图感到不稳定。您是否尝试使用第二个“活动”中的另一个视图,或删除导致测试失败的视图,并在没有该视图的情况下运行测试?您不需要带浓咖啡的计时器。它将等待活动完全加载,您可以阅读有关它的信息 其次,我自己没有用过录音机,因为它会产生很多噪音。例如下面的代码
val matcher: Matcher<View> = allOf(
withId(R.id.tab_contacts), withContentDescription("Contacts"),
childAtPosition(
childAtPosition(
withId(R.id.navigation_view),
0
),
1
),
isDisplayed()
)
现在,关于测试失败的原因,似乎单击materialButton
正在执行一些异步工作或某种动画。
您可以像这样禁用build.gradle中的动画
android {
...
testOptions {
animationsDisabled = true
}
...
}
如果您阅读并总结,espresso应该等待执行任何操作(在您的情况下,单击选项卡_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)
}
}
}
你不需要咖啡计时器。它将等待活动完全加载,您可以阅读有关它的信息 其次,我自己没有用过录音机,因为它会产生很多噪音。例如下面的代码
val matcher: Matcher<View> = allOf(
withId(R.id.tab_contacts), withContentDescription("Contacts"),
childAtPosition(
childAtPosition(
withId(R.id.navigation_view),
0
),
1
),
isDisplayed()
)
现在,关于测试失败的原因,似乎单击materialButton
正在执行一些异步工作或某种动画。
您可以像这样禁用build.gradle中的动画
android {
...
testOptions {
animationsDisabled = true
}
...
}
如果您阅读并总结,espresso应该等待执行任何操作(在您的情况下,单击选项卡_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)
}
}
}
能否共享日志,它们必须包含当前视图层次结构。能否共享日志,它们必须包含当前视图层次结构。