我正在使用仪表图形测试Android应用程序,其中屏幕上的元素(仪表)每秒重绘一次。我的想法是点击一个开始按钮,仪表打开,当我点击一个停止按钮时,仪表关闭。
手动它运行正常,但是当我运行我的Espresso测试时,测试在我点击开始后挂起,因为应用程序从不闲置,因为它每秒重绘一次。正如所料,我得到:
android.support.test.espresso.AppNotIdleException:循环播放超过60秒的13452次迭代。以下空闲条件失败。
我在Android Developers docs中找到noActivity(),认为这可能会有所帮助,但我无法弄清楚如何正确使用它,也无法找到任何好的例子。停止按钮显然在页面上,但是这一步被绕过并直接进入tearDown(),它告诉我我没有正确使用它或者我不明白它在做什么:
onView(withId(R.id.stop_button)).noActivity().perform()
那我该怎么做呢?是否有一种简单的方法可以告诉Espresso不使用空闲资源进行某项测试或部分测试?我是否需要编写一个闲置资源,说明何时找到停止按钮,应用程序是空闲的?还有其他方法可以丢失吗?
FWIW我使用的是Kotlin,但我也欢迎Java的答案,因为他们非常相似。谢谢!
答案 0 :(得分:0)
在自定义视图中,检索系统设置ANIMATOR_DURATION_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)
当动画师速度为零时,禁用自定义视图中的重绘。在您熟悉它的同时,您可能需要调整动画以尊重系统动画师的速度。
在运行测试之前,请转到设置>将系统动画制作器速度设置为零。您设备上的开发者选项。