Android App和UIAutomator之间通过非UI机制进行通信

时间:2014-09-11 06:40:02

标签: android uiautomator android-uiautomator

目前我正在使用UIAutomator测试我们的应用程序,UIAutomator可以访问所有UI元素。

通常使用附加代码构建APK以显示对话框,表示测试用例的成功完成(即UIAutomator调用的操作),以通知UIAutomator继续下一个测试用例。

负责显示对话框的代码未提交到存储库并作为补丁维护,不允许在存储库中提交。 因此,每当我们想要执行UIAutomator测试时,我们都会使用附加代码来构建APK。

我的问题:是否还有其他方式可以通过UIAutomator成功完成测试用例(即应用程序已完成UIAutomator调用的操作),而无需使用对话框。

我需要这个更改来在发布候选版本上执行UIAutomator测试。

我尝试了什么:在测试用例调用之间设置常量延迟。

但我无法在测试用例之间设置持续的延迟,因为执行时间因测试数据和设备/环境而异。

我想到了BroadcastReceiver,但我不知道如何从UIAutomator注册?

是否有其他机制/解决方法来实现此功能?

2 个答案:

答案 0 :(得分:0)

我不确定你真正要求的是什么,但由于我不被评论,如果我误解了你,你可以纠正我。

您正在寻找一种断言测试用例已执行并且您的应用程序中没有异常的方法吗?

首先,您需要确定UiObject。然后你可以使用

UiObject.waitForExists();

当uiObject与实例化时指定的查询匹配时,上面的方法将返回true。

另一个解决方案是使用可以扩展UiAutomatorInstrumentationTestRunner的运行器,在此构建TestSuite以按设置顺序执行。

答案 1 :(得分:0)

如果您希望UiAutomator向主机控制台报告状态,请点击以下帖子的答案。

Writing to Android UI Automator output console

Instrumentation.sendStatus(..)

Bundle中的每个键/值对都将按如下方式写出:

INSTRUMENTATION_STATUS: key1=value1
INSTRUMENTATION_STATUS: key2=value2
INSTRUMENTATION_STATUS_CODE: -1

因此,您的主持人可以按您想要的任何步骤获得状态。