Python uiautomator 源码学习(一)
来源:互联网 发布:backbone.js 教程 编辑:程序博客网 时间:2024/06/04 18:15
python uiautomator wrapper 源码学习
首先感谢xiaocong,让python的developer可以轻松的操控android automation。
利用jsonRPCServer实现python与 android uiautomator的沟通的确是最易懂最方便的方法。
本文主要是对python uiautomator wrapper的学习。 JsonRPCServer 在下章再讲。
安装及使用
请参考官网: https://github.com/xiaocong/uiautomator
安装
$git clone https://github.com/xiaocong/uiautomator.git$cd uiautomator$sudo python setup.py install
or
$sudo pip install uiautomator
使用
import uiautomator as uid = ui.Device("<serial>")d = ui.device
源码解析:
我的源码位置: /usr/local/lib/python2.7/dist-packages/uiautomator/init.py
Start:
import uiautomator as uid = ui.Device("xxxxxx") --> d = AutomatorDevice("xxxxx") # 创建指定serial 的device objectd = ui.device --> d = AutomatorDevice() #创建未指定device serial 的object
接下来我们就看看源码中的工作流程
最主要的8个类及他们的关系是:
Selector(dict): 负责数据存取修改,与jsonprcserver 一起完成控件动作的交互
- 继承dict
- 初始化数据
__fields
- 重写功能
__setitem__/__delitem__
等 - 增加功能
clone/child/sibling
等。
Adb(object): adb 工具封装类,不做过多介绍
AutomatorServer(object): 主要用于RPC server的操作, start/stop/communicate with JsonRPCClient()
- self.adb = Adb(serial)
- 定义self.device_port
- self.jsonrpc @property
AutomatorDevice(object): Device 对象类,这里是uiautomator的入口
- 提供device对象基本功能,如press、screenshot、等
__call__(self) --> return AutomatorDeviceObject(self, Selector(**kwargs))
#寻访控件的时候(callable)用到,如uiautomator.device(packageName = "com.google.android.googlequicksearchbox")
AutomatorDeviceUiObject(object): UiObject 父类
- 基本控件操作
AutomatorDeviceNamedUiObject(AutomatorDeviceUiObject): 基于text、instance、description的UiObject
- 在AutomatorDeviceObject() 接到child_by_text/child_by_description/child_by_instance 等时被调用。
- return self
AutomatorDeviceObject(AutomatorDeviceUiObject): UiObject 默认类,在device对象被call的时候就会被实例化。
- 控件基本操作
流程:
d = uiautomator.deviced.click(x,y) ==> AutomatorDevice().click(x,y) ==> AutomatorDevice().jsonrpc.click(x, y) ==> JsonRPCClient(*args,**kwargs) ==> DUT
d = uiautomator.deviced(className="android.widget.ListView").child(text="Bluetooth")
d = uiautomator.deviced(className="android.widget.ListView").child_by_text("Bluetooth")
结语:
python uiautomator 代码简洁方便开发。 但它依赖于android.Uiautomator/ josonrpcserver. 因此,在稳定性、performance部分难免会有瓶颈。
期待着xiaocong的uiautomator有更好地突破。
- Python uiautomator 源码学习(一)
- python uiautomator 源码学习(二) JosonRPCServer-Host Side
- python uiautomator 源码学习(三) josonRPCServer-DUT Side
- android uiautomator学习(一)创建工程
- android uiautomator学习(一)创建工程
- android uiautomator学习(一)创建工程
- android uiautomator学习(一)创建工程
- android uiautomator学习(一)创建工程
- android uiautomator学习(一)创建工程
- android uiautomator学习(一)创建工程
- 初探UiAutomator(一)
- Uiautomator测试分享(一)
- 简单使用uiautomator(一)
- Python + uiautomator测试 [学习资料收集]
- Python源码分析--学习笔记一
- 初试uiAutomator 创建项目(一)
- UiAutomator自动化测试使用小结(一)
- Android自动化之uiautomator(一)
- spring -mvc 将对象 已json返回时 忽略掉对象中的属性注解方式
- 如何修改MFC界面风格
- 在Mifare S50中,如果第2区的访问控制码为FF 08 70 69,则该区块1和3的访问控制条件是什么
- 实用小技巧之电脑如何滚动截屏/截取长图
- (6.1.1)操作系统引论
- Python uiautomator 源码学习(一)
- 服务器集群笔记
- java程序初级理解
- LINQ to Entities 不识别方法“Int32 ToInt32(System.String) 或 “Int32 Parse(System.String)”
- hibernate基础知识总结2--持久化概念
- Hadoop Hive sql语法详解
- 8种健康食物,让你跑得更快?
- javascript 手机手势动作touch触屏原理分析
- git常用命令