Appium Android Bootstrap源代码分析之简单介绍
在上一个系列中我们分析了UiAutomator的核心源代码,对UiAutomator是怎么执行的原理有了根本的了解。今天我们会開始另外一个在安卓平台上基于UiAutomator的新起之秀--Appium的源代码分析之旅。
本文在真个系列中会扮演一个简单介绍的角色,不会分析不论什么的代码。仅仅会先给大家一个主要的印象,方便大家在持有这个印象的基础上往下和本人一块分析。
1. Bootstrap定义及在Appium中扮演的角色
以下一部分就是蓝色的就是bootstrap所在的位置,能够看到它是执行在我们的安卓目标測试机器端的,它会监听4724port获得命令然后pass给UiAutomator来做处理。
那么我们应该怎么来给bootstrap做一个定义呢?我不知道官方有没有做一个定义,可是依照我自己的语言,我会这样来定义它:
- Bootstrap是Appium执行在安卓目标測试机器上的一个UiAutomator測试脚本。该脚本的唯一一个測试方法所做的事情是在目标机器开启一个socketserver来把一个session中Appium从PC端过来的命令发送给UiAutomator来执行处理。
- 首先,它是一个uiautomator的測试脚本,它的入口类Bootstrap继承于UiAutomatorTestCase。所以UiAututomator能够正常执行它。它也能够正常的使用uiautomator的方法,这个就是appium的命令能够转换成uiautomator的命令的关键
- 其次。它是一个socketserver。它专门监听4724port过来的appium的连接和命令数据。并把appium的命令转换成uiautomator的命令来让uiautomator进行处理
- 最后,它处理的是appium从pc端过来的命令,而非一个文件。这在初次接触appium的朋友是非常easy困惑的,以为appium是整个脚本文件发送到目标机器再由bootstrap进行分析处理的,事实并不是如此
2. Bootstrap关键类一览表
上面寥寥几句道出了bootstrap的定义,那么往下我们就继续寥寥几行的把bootstrap这个jar包的关键类以及它的关键方法和对应的本人的一些说明给列出来。给大家现有一个draft idea每一个类大概是怎么一回事,这样我们往下的文章就比較好说。大家也比較好理解了。
|
Class |
Key Method |
Key Member |
Parent |
Description |
Comment |
|
Bootstrap |
testRunServer |
以一个UiAutomatorTestCase的方法的方式执行一个SocketServer来监听4724port |
整个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 |
|
|
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 |
|
天地会珠海分舵 |
服务号:TechGoGoGo 扫描码:
tp=webp" alt="" style="max-width:100%; margin:0px; padding:0px; height:auto!important; word-wrap:break-word!important; width:auto!important; visibility:visible!important"> |
http://blog.csdn.net/zhubaitian |
Appium Android Bootstrap源代码分析之简单介绍的更多相关文章
- Appium Android Bootstrap源代码分析之启动执行
通过前面的两篇文章<Appium Android Bootstrap源代码分析之控件AndroidElement>和<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 ...
- Appium Android Bootstrap源码分析之控件AndroidElement
通过上一篇文章<Appium Android Bootstrap源码分析之简介>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的 ...
- Android HandlerThread 源代码分析
HandlerThread 简单介绍: 我们知道Thread线程是一次性消费品,当Thread线程运行完一个耗时的任务之后.线程就会被自己主动销毁了.假设此时我又有一 个耗时任务须要运行,我们不得不又 ...
- Android HttpURLConnection源代码分析
Android HttpURLConnection源代码分析 之前写过HttpURLConnection与HttpClient的差别及选择.后来又分析了Volley的源代码. 近期又遇到了问题,想在V ...
- Android KLog源代码分析
Android KLog源代码分析 Android KLog源代码分析 代码结构 详细分析 BaseLog FileLog JsonLog XmlLog 核心文件KLogjava分析 遇到的问题 一直 ...
- Android 消息处理源代码分析(1)
Android 消息处理源代码分析(1) 在Android中,通常被使用的消息队列的代码在文件夹\sources\android-22\android\os下,涉及到下面几个类文件 Handler.j ...
随机推荐
- MFC 实现打印机打印功能
Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这 ...
- html5进阶之canvas图像基础
1.首先还是使用之前讲过的Image()函数来预加载图像. 在调用图像之前,需创建一个事件监听器,为其保证图像已经正确的加载. 如下图: 监听图片已经正确加载 2.把图像显示在画布上面,这里将不再使用 ...
- 先刷一波简单的web前端面试题
1简述一下src与href的区别href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接.src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置 ...
- Java IO 学习(六)Java的Direct Memory与IO
ByteBuffer的源码中有这样一段注释: A byte buffer is either direct or non-direct. Given a direct byte buffer, the ...
- 牛客网 牛客练习赛7 B.购物-STL(priority_queue)
B.购物 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 在遥远的东方,有一家糖果专卖店 这家糖果 ...
- Python_Tips[4] -> and 和 or 的计算原则
and和or / and & or 对于and和or,可以连接多个值,其分别遵循原则: 全是 And: 返回第一个遇到的无效值,若全有效,返回最后一个有效值 全是 Or: 返回第一个遇到的有效 ...
- HDU 5916: Harmonic Value Description
题目描述 The harmonic value of the permutation $p_1,p_2,\cdots p_n$ is$$\sum_{i=1}^{n-1} gcd(p_i.p_{i+1} ...
- Struts的线程安全
Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题.然而 ...
- CRUD_PreparedStatement
package songyan.jdbc.crud; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...
- android中的开机自启动
android中的开机自启动 android中的开机自启动可分为两步: 1.写一个BroadcastReceiver: public class BootReceiver extends Broadc ...