【问题标题】:Communication between Android App and UIAutomator via Non-UI mechanismAndroid App 与 UIAutomator 之间通过 Non-UI 机制进行通信
【发布时间】:2017-07-06 04:44:00
【问题描述】:

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

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

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

我的问题:是否有任何其他方式来传达 UIAutomator 成功完成测试用例(即应用程序已完成 UIAutomator 调用的操作),而不使用对话框。

我需要此更改来对发布候选版本执行 UIAutomator 测试。

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

但我无法在测试用例之间设置恒定延迟,因为执行时间会根据测试数据和设备/环境而有所不同。

想到了BroadcastReceiver,不知道怎么从UIAutomator注册?

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

【问题讨论】:

  • 我不认为你可以从 Uiautomator 测试用例注册 BroadcastReceiver。一种方法是从批处理文件中调用 Uiautomator 测试用例,并在每次测试用例执行后检查状态并继续下一个测试用例。

标签: android android-uiautomator


【解决方案1】:

我不确定您真正要求什么,但由于我不允许发表评论,如果我有误解,您可以纠正我。

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

首先您需要识别UiObject。然后就可以使用了

UiObject.waitForExists();

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

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

【讨论】:

    【解决方案2】:

    如果您希望 UiAutomator 向主机控制台报告状态,请参阅下面帖子中的答案。

    Writing to Android UI Automator output console

    Instrumentation.sendStatus(..)

    Bundle 中的每个键/值对都会这样写出来:

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

    因此,您的主机可以通过您想要的任何步骤获取状态。

    【讨论】:

      猜你喜欢
      • 2013-10-07
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 2017-12-13
      • 2019-10-07
      相关资源
      最近更新 更多