我收到了来自
我也尝试过这样做:
但是实际上没有任何区别,因为测试运行程序会自动检查测试运行后是否有正在运行的活动,并将其清除。
当第二个测试运行时,它仍然从
我猜最终的问题是,什么导致UiAutomator失去所有根节点? 调试
语法糖:
UiAutomator
的获取无根节点的辅助功能-正在重试...消息,但我不知道原因。
简要描述:
我们正在对应用程序执行端到端测试,每个测试都从启动活动开始。第一个测试成功运行。当第二个测试开始时,一切正常,直到我们开始查找UiObject
。在该调用中,我们遇到了错误。
详细描述:
第一个测试启动StartActivity
并通过引导浏览到MainScreen
。
启动屏幕开始:
val intent = Intent(appContext, StartActivity::class.java)
appContext.startActivity(intent)
我也尝试过这样做:
val intent = appContext.packageManager.getLaunchIntentForPackage(appContext.originalPackageName).apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
appContext.startActivity(intent)
但是实际上没有任何区别,因为测试运行程序会自动检查测试运行后是否有正在运行的活动,并将其清除。
当第二个测试运行时,它仍然从
StartActivity
开始,但现在跳过了引导流程,并将用户(测试运行程序)导航到包含Continue
按钮的屏幕。因此,我们正在查找带有文本Continue
的UiObject,并等待它出现在屏幕上。一旦它出现,我们就会点击它。然而,一旦我们启动“查找继续按钮”,标题中的消息就开始出现,并且在几秒钟后一切都会崩溃,显示以下信息:
测试运行失败:由于“进程崩溃”,仪器运行失败。
代码片段:
val continueButton = viewByText { appContext stringOf R.string.all_continue }
continueButton.waitToBecomeVisible(1.minute)
continueButton.click()
我猜最终的问题是,什么导致UiAutomator失去所有根节点? 调试
UiDevice
中的方法,如getUiAutomation
、getWindowRoots
和实际的getRootNode()
来自QueryContoller
,记录了上述消息,但没有帮助。语法糖:
appContext
val appContext: Context get() = InstrumentationRegistry.getTargetContext()
viewByText
:
fun viewByText(text: () -> String): UiObject = device.objectByText { text() }
infix fun UiDevice.objectByText(text: () -> String): UiObject =
findObject(UiSelector().text(text()))
waitToBecomeVisible
:
infix fun UiObject.waitToBecomeVisible(timeOutMillis: Long) {
if(!waitForExists(timeOutMillis)){
throw UiObjectNotFoundException(
"Timeout: ${timeOutMillis.toDouble()/1000}s. ${this.selector}"
)
}
}