Appium Bootstrap分析
BootStrap
BootStrap在手机端是以jar包的形式存在的,它是UiAutomator的一个测试用例,通过执行命令adb shell uiautomator runtest,在手机端运行。
BootStrap源码分析
BootStrap.java
首先从这个文件开始,这里创建了一个SocketServer,监听的端口为5724。

接下来就是进入server.listenForever方法。
server.listenForever
- 这里首先执行UpdateStrings.loadStringsJson(),用于获取APK中String.xml。
- 接下来是dismissCrashAlerts,用于注册UiWatchers监听器,这个是UiAutomator提供的,主要作用:当UiObject对象无法匹配Uiselector条件,即无法查找到元素的时候,会触发已注册的监听器,以避免测试过程中意外出现的弹出框导致用例运行失败的情况。
这里注册的是Appium已提供的ANR和Crash监听器。 - updateWatchers定义一个注册心跳程序,每隔1秒开始执行一遍上面注册的监听器来检查系统是否存在异常。
- allowBoxAlerts为自定义的监听器,用于监听是否出现”允许|立即删除|确定”这些弹出框按钮,如果出现就进行点击。
server.accept()
接收来自客户端的发来的数据,处理后,返回结果给客户端
handleClientData
读取及处理客户端发来的数据
BootStrap日志分析
这里在Appium里面开启debug日志
修改Appium/node_modules/appium-uiautomator/build/lib下面的uiautomator.js文件。
注意:这里如果修改的是Appium/node_modules/appium-uiautomator则需要重新编译后,也可以直接修改build里面的文件。
BootStrap的日志,在Appium日志中标签为AndroidBootstrap。
BootStrap启动

BootStrap与客户端(这里是指Appium server)的交互

BootStrap修改后打成jar包
从githib下载源码到本地,修改后,重新打成jar包
- 创建一个编译配置文件
android create uitest-project -n AppiumBootstrap -t 24 –p D:\tools\2\appium1.6.4\node_modules\appium\node_modules\appium-android-bootstrap\bootstrap
参数说明:
-n 为jar包名称
-t为android ID,使用android list命令可以查看,这里24为4.4.2
-p 为uiautomator testcase的目录 - Build项目
在项目目录下执行ant build
查看bootstrap/bin目录下生成的jar包文件。
BootStrap与原生的改动
端口
原生的默认为4724,为了避免跟Testbunld冲突,这里修改为5724
增加了一个监听器registerAuthorityWatcher
用来监听出现的允许|立即删除|确定按钮
BootStrap与Testbundle
原生的Appium操控手机使用BootStrap手机,我们公司的同时使用了原生的BootStrap用来操控原生的应用,同时用Testbundle来操作游戏应用。

浙公网安备 33010602011771号