Appium Android Bootstrap源码分析之简介
来源:互联网 发布:java下载图片到本地 编辑:程序博客网 时间:2024/04/28 08:16
在上一个系列中我们分析了UiAutomator的核心源码,对UiAutomator是怎么运行的原理有了根本的了解。今天我们会开始另外一个在安卓平台上基于UiAutomator的新起之秀--Appium的源码分析之旅。
本文在真个系列中会扮演一个简介的角色,不会分析任何的代码,只会先给大家一个基本的印象,方便大家在持有这个印象的基础上往下和本人一块分析。
1. Bootstrap定义及在Appium中扮演的角色
下面一部分就是蓝色的就是bootstrap所在的位置,可以看到它是运行在我们的安卓目标测试机器端的,它会监听4724端口获得命令然后pass给UiAutomator来做处理。
那么我们应该怎么来给bootstrap做一个定义呢?我不知道官方有没有做一个定义,但是按照我自己的语言,我会这样来定义它:
- Bootstrap是Appium运行在安卓目标测试机器上的一个UiAutomator测试脚本,该脚本的唯一一个测试方法所做的事情是在目标机器开启一个socket服务器来把一个session中Appium从PC端过来的命令发送给UiAutomator来执行处理。
- 首先,它是一个uiautomator的测试脚本,它的入口类Bootstrap继承于UiAutomatorTestCase,所以UiAututomator可以正常运行它,它也可以正常的使用uiautomator的方法,这个就是appium的命令可以转换成uiautomator的命令的关键
- 其次,它是一个socket服务器,它专门监听4724端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理
- 最后,它处理的是appium从pc端过来的命令,而非一个文件。这在初次接触appium的朋友是很容易困惑的,以为appium是整个脚本文件发送到目标机器再由bootstrap进行分析处理的,事实并非如此
2. Bootstrap关键类一览表
上面寥寥几句道出了bootstrap的定义,那么往下我们就继续寥寥几行的把bootstrap这个jar包的关键类以及它的关键方法和相应的本人的一些说明给列出来,给大家现有一个draft idea每个类大概是怎么一回事,这样我们往下的文章就比较好说,大家也比较好理解了。
Class
Key Method
Key Member
Parent
Description
Comment
Bootstrap
testRunServer
以一个UiAutomatorTestCase的方法的方式运行一个SocketServer来监听4724端口
整个bootstrap是以UiAutomator的TestCase的方式运行的,所以这里的Bootstrap这个类必须要继承于UiAutomatorTestCase
SocketServer
handleClientData
读取socket进来的字串命令信息并转换成AndroidCommand命令然后调用runCommand命令执行命令进行返回
AndroidComma
ndType
enum AndroidCommandType {
ACTION,SHUTDOWN
}
安卓命令的类型,只有两种,shutdown的处理方式和普通的action会不一样
AndroidComma
nd
action/getElement
JSONObject json;
AndroidCommandType cmdType;
从用户发过来的json命令信息得到真正的命令
CommandHand
ler
execute
虚拟类,其他真实CommandHandler如click的父类
AndroidComma
ndExecutor
execute
HashMap<
String,
CommandHan
dler> map
map是所有的命令字串和真实的CommandHandler的一个映射。
其成员函数execute就是通过字串命令找到map对应的handler然后执行的
AndroidComma
ndResult
AndroidCommandResult
JSONObject json
组织json格式返回值的类
AndroidElement
Click
UiObject el;
String id;
代表了一个控件
其中id是其在AndroidElementsHash维护的elements这个哈希表的key,并非控件id。
AndroidElement
Hash
addElement
Hashtable<
String,
AndroidEle
ment>
elements;
维护这个session当前为止碰到过的所有控件的哈希表
注意key就是上面AndroidElement的id这个成员变量。每有一个新的控件从appium pc端过来这个值就会加一
Click
execute
CommandHandler
处理点击命令的类。
真正执行的是传进来的AndroidCommand对应UiObject的Click方法
其他find,drag,setText等命令同理
Strategy
fromString
publicenumStrategy {
CLASS_NAME
("class
name”),
CSS_SELECT
OR("css
selector”)
,
ID(“id"),
NAME(“name
"),
LINK_TEXT(
"link
text"),
PARTIAL_LI
NK_TEXT(“p
artial
link
text"),
XPATH(“xpa
th"),
ACCESSIBIL
ITY_ID(“ac
cessibilit
y id”),
ANDROID_UI
AUTOMATOR(
"-android
uiautomato
r");
查找控件命令的策略类
find这个CommandHandler会根据用户给出的不同策略来用不同的方式进行控件查找。比如用xpath的方式和用uiautomator的方式是不一样的
这里类在我们往下的分析文章中会做进一步的阐述,所以在这里你只需要由一个rough的idea这些类大概是怎么一回事就可以了。
3. Bootstrap运行流程简介
作者
自主博客
微信
CSDN
天地会珠海分舵
http://techgogogo.com
服务号:TechGoGoGo
扫描码:
http://blog.csdn.net/zhubaitian
- Appium Android Bootstrap源码分析之简介
- Appium Android Bootstrap源码分析之简介
- UiAutomator系列——Appium Android Bootstrap源码分析之简介(006)
- Appium Android Bootstrap源码分析之控件AndroidElement
- Appium Android Bootstrap源码分析之命令解析执行
- Appium Android Bootstrap源码分析之启动运行
- Appium Android Bootstrap源码分析之控件AndroidElement
- Appium Android Bootstrap源码分析之命令解析执行
- Appium Android Bootstrap源码分析之启动运行
- appium Bootstrap UiSelectorParser源码分析
- UiAutomator系列——Appium Android Bootstrap源码分析之控件AndroidElement(007)
- UiAutomator系列——Appium Android Bootstrap源码分析之命令解析执行(008)
- UiAutomator系列——Appium Android Bootstrap源码分析之启动运行(009)
- Appium Server源码分析之作为Bootstrap客户端
- Appium Server源码分析之作为Bootstrap客户端
- Appium Server源码分析之作为Bootstrap客户端
- UiAutomator系列——Appium Server源码分析之作为Bootstrap客户端(011)
- appium框架之bootstrap
- Oracle中主键、外键、索引、序列、唯一性约束的创建
- PHP魔术方法总结
- jquery select 选中值
- 【Bootstrap】一个在当前网页弹出的对话框,可以关闭,不用跳转,非弹窗
- PPTP VPN地址记录
- Appium Android Bootstrap源码分析之简介
- bootstrap的后台二级垂直菜单
- jQuery表单操作经验分享
- 第10周项目1.2
- 铝合金锻前加热可采用多种加热设备
- Android Fragment 真正的完全解析(下)
- 第九周项目三之输出星号图f
- VirtualBox虚拟机设置与宿主主机共享网络连接
- 单例模式