使用UIAutomator在Android6.0执行,无法向手机SD卡写入内容问题的解决

来源:互联网 发布:网络水军怎么做 编辑:程序博客网 时间:2024/05/16 02:14

最近发现使用UIAutomator 2.0 写的测试脚本,在Android 6.0 以上手机上执行的时候会有权限问题。例如想在SD卡上创建一个文件来存储测试过程中产生的中间数据,这时6.0的android系统就会提示读写权限的问题。当然如果想读取手机内部信息也同样会面临着这样权限的提示。同类的问题解决方法如下。

1. 如果uiautomator脚本是写在被测试App源代码代码的test目录中,那么我们就直接把所需要的权限加到被测试App的AndroidManifest.xml文件中即可。


2. 往往我们的测试都是黑盒的,并不会把测试脚本与被测试App写在一起,这时使用AS开发的时候源代码里面就不会包含AndroidManifest.xml这个问题,那么我们需要在工程的main目录下创建一个这样的文件



我们创建的这个AndroidManifest.xml文件内容只需要写上我们想要申请的权限即可


    在AndroidManifest.xml中加完了权限后,还需要做如下操作才能真正的解决这个问题。

    uiautomator虽然单独做为一个工程,但是当我们查看测试代码工程编译的结果会发现实际上是两个apk文件


    这两个apk一个是包含了我们测试脚本的测试apk,另一个apk就是包含了我们刚刚添加了各种权限打包而成的,通过命令将这个apk手动安装到手机里面,这里关键是要加上-g这个参数的意义是授予应用程序清单中列出的所有权限(仅限Android 6.0)。这样我们再执行测试脚本就不会出现前面提到的权限问题了。



3. 简单说一下我理解的这么做的原理

    使用uiautomator1.0的时候我们没有遇到这样的问题(使用Eclipse开发环境)。uiautomator1.0的脚本最后是打包成为了一个可执行的jar文件,我理解这个jar文件凌驾于apk之上,所以可以操作其他apk的任何界面。不过到6.0之后的版本是不是会有权限问题,这个还没有经过验证

    当切换成了Android Studio编译环境,相应的runner也进化配置成为了“AndroidJUnitRunner”,这是我们发现打包后的uiautomator不再是原来的jar而是变成了一个testapk。刚刚提到打包文件夹里面有两个apk,一个是我们的testapk,一个是源程序apk,如果我们不是把测试脚本放在源代码中那么就是个是空的apk,这个空的apk就是测试apk依托的一个假的工程文件。我们把权限写在AndroidManifest.xml 里面就是通过这个依托的apk来简介获得到权限

阅读全文
0 0
原创粉丝点击