Appium Android Bootstrap源码分析之简介
在上一个系列中我们分析了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命令执行命令进行返回 | |||
AndroidCommandType | enum AndroidCommandType {ACTION,SHUTDOWN
} |
安卓命令的类型,只有两种,shutdown的处理方式和普通的action会不一样 | |||
AndroidCommand | action/getElement | JSONObject json;AndroidCommandType cmdType; | 从用户发过来的json命令信息得到真正的命令 | ||
CommandHandler | execute | 虚拟类,其他真实CommandHandler如click的父类 | |||
AndroidCommandExecutor | execute | HashMap<String,
CommandHan dler> map |
map是所有的命令字串和真实的CommandHandler的一个映射。其成员函数execute就是通过字串命令找到map对应的handler然后执行的 | ||
AndroidCommandResult | AndroidCommandResult | JSONObject json | 组织json格式返回值的类 | ||
AndroidElement | Click | UiObject el;String id; | 代表了一个控件 | 其中id是其在AndroidElementsHash维护的elements这个哈希表的key,并非控件id。 | |
AndroidElementHash | 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源码分析之控件AndroidElement
通过上一篇文章<Appium Android Bootstrap源码分析之简介>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的 ...
- Appium Android Bootstrap源码分析之启动运行
通过前面的两篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>和<Appium Android Bootstrap源码分析之命令解析 ...
- Appium Android Bootstrap源码分析之命令解析执行
通过上一篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>我们知道了Appium从pc端发送过来的命令如果是控件相关的话,最终目标控件在b ...
- Android HandlerThread 源码分析
HandlerThread 简介: 我们知道Thread线程是一次性消费品,当Thread线程执行完一个耗时的任务之后,线程就会被自动销毁了.如果此时我又有一 个耗时任务需要执行,我们不得不重新创建线 ...
- Android Choreographer 源码分析
Choreographer 的作用主要是配合 Vsync ,给上层 App 的渲染提供一个稳定的 Message 处理的时机,也就是 Vsync 到来的时候 ,系统通过对 Vsync 信号周期的调整, ...
- Bootstrap源码分析系列之初始化和依赖项
在上一节中我们介绍了Bootstrap整体架构,本节我们将介绍Bootstrap框架第二部分初始化及依赖项,这部分内容位于源码的第8~885行,打开源码这部分内容似乎也不是很难理解.但是请站在一个开发 ...
- Bootstrap源码分析系列之整体架构
作为一名合格的前端工程师,你肯定听说过Bootstarp框架.确实可以说Bootstrap框架是最流行的前端框架之一.可是也有人说Bootstrap是给后端和前端小白用的,我认为只要学习它能给我们前端 ...
- android消息处理源码分析
一.简介消息处理机制主要涉及到这几个类:1.Looper2.MessageQueue3.Message4.Handler 二.源码分析 Looper.class的关键源码: //保存Looper对象, ...
- BOOtstrap源码分析之 tooltip、popover
一.tooltip(提示框) 源码文件: Tooltip.jsTooltip.scss 实现原理: 1.获取当前要显示tooltip的元素的定位信息(top.left.bottom.right.wid ...
随机推荐
- Servlet上传文件
Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...
- NSUserDefaults API简单的介绍和使用英文文件
Overview The NSUserDefaults class provides a programmatic interface for interacting with the default ...
- Sass 基础和入门
css本身很有趣,但是随着样式表变大,会越来越复杂,更加难以管理.css预处理器在这里就能帮上忙了.SASS 让你使用在css中不存在的特性,譬如变量.嵌套.mixins(混入),继承和一些其他好的特 ...
- HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
这个问题是一个典型的类型的问题迷宫广泛的搜索. 在网上看到了很多解决方案. 没什么解决问题的分析报告,不指出其中的关键点.代码更像是一大抄.一些分析师也有很大的文章分析.只是不要全部命中关键,什么是广 ...
- 10624 - Super Number
题目链接 题意:给出n到m的范围,求出一个数在前i位数组成的数字能被i整除.假设存在输出这个数,假设不存在.输出-1. 思路:回溯,每次放第i位,然后推断是否符合题意.这题踩着时间过去的2.6s(看了 ...
- WPF学习(8)数据绑定
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
- poj 1004 Dividing
大意是,从输入六个数 .第i个数代表价值为i的有几个,平均分给两个人 ,明摆着的背包问题,本来以为把他转化为01背包.可是TLe,后来发现是12万的平方还多,所以妥妥的TLE,后来发现这是一个全然背包 ...
- 王立平--result += "{";
result += "{"; 等于:result=result+"{" 字符串连接 x+=1====x=x+1 版权声明:本文博客原创文章,博客,未经同意,不得 ...
- 解决Activity启动黑屏和设置android:windowIsTranslucent不兼容activity切换动画的问题
在该项目中遇到开Activity之后,黑屏问题,解决的办法是在网上通过设置发现theme和style特性,可以实现. http://www.cnblogs.com/sunzn/p/3407078.ht ...
- BZOJ 2115 Wc2011 Xor DFS+高斯消元
标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...