Android 如何处理每秒重画的视图的AppNotIdleException?
我正在测试一个Android应用程序,它有一个仪表图形,屏幕上的一个元素(仪表)每秒都会被重新绘制。这个想法是,我点击一个开始按钮,电表就会打开,当我点击一个停止按钮,电表就会关闭 手动操作可以,但是当我运行我的浓缩咖啡测试时,测试会在我点击“开始”后挂起,因为应用程序从不空闲,因为它每秒都会被重新绘制。正如所料,我得到: android.support.test.espresso.AppNotIdleException:在60秒内循环13452次。以下怠速条件失败 我在中发现了noActivity(),认为这可能会有所帮助,但我不知道如何正确使用它,也找不到任何好的示例。“停止”按钮清楚地显示在页面上,但此步骤被忽略,直接转到“拆卸()”,这表明我没有正确使用它,或者我不明白它在做什么:Android 如何处理每秒重画的视图的AppNotIdleException?,android,kotlin,wait,android-espresso,Android,Kotlin,Wait,Android Espresso,我正在测试一个Android应用程序,它有一个仪表图形,屏幕上的一个元素(仪表)每秒都会被重新绘制。这个想法是,我点击一个开始按钮,电表就会打开,当我点击一个停止按钮,电表就会关闭 手动操作可以,但是当我运行我的浓缩咖啡测试时,测试会在我点击“开始”后挂起,因为应用程序从不空闲,因为它每秒都会被重新绘制。正如所料,我得到: android.support.test.espresso.AppNotIdleException:在60秒内循环13452次。以下怠速条件失败 我在中发现了noActivi
onView(withId(R.id.stop_button)).noActivity().perform()
那么我该如何克服这一点呢?有没有一种简单的方法可以告诉浓缩咖啡不要将闲置的资源用于某项测试或部分测试?我是否需要编写一个空闲资源,说明当找到停止按钮时,应用程序处于空闲状态?还有其他方法我可能会错过吗
FWIW我正在使用Kotlin,但我也欢迎Java答案,因为它们非常相似。谢谢 在自定义视图中,检索系统设置
ANIMATOR\u DURATION\u SCALE
:
private fun getAnimatorSpeed() =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getAnimatorSpeedNew()
} else {
getAnimatorSpeedOld()
}
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private fun getAnimatorSpeedNew() = Settings.Global.getFloat(
context.contentResolver,
Settings.Global.ANIMATOR_DURATION_SCALE,
1f)
@Suppress("DEPRECATION")
private fun getAnimatorSpeedOld() = Settings.System.getFloat(
context.contentResolver,
Settings.System.ANIMATOR_DURATION_SCALE,
1f)
当animator speed为零时,禁用自定义视图中的重绘。在进行此操作时,您可能希望调整动画以符合系统动画制作者的速度
在运行测试之前,通过在设备上转到设置>开发者选项将系统动画速度设置为零。一个选项是在测试期间禁用重绘。那可以接受吗?听起来很好。我该怎么做呢?好的,听起来我需要为我的测试构建一个自定义视图来处理这个场景。我会在这周或下周尝试一下。谢谢@Chiuki!