Poco:跨引擎UI自动化测试框架的深度解析与实践

Poco简介

Poco是由AirtestProject团队开发的一款开源自动化测试框架,旨在解决跨平台、跨引擎的UI自动化测试难题。支持Unity3D、Cocos2d-x、Android原生应用、iOS原生应用等多种游戏和应用的UI自动化测试,通过简单的脚本编写,即可实现复杂的用户行为模拟和测试结果验证。Poco框架的核心思想是通过UI检查技术,自动识别和定位UI元素,从而简化测试脚本的编写和维护。

Poco的安装与配置

pip安装

pip install pocoui

此外,为了使用Poco进行UI元素的检查和测试脚本的编写,还需要安装Poco的SDK到目标游戏或应用中。具体集成步骤可以参考Poco的官方文档。

Poco的基本使用

连接设备

在使用Poco进行测试之前,需要先将目标设备(如Android手机)连接到测试主机上,并开启ADB调试模式。连接成功后,即可通过Poco框架与设备进行交互。

初始化Poco实例

根据不同的游戏引擎,需要初始化对应的Poco实例。例如,对于Unity3D引擎的游戏,可以使用UnityPoco类来初始化Poco实例。

from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

对于Android原生应用,可以使用AndroidUiautomationPoco类。

from poco.drivers.android_uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco()

UI元素的检查与定位

Poco提供了强大的UI检查功能,可以自动识别并列出目标设备上的所有UI元素。这可以通过AirtestIDE或独立的PocoHierarchyViewer工具来实现。在获取到UI元素的层次结构和属性后,即可通过Poco框架提供的API进行元素的定位和操作。

例如,要定位并点击一个名为“btn_start”的按钮,可以使用以下代码:

poco('btn_start').click()

元素的操作与验证

Poco支持多种UI元素的操作,如点击、拖拽、滑动等。同时,还可以对操作结果进行验证,以确保测试的准确性。

如:定位一个按钮并点击它,然后验证一个文本元素的内容:

# 定位并点击“btn_start”按钮
poco('btn_start').click()
time.sleep(1.5)
 
# 验证“scoreVal”文本元素的内容是否为“100”
assert poco('scoreVal').get_text() == "100", "Score is not correct."

Poco的高级功能

相对选择器

当UI元素之间存在复杂的层次关系或同名元素时,可以使用相对选择器来精确定位目标元素。相对选择器通过指定父元素和子元素的层次关系来定位目标元素。

例如,要定位一个名为“item”的子元素,其父元素为名为“list_item”的元素:

items = poco('main_node').child('list_item').offspring('item')
for item in items:
    print(item.child('material_name').get_text())

坐标系统

Poco支持两种坐标系统:归一化坐标系统和局部坐标系统。归一化坐标系统以设备屏幕的左上角为原点,将屏幕的宽度和高度作为1个单位长度。局部坐标系统则以某个UI元素的左上角为原点,将该元素的宽度和高度作为1个单位长度。

例如,要使用归一化坐标系统在屏幕中心点击:

poco.click(0.5, 0.5)

而要使用局部坐标系统在某个UI元素的中心点击,则需要先定位该元素,然后调用focus方法设置焦点,再进行点击操作:

poco('bg_mission').focus('center').click()

全局操作

Poco还支持在没有选中任何UI元素的情况下进行全局操作,如点击屏幕中心、长按、滑动等。这些操作对于模拟用户的全局交互行为非常有用。

例如,要在屏幕中心点击并长按3秒:

poco.long_click(0.5, 0.5, duration=3)

Poco的实践案例

以下是一个完整的测试脚本示例,演示了如何使用Poco框架对一个简单的游戏进行自动化测试。该游戏包含一个启动按钮、一个得分文本元素和多个可拖拽的星星元素。

import time
from poco.drivers.unity3d import UnityPoco
 
# 初始化Poco实例
poco = UnityPoco()
 
# 定位并点击启动按钮
poco('btn_start').click()
time.sleep(2)
 
# 拖拽星星到指定位置
star = poco('star')[0]  # 假设只有一个星星元素
target = poco('shell')  # 目标位置
star.drag_to(target)
time.sleep(1)
 
# 验证得分是否正确
assert poco('scoreVal').get_text() == "100", "Score is not correct after dragging star."
 
# 点击返回按钮结束测试
poco('btn_back').click()

更多内容

GitHub:https://github.com/AirtestProject/Poco

官方文档:https://poco-chinese.readthedocs.io/en/latest/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值