【发布时间】:2018-04-16 15:12:23
【问题描述】:
我正在尝试编写一种方法来等待我的 Espresso 测试出现某种活动。我已经看到了尝试等待对象出现在测试开始之外的单独活动中的示例,但到目前为止没有一个对我有用,而且我不热衷于使用空闲资源修改我的生产代码。
在我的方法中,我想获取当前活动,然后检查该活动是否是我想要的特定类型的类。我基本上是在修改我发现的一些代码 here 以使用 Kotlin 和泛型类类型。不幸的是,我不知道如何格式化传入的参数(当前为Class<out Activity>),或者我在if 语句中使用不当。下面写的内容无法编译。
关于如何将我想要的活动类型作为参数传递给waitForActivity 方法以及如何检查它的任何指针?
fun waitForActivity(activityType: Class<out Activity>, timeout: Int = 10): Boolean {
val endTime = System.currentTimeMillis() + (timeout * 1000)
do {
val currentActivity = getActivityInstance()
// THIS LINE IS MY ISSUE **********************************************
if(currentActivity != null && currentActivity::class.java is activityType)
return true
// ********************************************************************
SystemClock.sleep(100)
} while (System.currentTimeMillis() < endTime)
return false
}
private fun getActivityInstance(): Activity? {
val activity = arrayOfNulls<Activity>(1)
InstrumentationRegistry.getInstrumentation().runOnMainSync {
val currentActivity: Activity?
val resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED)
if (resumedActivities.iterator().hasNext()) {
currentActivity = resumedActivities.iterator().next() as Activity
activity[0] = currentActivity
}
}
return activity[0]
}
【问题讨论】:
标签: android kotlin android-espresso