从另一个任务测试活动

时间:2015-09-07 07:24:52

标签: android testing robotium

我正在尝试测试我的活动,该活动有一个按钮可以转到带有ActivityInstrumentationTestCase2的People应用程序。但问题是People应用程序在另一个任务中开始编辑活动,显然我没有访问权限。那么该怎么办?如何向People应用程序发送信号?

我的意图是:

Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);

intent.putExtra(ContactsContract.Intents.Insert.NAME, "");
intent.putExtra(ContactsContract.Intents.Insert.PHONE, "");

1 个答案:

答案 0 :(得分:0)

嗯,我想通了,相当肯定其他开发人员会发现它很有用。 首先,要启用与People应用程序的测试交互,您可以使用相关的Intent字段预填充联系人数据:

public static void addAsContactConfirmed(final Context context, final Person person) {

Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);

intent.putExtra(ContactsContract.Intents.Insert.NAME, person.name);
intent.putExtra(ContactsContract.Intents.Insert.PHONE, person.mobile);
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, person.email);

intent.putExtra("finishActivityOnSaveCompleted", true); // this line enables instant return People to our app
context.startActivity(intent);

}

然后你需要按回按钮,这是一个棘手的部分:

  1. 你不能只是完成(),因为它不是你的活动,甚至不是同一个任务
  2. 您出于同样的原因无法访问People应用的任何视图
  3. 你哭了很多,因为你不知道,该怎么做
  4. 但是我在这里解决了问题。您需要使用UiAutomation,可以通过调用final UiAutomation uiAutomation = getInstrumentation().getUiAutomation();从仪器中获取。

    然后你不能将任何关键事件发送到另一个应用程序,因为它需要INJECT_EVENTS权限,这需要系统签名,你的应用程序显然缺乏这个权限:)

    所以,请打电话给这个:

    uiAutomation.performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
    

    它不需要任何权限,只需跨应用程序工作。请确保在Android 4.3上运行测试。

    其他link