Appium Bootstrap分析

BootStrap

BootStrap在手机端是以jar包的形式存在的,它是UiAutomator的一个测试用例,通过执行命令adb shell uiautomator runtest,在手机端运行。

BootStrap源码分析

BootStrap.java

首先从这个文件开始,这里创建了一个SocketServer,监听的端口为5724。

接下来就是进入server.listenForever方法。

server.listenForever

  1. 这里首先执行UpdateStrings.loadStringsJson(),用于获取APK中String.xml。
  2. 接下来是dismissCrashAlerts,用于注册UiWatchers监听器,这个是UiAutomator提供的,主要作用:当UiObject对象无法匹配Uiselector条件,即无法查找到元素的时候,会触发已注册的监听器,以避免测试过程中意外出现的弹出框导致用例运行失败的情况。
    这里注册的是Appium已提供的ANR和Crash监听器。
  3. updateWatchers定义一个注册心跳程序,每隔1秒开始执行一遍上面注册的监听器来检查系统是否存在异常。
  4. 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包

  1. 创建一个编译配置文件
    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的目录
  2. Build项目
    在项目目录下执行ant build
    查看bootstrap/bin目录下生成的jar包文件。

BootStrap与原生的改动

端口

原生的默认为4724,为了避免跟Testbunld冲突,这里修改为5724

增加了一个监听器registerAuthorityWatcher

用来监听出现的允许|立即删除|确定按钮

BootStrap与Testbundle

原生的Appium操控手机使用BootStrap手机,我们公司的同时使用了原生的BootStrap用来操控原生的应用,同时用Testbundle来操作游戏应用。

posted on 2018-01-05 15:16  yanzilove  阅读(757)  评论(0)    收藏  举报