在测试的过程中,会遇到异常情况的弹框,比如应用在网络不好的情况下出现弹框,这个时候会影响到测试,可以添加一个监听及时去处理这些弹框
参考文章:
AppiumServer 源码解析:http://blog.csdn.net/wanglha/article/details/42523745
AppiumBootstrap 调试方法:http://blog.csdn.net/qq744746842/article/details/50461988
Uiatomator 调试:https://testerhome.com/topics/1358
Uiautoamator2 弹框点击:https://testerhome.com/topics/8512
1、原理基础:主要利用 bootstrap 这个作为在手机里的 “手”,实现监听
1)bootstrap 的入口是一个继承了 UiautomatorTestCase 的测试类,实质上是一个 Uiautomator 项目
2)uiautomator 自带的监听器可以起到监听操作弹框的作用
2、实现步骤
1)打开 C:\Users\xxx\AppData\Roaming\npm\node_modules\appium\node_modules\appium-android-bootstrap\bootstrap 项目,阅读 bootstrap 官网(https://github.com/appium/appium-android-bootstrap/tree/master/bootstrapbootstrap 不报错))进行编译,使得项目不报错,可以编写(主要是使得
2)在 bootstrap.java->server.listenForever->dismissCrashAlerts->registerAnrAndCrashWatchers 中添加一个监听:
UiDevice.getInstance().registerWatcher("WIFI", new UiWatcher() {
@Override public boolean checkForCondition() {
UiObject window = new UiObject(new UiSelector().textContains("等一会")); if (window.exists()){
Logger.debug("WIFI UnStable"); try {
window.click();//点击等一会 } catch (UiObjectNotFoundException e) {
Log.e(LOG_TAG, "dialog gone?", e); }
return true; }
return false; }
}); Log.i(LOG_TAG, "Registed GUI Exception watchers");
}
注意:不要给项目引入 Junit 包,比如添加@test这样的操作,会导致下一步操作失败
3)进入 C:\Users\xxx\AppData\Roaming\npm\node_modules\appium\node_modules\appium-android-bootstrap\bootstrap\目录下执行:ant build
4)进行测试:
将 jar 包 push 到手机中:adb push C:\Users\hly\AppData\Roaming\npm\node_modules\appium\node_modules\appium-android-bootstrap\bootstrap\bin\AppiumBootstrap.jar /data/local/tmp/
运行 jar 包:adb shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap
3、遇到问题解决
1)执行 mvn install -P 4.4 报错:
[ERROR] Failed to execute goal org.codehaus.mojo:properties-maven-plugin:1.0.0:r
ead-project-properties (default) on project google-apis-19: Properties could not
be loaded from File: D:\tools\Android\sdk\add-ons\addon-google_apis-google-19\s
ource.properties -> [Help 1]
解决:这一步是添加 bootstrap 的 android 依赖包,后来自己创建项目的时候发现:只要在项目中导入 android 和 uiautomator 的 jar 即可
2)如果使用 ant 构建,出错了,查看下 android/sdk/tools/中是否有 ant 文件夹,如果没有需要寻找一个加进去。我是由于编写两外一个验证项目的时候,需要获 SDK 的 ID 值,但是在 android/sdk/tools/目录下执行的时候出现 android 关键字被弃用的报错,查找原因发现是由于 android 最新的 sdk 不支持 android 命令,更换旧版本的 sdk 中的 tools 文件夹即可。参考资料:http://forum.cocos.com/t/creator1-4-1-android/45151/22
示例 1 地址:http://www.cnblogs.com/cologne/p/4726024.html
示例 2 地址:http://www.it165.net/pro/html/201409/22071.html
我的 testerhome 提问:https://testerhome.com/topics/9140
4、遗留问题:
1)为何在 C:\Users\xxx\AppData\Roaming\npm\node_modules\appium\node_modules\appium-uiautomator\build\lib 下的 uiautomator.js 添加-e debug true 没有生效?
2)appium 是在什么时候对 bootstrap 进行打包的?
3)为何使用 mvn 构建的 jar 包,修改的代码无效?
4)mvn install -P 4.4 失败,以及构建 bootstrap 是否必须?