一、Poco介绍
注解
本文档为Poco框架的补充文档,将详细介绍Poco脚本与其编写技巧,在脚本编写过程中请同学们参照 Poco项目文档 获取更多API的详细信息。
1. Poco简介
Poco是一款跨平台的自动化测试框架,基于UI控件搜索原理 ,适用于Android、iOS原生和各种主流的游戏引擎应用。与基于图像识别的Airtest不同的是,Poco可以使用类似 poco("OK").click()
的方式来获取并操作节点。
以下是Poco相关文档的地址:
2. Poco的本质
与Airtest框架一样,Poco实际上也是Python的一个第三方库。我们在AirtestIDE中可以录制、编写和运行Poco脚本,是因为AirtestIDE自带的Python环境已经装好了pocoui。
如需脱离AirtestIDE编写/运行Poco脚本,我们只需要准备一个本地Python环境,然后在该环境里安装上pocoui即可:
pip install pocoui
注意
在本地Python环境安装Poco框架的时候,我们需要注意框架的库名是pocoui
,请勿同时安装poco
和pocoui
,可能会产生冲突;另外,如Python环境未安装airtest框架就直接安装poco框架,则会把airtest框架一并安装上。
3. Poco的支持情况
Poco在大多数平台中,需要 事先接入Poco-SDK才可正常使用 ,在少数平台(如Android原生APP、iOS原生APP)可直接使用Poco,目前支持平台如下:
平台 | Airtest | Poco |
---|---|---|
Android 原生APP | √ | 直接使用 |
iOS 原生APP | √ | 直接使用 |
Unity3D | √ | Poco-SDK接入文档 |
Cocos2dx-lua | √ | Poco-SDK接入文档 |
Cocos2dx-js | √ | Poco-SDK接入文档 |
cocos-creator | √ | Poco-SDK接入文档 |
Egret | √ | Poco-SDK接入文档 |
UE4 | √ | Poco-SDK接入文档 |
Other engines | √ | 可自行接入 |
WeChat Applet&webview | √ | 参考文档 随着微信更新可能会失效 |
Windows | √ | 目前仅支持接入了PocoSDK的游戏窗口 |
MacOS | √ | 努力开发中,敬请期待 |
Netease | √ | 网易内部引擎帮助文档 |
更多平台支持正在陆续添加中,若有平台支持的需求,可以到 Poco-github 上提交issue,或联系我们。
4. Poco试用demo
鉴于SDK的接入步骤比较繁琐,我们提供了不同平台上的几个简单Demo范例,供大家下载之后体验和熟悉Poco,请前往 Poco Examples and Tutorials 页面了解更多详情:
5. Poco如何获取各平台应用的控件信息
1)Android
需要获取Android平台的原生控件信息,我们的安卓设备上必须安装上pocoservice.apk(若pocoui版本<1.0.84,则需要安装2个pocoservice的apk)。这个应用可以在AirtestIDE的该目录下找到:
并且设备需要给pocoservice.apk足够的后台活跃权限,此处只列举了部分常见国产品牌手机的设置项,如果你的手机品牌不在这个列表中,请尽量按照下面提供的示例检查一下手机是否有类似设置:
- 小米:启用手机管家-应用管理-权限-自启动管理-PocoService,允许PocoService自启动
- 华为:手机管家(大于8.0版本)-应用启动管理-PocoService允许自启动和后台活动
- OPPO:设置-电池-应用耗电管理-pocoservice-允许应用自启动,允许完全后台行为
- VIVO:电池-后台高耗电-> PocoService 开启
- Realme:设置-电池-应用耗电管理-pocoservice-允许应用自启动,允许完全后台行为
- 一加:设置-电池-电池优化-PocoService-不优化
2)iOS
获取iOS的原生控件信息,需要依赖于 WebDriverAgent
,iOS的控件操作远远慢于Android的控件操作,这也是因为受限于 WebDriverAgent
的信息传输时间和操作响应时间,目前没有很好的优化方案。
3)各种游戏引擎
Poco能获取各种游戏应用的控件信息,是因为我们在游戏项目中嵌入了Poco-SDK,当我们启动游戏的时候,即开启了游戏内的Poco通讯服务,从游戏内部传输控件信息供框架使用。
所以未接入Poco-SDK的游戏应用无法获取控件,就是因为没有在游戏内部嵌入对应的Poco通讯服务。我们也经常在Poco-SDK的接入教程中强调,poco服务必须挂载在1个永不被销毁的节点上,这是因为一旦挂载Poco服务的节点被销毁了,则意味着Poco通讯结束了,我们就无法正常获取游戏应用的控件信息。
6. Poco能做些什么
Poco能帮助我们获取控件的属性信息、操作控件、设置控件的text属性等等,但是连接设备、断言等操作,还需要依赖于Airtest的API,所以我们大多数情况下,都需要混合使用Airtest和Poco框架来编写我们的自动化脚本。