新一版的 UiAutomator 被归到 Instrumentation 当中,所以它可以使用到 Android 的接口了,可以使用 Android 的四大组件,启动 Activity,启动 service,发送接收广播,操作共享数据,于是功能也就强大了很多,不再仅限于做 UI 界面的脚本操作了,通过 InstrumentationRegistry.getTargetContext();可以获取到 context 对象,然后就能得到各种你想要的东西。
基础知识储备:
1、ContentProvider 是 Android 四大组件之一,用于程序之间交换数据。
使用 ContentProvider 可以将数据暴露给其他程序,其他程序则使用 ContentResolver 对暴露的数据进行操作,
2、URI(uniform resource identifier) 统一资源标志符
Android 的 Uri 例如:content://com.android.contacts/contacts
它分为三部分
(1、content: 这是 Android 规定的,固定;
(2、com.android.contacts:这是 ContentProvider 的 authority,通过这个找到指定的 Provider;
(3、contacts:资源部分,访问不同资源则不同。 要讲一个字符串转换成 Uri,Uri uri = Uri.parse(String uri);
3、使用 ContentResolver 操作数据,Context 提供 GetContentResolver() 方法获得该对象;
然后就可以调用 ContantResovler 里面的增删改查 (insert/delete/update/query) 方法。
操作系统中的联系人
Android 系统有 Contacts 应用来管理联系人,提供了 ContentProvider 暴露其数据,所以其他应用可以操作联系人数据。
所以在 UiAutomator2.0 中得到 ContantResovler 之后,就可以像 android 应用一样去操作联系人的数据了,具体代码,网上有很多,直接复制就可以用的了。
这种方式的应用场景是:达到测试用例的前提条件;
优点:将非用例检查点部分的操作与 UI 界面解耦,减少维护量。
其中几个 Uri 如下:
ContactsContract.Contacts.CONTENT_URI;// 联系人的 Uri 对象
ContactsContract.CommonDataKinds.Phone.CONTENT_URI;// 获取联系人电话的 Uri
ContactsContract.CommonDataKinds.Email.CONTENT_URI;// 获取联系人邮箱的 Uri