测试积点老人 发表于 2018-12-25 16:09:38

appium和boostrap通信过程数据分析

这篇只分析appium和手机的通信过程,主要是数据交换的一个过程分析。 这个过程手机端bootstrap充当socket-server端,监听连接,appium充当socket-client端,主动去和手机连接,并和手机端boostrap通信。
首先是最简单的,最底层的自动化测试模式,一般分两步:
[*]第一步:查找元素
[*]第二部:操作元素

通信过程就是:第一步:Appium首先发送json字符串,该字符串带有元素的某些标志,如:{"cmd": "action","action": "find","params": {"strategy": "class name","selector": "android.widget.ImageView","context":"", "multiple":false}}
注意上下文context参数,要设置成基元素的elementid,第一层则为空。该字串指定查找的方式为通过class name,且class name等于android.Widget.ImageView的元素,false表示元素个数唯一。Boostrap端接收到这个数据后,会调用uiautomator去查找符合条件的元素,然后返回该元素的elementid,数据格式:{"value":{"ELEMENT":"1"},"status":0},如果multiple为true的话,则返回格式{"value":[{"ELEMENT":"1"},{"ELEMENT":"2"}],"status":0} 第二步:就是对元素的操作,也是向手机端发送json字符串,格式如:{"cmd":"action","action":"element:click","params":{"elementId":"4"}}其中click是对元素的操作类型,4是元素的elementid,是从第一步中获取到的。如果手机端操作成功会返回{"value":true,"status":0}这就是一个基本的操作所需要的数据通讯过程了,这个过程可以手动用socket模拟实现。
其他还有一些复杂的操作,像flick,scroll等都类似,还有一些直接没有第一步,直接进行操作的如按键,swipe等,略过不提。像swipe(x-x,x-y,y-x,y-y,step),只需要向socket写入以下数据:{"cmd": "action","action": "swipe","params": {"startX": start_x, "startY": start_y,"endX": stop_x, "endY": stop_y, "steps": step}}则手机就会执行swipe操作。
数据总结:1,查找元素的strategy有以下固定的几种:ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"而这些字段的value则需要根据apk源码或者uiautomator去查看了。
2,所有的操作类型列表(pyappium部分还没有实现):ClearClickCompressedLayoutHierarchyDragFindFlickgetAttributegetDataDirgetDeviceSizegetLocationgetNamegetSizegetTextLongpresskeycodeMultipointergestureOpennotificationOrientationPinchPressbackPresskeycodeScrollSettextSourceSwipeTakescreenshotTouchdownTouchupTouchmoveTouchlongclickToucheventUpdatestringsWaitforidleWake
页: [1]
查看完整版本: appium和boostrap通信过程数据分析