版权声明:该文章为AirtestProject原创文章;允许转载,但转载必须注明“转载”并保留原链接

前言

前面我们已经介绍了基于图像识别的测试框架Airtest,通过图像识别,已经可以编写大部分的测试脚本。但是在某些特殊情况下,例如对于游戏或App里的动态元素,通过图像识别定位较为困难。所以,我们的Airtest Project解决方案也提供了另外一种基于UI控件搜索的自动化框架 Poco,下面我们来通过一个示例来看看Poco如何使用。

示例

原生应用

对于Android和iOS平台上的原生应用(包括系统界面),可以直接使用Poco

准备工作:下载 Airtest IDE,解压并运行

Android 原生应用

  1. 准备一台Android手机,打开USB调试功能,然后连接电脑。正常情况下,就可以在Airtest IDE中看到手机列表:

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

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

  1. 与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信息。具体步骤如下

  1. 连接iOS手机,启动ios-Tagent项目,以Test方式运行到手机上。
  2. 使用iproxy命令启动代理
iproxy 8100 8100

如果希望在另外一台电脑连接iOS手机,可以安装wdaproxy

  1. 启动Airtest IDE, 输入proxy地址,即可连接iOS手机

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

  1. 获取到界面UI层级关系之后,我们就可以用Poco提供的API来编写自动化脚本了~

游戏

由于游戏的界面是通过游戏引擎渲染出来的,游戏界面没有系统原生的控件信息,所以对于游戏,我们需要接入 poco-sdk 才能获取到游戏界面中的控件信息。下面以Unity开发的手游为例,介绍如何在Android和iOS平台进行连接。

Android 游戏

  1. 参考 引擎接入指引,接入Poco-sdk。如下是Unity中接入方式:

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

  1. 在选择Unity模式之后,Airtest IDE会自动插入poco的初始化代码:
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

之后的脚本编写,就可以利用Poco提供的API对游戏界面上的元素进行操作了

iOS 游戏

  1. 同样的,先完成引擎SDK接入,然后通过Airtest IDE连接iOS手机
  2. 与Android不同的是,iOS Unity Poco的连接需要启动两个proxy,8100端口用于连接iOS手机,5001端口用于连接poco-sdk的rpc端口
iproxy 8100 8100
iproxy 5001 5001

这里的iproxy相当于adb中的forward

  1. 连接好iOS手机之后,选择Poco辅助窗中的Unity模式,即可看到当前界面的UI树结构:

  1. 之后即可通过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的介绍和入门教学的更多相关文章

  1. Windows Azure入门教学系列 (一): 创建第一个WebRole程序

    原文 Windows Azure入门教学系列 (一): 创建第一个WebRole程序 在第一篇教学中,我们将学习如何在Visual Studio 2008 SP1中创建一个WebRole程序(C#语言 ...

  2. Windows Azure入门教学系列 (九):Windows Azure 诊断功能

    本文是Windows Azure入门教学的第九篇文章. 本文将会介绍如何使用Windows Azure 诊断功能.跟部署在本地服务器上的程序不同,当我们的程序发布到云端之后,我们不能使用通常的调试方法 ...

  3. Windows Azure入门教学系列 (七):使用REST API访问Storage Service

    本文是Windows Azure入门教学的第七篇文章. 本文将会介绍如何使用REST API来直接访问Storage Service. 在前三篇教学中,我们已经学习了使用Windows Azure S ...

  4. Windows Azure入门教学系列 (六):使用Table Storage

    本文是Windows Azure入门教学的第六篇文章. 本文将会介绍如何使用Table Storage.Table Storage提供给我们一个云端的表格结构.我们可以把他想象为XML文件或者是一个轻 ...

  5. Windows Azure入门教学系列 (五):使用Queue Storage

    本文是Windows Azure入门教学的第五篇文章. 本文将会介绍如何使用Queue Storage.Queue Storage提供给我们一个云端的队列.我们可以用Queue Storage来进行进 ...

  6. [转]Windows Azure入门教学系列 (六):使用Table Storage

    本文转自:http://blogs.msdn.com/b/azchina/archive/2010/03/11/windows-azure-table-storage.aspx 本文是Windows ...

  7. Windows Azure中文博客 Windows Azure入门教学系列 (一): 创建第一个WebRole程序

    http://blogs.msdn.com/b/azchina/ 本文转自:http://blogs.msdn.com/b/azchina/archive/2010/02/09/windows-azu ...

  8. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究 ...

  9. Windows Azure入门教学系列 (二):部署第一个Web Role程序

    本文是Windows Azure入门教学的第二篇文章. 在第一篇教学中,我们已经创建了第一个Web Role程序.在这篇教学中,我们将学习如何把该Web Role程序部署到云端. 注意:您需要购买Wi ...

随机推荐

  1. 作业要求2018092609-2 选题 Scrum立会报告+燃尽图 01

    本组第一次作业 已由组员刘信鹏同学个人博客提交 链接 :  [https://www.cnblogs.com/liuxp775/p/11595227.html]

  2. 2019-11-19:xxe漏洞利用,笔记

    xxe,也就是xml,外部实体注入攻击,漏洞是对非安全的外部实体数据进行处理时引发的安全问题,要了解xxe,就必须懂得xml的一些规则xml是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据 ...

  3. 【集训Day4 动态规划】轮船问题

    轮船问题(ship) [问题描述] 某国家被一条河划分为南北两部分,在南岸和北岸总共有N对城市,每一城市在对岸都有唯一的友好城市,任何两个城市都没有相同的友好城市.每一对友好城市都希望有一条航线来往, ...

  4. Xamarin.Forms学习系列之SQLite

    在App中我们通常不会实时获取服务器数据,会在用户手机中保存历史数据,这个时候就需要用到数据库SQLite,由于微软的封装,在Xamarin中操作SQLite非常简单,类似EF的操作. 1.我们需要在 ...

  5. shell特殊符号及cut、sort_wc_uniq、tee_tr_split命令 使用介绍

    第6周第2次课(4月24日) 课程内容: 8.10 shell特殊符号cut命令8.11 sort_wc_uniq命令8.12 tee_tr_split命令8.13 shell特殊符号下 扩展1. s ...

  6. js的模糊查询

    在项目中会用到模糊查询,之前在首页是用的element的tree显示的目录,会有用到搜索,但tree里边会有自带的模糊查询,用filter-node-method方法使用 但上次的项目中 又涉及到不试 ...

  7. 你知道,HTTPS用的是对称加密还是非对称加密?

    1.引言 随着互联网安全意识的普遍提高,对安全要求稍高的应用中,HTTPS的使用是很常见的,甚至在1年前,苹果公司就将使用HTTPS作为APP上架苹果应用市场的先决条件之一(详见<苹果即将强制实 ...

  8. gdb调试常用方法介绍

    一.概述   GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.没有统一的界面,所有的操作都是通过命令的方式进行提供.对于习惯了图形界面方式进行调试的猿猿来说可能不是很顺手,但是如果你在 ...

  9. Java学习笔记(面向对象下)

    面向对象(下) 类的继承 类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称为子类,现有类称为父类,子类会自动拥有父类所有可继承的属性和方法.(用extends关键字)   //定义A ...

  10. VBA/Excel-实例系列-04-求两个数组的交集

    原创: Z Excel高效办公之VBA 2017-03-10 Part 1:逻辑过程 已有两个数组,要求单个数组中信息无重复 以最短的数组作为循环,分别判断该数组中的元素是否在另一个数组中 如果某一元 ...