Skip to content

一、Poco介绍

注解

本文档为Poco框架的补充文档,将详细介绍Poco脚本与其编写技巧,在脚本编写过程中请同学们参照 Poco项目文档 获取更多API的详细信息。

1. Poco简介

Poco是一款跨平台的自动化测试框架,基于UI控件搜索原理 ,适用于Android、iOS原生和各种主流的游戏引擎应用。与基于图像识别的Airtest不同的是,Poco可以使用类似 poco("OK").click() 的方式来获取并操作节点。

image

以下是Poco相关文档的地址:

2. Poco的本质

与Airtest框架一样,Poco实际上也是Python的一个第三方库。我们在AirtestIDE中可以录制、编写和运行Poco脚本,是因为AirtestIDE自带的Python环境已经装好了pocoui。

如需脱离AirtestIDE编写/运行Poco脚本,我们只需要准备一个本地Python环境,然后在该环境里安装上pocoui即可:

pip install pocoui

注意

在本地Python环境安装Poco框架的时候,我们需要注意框架的库名是pocoui,请勿同时安装pocopocoui,可能会产生冲突;另外,如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的该目录下找到:

image-20211119165145246

并且设备需要给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框架来编写我们的自动化脚本。