appium和boostrap通信过程数据分析
2016-06-30 15:26
435 查看
这篇只分析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部分还没有实现):
Clear
Click
CompressedLayoutHierarchy
Drag
Find
Flick
getAttribute
getDataDir
getDeviceSize
getLocation
getName
getSize
getText
Longpresskeycode
Multipointergesture
Opennotification
Orientation
Pinch
Pressback
Presskeycode
Scroll
Settext
Source
Swipe
Takescreenshot
Touchdown
Touchup
Touchmove
Touchlongclick
Touchevent
Updatestrings
Waitforidle
Wake
这个过程手机端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部分还没有实现):
Clear
Click
CompressedLayoutHierarchy
Drag
Find
Flick
getAttribute
getDataDir
getDeviceSize
getLocation
getName
getSize
getText
Longpresskeycode
Multipointergesture
Opennotification
Orientation
Pinch
Pressback
Presskeycode
Scroll
Settext
Source
Swipe
Takescreenshot
Touchdown
Touchup
Touchmove
Touchlongclick
Touchevent
Updatestrings
Waitforidle
Wake
相关文章推荐
- bootstrap初试进度条
- Bootstrap 3.3.4 发布,Web 前端 UI 框架
- angular 指令简述
- C#实现子窗体与父窗体通信方法实例总结
- java和c#使用hessian通信的方法
- win32下进程间通信(共享内存)实例分析
- WinForm实现跨进程通信的方法
- C#中使用UDP通信实例
- ASP.NET UserControl 通信的具体实现
- 利用ASP.NET MVC+Bootstrap搭建个人博客之修复UEditor编辑时Bug(四)
- 浅析Bootstrap验证控件的使用
- 基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
- Bootstrap教程JS插件弹出框学习笔记分享
- Bootstrap框架动态生成Web页面文章内目录的方法
- JS组件Bootstrap Table使用实例分享
- bootstrap学习笔记之初识bootstrap
- Bootstrap表单组件教程详解
- Bootstrap每天必学之前端开发框架
- Bootstrap 粘页脚效果
- 第八篇Bootstrap下拉菜单实例代码