三、Poco的介绍和入门教学 |
您所在的位置:网站首页 › pocc官网 › 三、Poco的介绍和入门教学 |
三、Poco的介绍和入门教学¶
1. 前言¶
前面我们已经介绍了基于图像识别的测试框架Airtest,通过图像识别,已经可以编写大部分的测试脚本。但是在某些特殊情况下,例如对于游戏或App里的动态元素,通过图像识别来定位就较为困难。 并且,如果我们测试的应用,UI界面迭代比较频繁的话,我们的Airtest图像脚本也要频繁迭代,成本比较高;所以,我们的Airtest Project解决方案也提供了另外一种基于UI控件搜索的自动化框架 Poco,下面我们简单介绍下Poco框架并且通过示例看下Poco如何使用。 2. Poco介绍¶Poco是一款基于Python语法的、与引擎无关的自动化测试框架,它基于控件搜索原理,可以准确定位到应用里面的控件,并且对控件进行点击、滑动等操作: 3. Poco测试不同应用的示例¶ 1)原生应用¶对于Android和iOS平台上的原生应用(包括系统界面),可以直接使用Poco 准备工作:下载 Airtest IDE,解压并运行 ① Android 原生应用¶ 准备一台Android手机,打开USB调试功能,然后连接电脑。正常情况下,就可以在Airtest IDE中看到手机列表: 点击connect,即可在Airtest IDE 中看到设备屏幕。现在进入Android主界面,点击左侧的Poco辅助窗,选择Android模式,即可看到当前界面的UI树结构: 选择Poco辅助窗口中的Poco Inspector按钮,即可对页面上的UI控件进行定位: 与Airtest的使用方式类似,我们可以使用Poco提供的方法对界面上的元素进行操作: # 选择Android模式时,AirtestIDE自动插入的初始化语句 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命令启动代理 bash iproxy 8100 8100 如果希望在另外一台电脑连接iOS手机,可以安装wdaproxy 启动Airtest IDE, 输入proxy地址,即可连接iOS手机 选择Poco辅助窗中的iOS模式,即可看到当前界面的UI树结构: 获取到界面UI层级关系之后,我们就可以用Poco提供的API来编写自动化脚本了~ 2)游戏¶由于游戏的界面是通过游戏引擎渲染出来的,游戏界面没有系统原生的控件信息,所以对于游戏,我们需要接入 poco-sdk 才能获取到游戏界面中的控件信息。下面以Unity开发的手游为例,介绍如何在Android和iOS平台进行连接。 ① Android 游戏¶ 参考 引擎接入指引,给游戏源码接入Poco-sdk,并打出Android包,安装到安卓测试设备上。 启动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上的游戏编写自动化测试脚本了。 4. Poco代码示例¶Poco脚本与Airtest脚本的差别很大,Airtest脚本基本上离不开截图,但Poco脚本都基于控件定位和控件操作,我们可以从下述示例来了解下Poco脚本: # -*- encoding=utf8 -*- __author__ = "AirtestProject" from airtest.core.api import * auto_setup(__file__) # Android poco的初始化脚本 from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) # 控件点击操作 poco("网易云音乐").click() # 控件滑动操作 poco(text="我好像在哪见过你 (电影《精灵王座》主题曲)").swipe([0.0492, -0.3799]) # 如果存在控件,则进行控件点击 if poco("star_single").exists(): poco("pos_input").child("Text").click() # 等待控件出现 poco("basic").wait_for_appearance() # 获取控件文本属性 score = poco("scoreVal").get_text() # 遍历控件和拖动控件 for star in poco("playDragAndDrop").child("star"): star.drag_to(poco("shell"))可以看到,poco脚本基本上是1个控件定位脚本,例如 poco("star_single") ,后面带上控件的操作,例如 click() 、 get_text() 等。 关于Poco的定位方式,我们可以查看下述资料: Poco的3种定位选择器 利用正则表达式匹配Poco控件 对于Poco控件操作的API,我们可以查看其API文档。 5. Poco的平台支持情况¶Poco在大多数平台中,需要事先接入Poco-SDK才可正常使用 ,在少数平台(如Android与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 √ 努力开发中,敬请期待 5. 更多详细资料参考¶请查看Poco官方文档获得更多教程与API信息,这里是一些关注度较高的内容: 入门教学用例 如何使用Poco选择UI对象? API文档参考:Poco instance API,UI proxy object API 各类引擎如何接入Poco SDK? 如何为自定义引擎编写Poco SDK? |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |