Poco的介绍和入门教学
版权声明:该文章为AirtestProject原创文章;允许转载,但转载必须注明“转载”并保留原链接
前言
前面我们已经介绍了基于图像识别的测试框架Airtest,通过图像识别,已经可以编写大部分的测试脚本。但是在某些特殊情况下,例如对于游戏或App里的动态元素,通过图像识别定位较为困难。所以,我们的Airtest Project解决方案也提供了另外一种基于UI控件搜索的自动化框架 Poco,下面我们来通过一个示例来看看Poco如何使用。
示例
原生应用
对于Android和iOS平台上的原生应用(包括系统界面),可以直接使用Poco
准备工作:下载 Airtest IDE,解压并运行
Android 原生应用
- 准备一台Android手机,打开USB调试功能,然后连接电脑。正常情况下,就可以在Airtest IDE中看到手机列表:

- 点击
connect,即可在Airtest IDE 中看到设备屏幕。现在进入Android主界面,点击左侧的Poco辅助窗,选择Android模式,即可看到当前界面的UI树结构:

- 选择Poco辅助窗口中的
Poco Inspector按钮,即可对页面上的UI控件进行定位:

- 与Airtest的使用方式类似,我们可以使用Poco提供的方法对界面上的元素进行操作:
# Airtest IDE自动插入的初始化语句 from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) # 点击设置图标
poco(desc="设置").click()
如上所示代码,即可通过UI属性进行元素定位,并进行操作。
关于使用Poco测试Android原生应用的更多细节,可以参考教程(五、如何在Android手机上进行自动化测试(下))。
iOS 原生应用
对于iOS原生应用,Poco同样可以获取到UI层级结构。除了下载运行Airtest IDE之外,我们还需要运行ios-Tagent项目,才可以获取到iOS界面的UI信息。具体步骤如下
- 连接iOS手机,启动ios-Tagent项目,以Test方式运行到手机上。
- 使用
iproxy命令启动代理
iproxy 8100 8100
如果希望在另外一台电脑连接iOS手机,可以安装wdaproxy
- 启动Airtest IDE, 输入proxy地址,即可连接iOS手机

- 选择Poco辅助窗中的
iOS模式,即可看到当前界面的UI树结构:

- 获取到界面UI层级关系之后,我们就可以用Poco提供的API来编写自动化脚本了~
游戏
由于游戏的界面是通过游戏引擎渲染出来的,游戏界面没有系统原生的控件信息,所以对于游戏,我们需要接入 poco-sdk 才能获取到游戏界面中的控件信息。下面以Unity开发的手游为例,介绍如何在Android和iOS平台进行连接。
Android 游戏
- 参考 引擎接入指引,接入Poco-sdk。如下是Unity中接入方式:

- 启动Airtest IDE,并启动对应的游戏,选择Poco辅助窗中的
Unity模式,即可看到当前界面的UI树结构:

- 在选择Unity模式之后,Airtest IDE会自动插入poco的初始化代码:
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
之后的脚本编写,就可以利用Poco提供的API对游戏界面上的元素进行操作了
iOS 游戏
- 同样的,先完成引擎SDK接入,然后通过Airtest IDE连接iOS手机
- 与Android不同的是,iOS Unity Poco的连接需要启动两个proxy,8100端口用于连接iOS手机,5001端口用于连接poco-sdk的rpc端口
iproxy 8100 8100
iproxy 5001 5001
这里的iproxy相当于adb中的forward
- 连接好iOS手机之后,选择Poco辅助窗中的
Unity模式,即可看到当前界面的UI树结构:

- 之后即可通过Poco提供的API,对iOS上的游戏编写自动化测试脚本了。
Poco的平台支持情况
Poco在大多数平台中,需要事先接入Poco-SDK才可正常使用 ,在少数平台(如Android与iOS原生APP)可直接使用Poco,目前支持平台如下:
| 平台 | Airtest | Poco |
|---|---|---|
| Cocos2dx-js, Cocos2dx-lua | √ | 接入文档 |
| Unity3D | √ | 接入文档 |
| Android 原生APP | √ | 直接使用 |
| iOS | √ | 帮助文档 |
| Egret | √ | 接入文档 |
| Other engines | √ | 可自行接入 |
| WeChat Applet&webview | √ | 参考文档 随着微信更新可能会失效 |
| Windows, MacOS | √ | 敬请期待 |
| Netease | √ | 网易内部引擎帮助文档 |
在文档Poco支持平台中,可以获得最新更新的平台支持情况。
更多详细资料参考
请查看Poco官方文档获得更多教程与API信息,这里是一些关注度较高的内容:
- 入门教学用例
- 如何使用Poco选择UI对象?
- API文档参考:Poco instance API,UI proxy object API
- 各类引擎如何接入Poco SDK?
- 如何为自定义引擎编写Poco SDK?
Poco的介绍和入门教学的更多相关文章
- Windows Azure入门教学系列 (一): 创建第一个WebRole程序
原文 Windows Azure入门教学系列 (一): 创建第一个WebRole程序 在第一篇教学中,我们将学习如何在Visual Studio 2008 SP1中创建一个WebRole程序(C#语言 ...
- Windows Azure入门教学系列 (九):Windows Azure 诊断功能
本文是Windows Azure入门教学的第九篇文章. 本文将会介绍如何使用Windows Azure 诊断功能.跟部署在本地服务器上的程序不同,当我们的程序发布到云端之后,我们不能使用通常的调试方法 ...
- Windows Azure入门教学系列 (七):使用REST API访问Storage Service
本文是Windows Azure入门教学的第七篇文章. 本文将会介绍如何使用REST API来直接访问Storage Service. 在前三篇教学中,我们已经学习了使用Windows Azure S ...
- Windows Azure入门教学系列 (六):使用Table Storage
本文是Windows Azure入门教学的第六篇文章. 本文将会介绍如何使用Table Storage.Table Storage提供给我们一个云端的表格结构.我们可以把他想象为XML文件或者是一个轻 ...
- Windows Azure入门教学系列 (五):使用Queue Storage
本文是Windows Azure入门教学的第五篇文章. 本文将会介绍如何使用Queue Storage.Queue Storage提供给我们一个云端的队列.我们可以用Queue Storage来进行进 ...
- [转]Windows Azure入门教学系列 (六):使用Table Storage
本文转自:http://blogs.msdn.com/b/azchina/archive/2010/03/11/windows-azure-table-storage.aspx 本文是Windows ...
- Windows Azure中文博客 Windows Azure入门教学系列 (一): 创建第一个WebRole程序
http://blogs.msdn.com/b/azchina/ 本文转自:http://blogs.msdn.com/b/azchina/archive/2010/02/09/windows-azu ...
- .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究 ...
- Windows Azure入门教学系列 (二):部署第一个Web Role程序
本文是Windows Azure入门教学的第二篇文章. 在第一篇教学中,我们已经创建了第一个Web Role程序.在这篇教学中,我们将学习如何把该Web Role程序部署到云端. 注意:您需要购买Wi ...
随机推荐
- 程序员用于机器学习编程的Python 数据处理库 pandas 进阶教程
数据访问 在入门教程中,我们已经使用过访问数据的方法.这里我们再集中看一下. 注:这里的数据访问方法既适用于Series,也适用于DataFrame. **基础方法:[]和. 这是两种最直观的方法,任 ...
- 运用python实现冒泡排序算法
冒泡排序,一个经典的排序算法,因在算法运行中,极值会像水底的气泡一样逐渐冒出来,因此而得名. 冒泡排序的过程是比较两个相邻元素的大小,然后根据大小交换位置,这样从列表左端开始冒泡,最后最大值会依次从右 ...
- Solr搜索引擎【索引提交、事务日志、原子更新】
一.索引提交 当一个文档被添加到Solr中,但没有提交给索引之前,这个文档是无法被搜索的.换句话说,从查询的角度看,文档直到提交之后才是可见的.Solr有两种类型的提交:软提交和正常提交[也称硬提交] ...
- 在IOS中实现新浪微博OAuth认证
主要讲解在ios中的认证流程,至于如何得到新浪用户授权账号,地址,这些可以见视频0506. 1.用UIWebView访问新浪授权页面https://api.weibo.com/oauth2/autho ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(3)- Serial ISP模式(blhost)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的Serial ISP模式. 在上一篇文章 Boot配置(ISP Pin, OTP) 里痞子衡为大家 ...
- linux搭建ftp出错汇总
重启vsftpd出现”500 OOPS: vsftpd: cannot open config file:restart” 2008-05-09 21:33 进到/etc/init.d/目录 输入: ...
- hybrid app初体验,和react-native一起飞
第一次启动了react-native的示例,今天主要把其中遇到的坑与解决的办法分享给大家.如有疏漏.错误还望指正. 首先还是要从hybrid app这个概念说起(如果对于这个过程不感兴趣的同学,可以直 ...
- js4——字符转化
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 使用modelarts部署bert命名实体识别模型
模型部署介绍 当我们通过深度学习完成模型训练后,有时希望能将模型落地于生产,能开发API接口被终端调用,这就涉及了模型的部署工作.Modelarts支持对tensorflow,mxnet,pytorc ...
- [动图演示]Redis 持久化 RDB/AOF 详解与实践
Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...