使用UIAutomator在Android6.0执行,无法向手机SD卡写入内容问题的解决
2017-11-22 12:51
471 查看
最近发现使用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来简介获得到权限
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来简介获得到权限
相关文章推荐
- Mongo 3.X以上版本使用Robomongo无法查看Collections内容的问题解决
- Mongo 3.X以上版本使用Robomongo无法查看Collections内容的问题解决
- Kohana使用auth模块session_type选择database时无法写入session的问题解决
- 解决32G或64G的SD卡无法使用NOOBS安装树莓派的问题
- 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题
- 升级到安卓5.0后,和包提示:“检测到您的手机或sim卡不完全支持和包业务,部分NFC相关功能将无法正常使用”的问题解决办法
- 利用反射解决有些手机无法使用手电筒的问题
- 解决ssh远程执行命令无法使用awk/sed的问题
- 解决ssh远程执行命令无法使用awk的问题
- 使用复制存储过程执行解决“事务复制中的表大量更新导致无法及时同步”的问题 (转)
- Android手机JmDNS的使用以及解决某些品牌手机Multicast无法接收组播消息的问题
- 使用复制存储过程执行解决“事务复制中的表大量更新导致无法及时同步”的问题
- 解决刷入4.4.2之后外置SD卡 无法写入问题
- [问题解决]手机调试无法显示logcat内容
- 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题
- Android手机连接电脑过后,无法看到Logcat内容的问题解决方法
- 解决ssh远程执行命令无法使用awk的问题
- 解决ssh远程执行命令无法使用awk的问题
- 使用proxy解决nginx alias无法执行PHP等fastcgi问题
- 使用复制存储过程执行解决“事务复制中的表大量更新导致无法及时同步”的问题