python uiautomator 源码学习(二) JosonRPCServer-Host Side
来源:互联网 发布:开淘宝店成本 编辑:程序博客网 时间:2024/05/17 07:19
python uiautomator 源码学习(二) josonRPCServer-Host Side
简介:
python uiautomator 与device 的沟通是通过jsonRPCServer 实现的,
Host 端用uiautomator启用 JsonRPCClient, DUT 用 JsonRPCServer。 如图:
源码中跟JsonRPCServer 直接关系的有三个类:
uiautomator/init.py:
class JsonRPCError(Exception) #异常类class JsonRPCMethod(object) # JsonRPCServer 沟通实现方法class JsonRPCClient(object) # Client 类,JsonRPCMethod 封装
具体实现过程,可以参考上篇博客:
Python uiautomator 源码学习(一)
流程
让我们先看看简单方法实现过程(host端):
d.info => AutomatorDevice().info return self.jsonrpc.objInfo(self.selector) =>AutomatorServer().jsonrpc.objInfo(self.selector) =>JsonRPCClient(self.rpc_uri,timeout=int(os.environ.get("JSONRPC_TIMEOUT", 90)),method_class=_JsonRPCMethod).__getattr__(objInfo) return self.method_class(self.url, method, timeout=self.timeout)=> JsonRPCMethod(url, objInfo, timeout)()req = urllib2.Request(self.url,json.dumps(data).encode("utf-8"),{"Content-type": "application/json"}) result = urllib2.urlopen(req, timeout=self.timeout)jsonresult = json.loads(result.read().decode("utf-8")) return jsonresult["result"]
总结起来如图:
所以很明白了,都是通过json和urllib2来实现的, host 端只需要发reqs 到server等待。 那么可以手动去实现,如下:
d.info
Python 2.7.3 (default, Sep 26 2013, 20:03:06)[GCC 4.6.3] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import json,urllib2>>> url = "http://localhost:9008/jsonrpc/0">>> data = {'jsonrpc': '2.0', 'method': 'deviceInfo', 'id': '3da0f15ed14e1b374f85a697b6f3beab'}>>> req = urllib2.Request(url, json.dumps(data).encode("utf-8"), {"Content-type": "application/json"})>>> result = urllib2.urlopen(req, timeout=90)>>> jsonresult = json.loads(result.read().decode("utf-8"))>>> jsonresult{u'jsonrpc': u'2.0', u'id': u'3da0f15ed14e1b374f85a697b6f3beab', u'result': {u'displayRotation': 0, u'displaySizeDpY': 962, u'displaySizeDpX': 601, u'displayWidth': 800, u'productName': u'malata8', u'currentPackageName': u'com.google.android.googlequicksearchbox', u'sdkInt': 22, u'displayHeight': 1216, u'naturalOrientation': True}}
d.(packageName = “com.google.android.googlequicksearchbox”).click()
Python 2.7.3 (default, Sep 26 2013, 20:03:06)[GCC 4.6.3] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import json,urllib2>>> url = "http://localhost:9008/jsonrpc/0">>> data = {'params': ({'childOrSiblingSelector': [], u'packageName': u'com.google.android.googlequicksearchbox', 'mask': 524288, 'childOrSibling': []},), 'jsonrpc': '2.0', 'method': 'click', 'id': '6b9e56084acb39b78a75fced64f43da0'}>>> req = urllib2.Request(url, json.dumps(data).encode("utf-8"), {"Content-type": "application/json"})>>> result = urllib2.urlopen(req, timeout=90)>>> jsonresult = json.loads(result.read().decode("utf-8"))
补充
uiautomator-stub.jar 是base on nanohttpd 和 jsonrpc4j, 所以可以直接用jsonrpclib. $pip install jsonrpclib
import jsonrpclibserver = jsonrpclib.Server('http://localhost:9008/jsonrpc/0')server.wakeUp()server.pressKey("home")server.pressKey("back")
JsonRPCServer Host 端我们算是大概了解了,下一篇将会继续学习DUT端JsonRPCServer
0 0
- python uiautomator 源码学习(二) JosonRPCServer-Host Side
- python uiautomator 源码学习(三) josonRPCServer-DUT Side
- Python uiautomator 源码学习(一)
- 初探UiAutomator(二)
- android uiautomator学习(二)主要类的简单介绍
- android uiautomator学习(二)主要类的简单介绍
- android uiautomator学习(二)主要类的简单介绍 .
- uiautomator简单使用(二)
- Python + uiautomator测试 [学习资料收集]
- Python源码学习之初始化(二)
- android自动化测试Uiautomator源码分析之二
- android uiautomator学习(二)主要类的功能简单介绍
- UiAutomator笔记之UiDevice API(二)
- 安卓自动化之uiautomator(python篇)二 UiDevice
- Python学习 (二)
- python学习(二)
- 学习Python(二)
- Python 学习(二)
- 水滴石穿C语言之指针综合谈
- EMVTag系列8《IC卡公钥证书》
- ASP.NET 5系列教程 (三):view components介绍
- VS2012程序打包部署详解
- ubuntu 致命错误: zlib.h:没有那个文件或目录
- python uiautomator 源码学习(二) JosonRPCServer-Host Side
- 李炎恢PHP培训视频教程
- C语言实现的一个简单的HTTP程序
- ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云
- #!/bin/bash详解
- 异步调用Webservice
- Struts2从版本2.2.1升级至2.3.15.1出现的问题
- EMVTag系列9《卡片管理数据》
- servlet的执行原理与生命周期