08编写并运行你的第一个Poco脚本
同学们好,我是网易AirtestProject的团队成员晓娟,欢迎大家来到我们的视频教程专栏《14天Airtest自动化测试小白课程》。
上节课我们一起学习了如何编写Airtest脚本,Airtest框架的核心就是截图脚本。而我们的另一个测试框架Poco,跟Airtest的差别非常大,它的核心是 元素定位 。
那么今天我们就来学习下:poco脚本的编写和运行。
poco辅助窗功能
与编写Airtest脚本的步骤相似,我们首先需要在IDE中连接上1台待测设备,这里以雷电模拟器为例,连接好设备之后,我们来看看poco辅助窗:

① 选择对应的poco模式
点击stop的下拉按钮,可以显示目前所支持的平台,比如unity、UE4、Android和iOS等,测试哪个平台,我们就需要把这里的poco模式选到对应的平台。比如我们这里想要测安卓模拟器的原生应用,就需要在下拉菜单中选择安卓模式:

选择了Android模式之后,等待几秒,窗口就会刷出当前设备的UI树,并且在脚本编辑窗中,会弹出1个是否插入poco初始化代码的提示,选择yes之后,脚本编辑窗就会被自动插入当前模式的初始化脚本:

当然,如果我们想要测试unity游戏,就需要在poco模式中选择unity,而不是Android。当UI树正常显示之后,我们就可以使用poco辅助窗的锁定UI控件或者录制poco脚本的功能了。
不过需要注意的是,除了安卓原生和iOS原生不需要接入pocosdk就可以直接显示UI树之外,其余引擎的游戏,比如unity、UE4、Cocos creator等,都需要事先按官网教程接入pocosdk后,才能够获取到poco的UI树。
各种平台接入SDK的教程汇总
1. unity3d接入教程 :https://poco-chinese.readthedocs.io/zh_CN/latest/source/doc/integration.html#unity3d
2. cocos2dx-lua接入教程:https://poco-chinese.readthedocs.io/zh_CN/latest/source/doc/integration.html#cocos2dx-lua
3. cocos2dx-js接入教程:https://poco-chinese.readthedocs.io/zh_CN/latest/source/doc/integration.html#cocos2dx-js-beta
4. cocos-creator接入教程:https://poco-chinese.readthedocs.io/zh_CN/latest/source/doc/integration.html#cocos-creator
5. Egret接入教程:https://github.com/AirtestProject/Poco-SDK/tree/master/Egret
6. UE4接入教程:https://mp.weixin.qq.com/s?__biz=MzUxMDc4NTkwMA==&mid=2247484258&idx=1&sn=0fec4461bc870077af4e096b494d646a&chksm=f97ce361ce0b6a77c885193a900d2be08d22c3cf86a0e90a5fb0e83758aaffc65a9d00ec3927&token=1860040772&lang=zh_CN#rd
7. 自行接入其它引擎的教程:https://poco-chinese.readthedocs.io/zh_CN/latest/source/doc/implementation_guide.html
8. WebView检视:https://airtest.doc.io.netease.com/IDEdocs/poco_framework/poco_webview/
其它
无需接入pocoSDK的平台:Android原生、iOS原生
暂不支持的平台:Windows、MacOS等
② poco检索功能
先来看下锁定查看UI控件的功能,单击像一把小锁一样的按钮,此时整个设备画面会被锁定;之后再把鼠标移动到设备画面上,可以看到鼠标能够检索出画面内包含的控件,并且会用1个半透明的框框住了这个控件,单击该控件,log查看窗就会显示出该控件的属性信息,这个功能可以帮助我们快速查看控件的所有属性:

小锁右边的检索按钮,跟刚才介绍的又有点不同,它可以检索当前页面的控件,但是不会锁定设备的当前页面,也就是说,随着鼠标的点击动作,画面会跟着做出对应的响应:

③ 录制poco脚本
接下来我们看看录制按钮,随着鼠标在设备上对各个控件进行点击或者滑动的操作,脚本编辑窗会自动生成一系列的poco脚本:

对于录制好的poco脚本,我们也可以在IDE中右键单独运行,或者一键回放。
api介绍和定位选择器
当然,除了采用录制的方法生成poco脚本之外,更重要的是,学会自己编写poco脚本,实现更多更复杂的需求。主要有2个问题:1个是元素的定位语句是怎么写的;第2个是poco常见的api操作有哪些。
① 定位选择器
我们先来看看第1个问题,编写元素定位语句,poco给我们提供了3种定位选择器:一是基本选择器,即利用元素的一些基本属性来进行定位,比如name、text等等。举个例子,poco(name="网易云音乐"),这个定位语句就是使用基本选择器进行定位的。当然我们可以不止使用1个属性来定位,括号里面可以用多个属性来定位控件。刚才我们学习了如何检索控件,查看元素属性,就可以用那些属性写定位语句了。
二是相对选择器,即利用控件之间的父子关系、爷孙关系和兄弟关系等来定位控件。例如parent()、child()、offspring()等。举个例子:poco("androidx.appcompat.widget.LinearLayoutCompat").child("搜索"),就是典型的利用父子关系来定位元素的,这个需要借助poco辅助窗的那棵UI树,观察目标节点附近的控件,然后利用相对关系进行定位。有些比较难定位的节点,可能需要编写几层关系才可以定位到,比如刚才我们录制的时候,就很容易出现很长的定位语句。
三是控件顺序选择器,常用于UI树中多个相同名称的节点定位。比如,poco("com.netease.cloudmusic:id/mainActivityTab").offspring("androidx.appcompat.app.ActionBar$Tab")[0],定位的就是这4个相同名字节点的第1个,坐标是从0开始递增的。

② poco常用的api
了解完这3种定位方式之后,我们再来看看poco都有哪些常见的控件操作,这里以我们官网上提供的1个unity游戏(https://poco.readthedocs.io/en/latest/source/doc/poco-example/index.html)为例,这个demo已经事先接入了pocosdk,所以在设备上安装好这个demo,打开游戏,在poco辅助窗内选择unity模式,等待几秒即可刷出这个游戏的UI树了:

然后看一下,我们常见的poco功能有以下几点:
1)点击操作
poco("star_single").click()poco('star_single').long_click()
2)读取和设置控件的属性poco("star_single").get_name()poco("star_single").attr('name')poco("star_single").get_text()poco("pos_input").set_text("123")poco("pos_input").setattr('text',"456")
3)判断元素是否存在
poco(XXX).exists()
4)拖动与滑动
poco("star").drag_to(poco("shell"))
5)内部偏移和外部偏移(focus)poco("pearl").focus([0.1,0.1]).long_click()poco("pearl").focus([0.9,0.9]).long_click()poco("pearl").focus([0.5,-3]).long_click()
6)遍历元素
for star in poco("playDragAndDrop").child("star"): star.drag_to(poco("shell"))
7)等待事件poco("bomb").wait_for_appearance()poco("bomb").wait_for_disappearance()yellow = poco("yellow")blue = poco("blue")black = poco("black")poco.wait_for_all([yellow,blue,black])poco.wait_for_any([bomb,yellow,blue])
③ 官网的unity游戏demo
这个demo可以帮助我们很好地去练习这些常见的poco api,课前我们也准备了1个测试这个demo的脚本,里面基本包含了poco所有常见的api:

老样子,我们先讲解下这个脚本里面的一些知识点,课后同学们再自己尝试写一个这样的脚本出来,巩固知识点。另外需要这个示例脚本来学习的同学,可以到我们的官方公众号回复“A08”即可获取。

生成和导出报告
上面我们已经给大家演示过这个脚本的运行了,如上节课讲的那样,我们直接点击顶部菜单栏的查看报告按钮,即可生成这份poco脚本的运行报告,并用你电脑的默认浏览器打开(建议使用谷歌浏览器,对报告的兼容性最好)。
另外这份报告仅限于在本地查看。如需发给别人查看,我们需要导出脚本:右键单击脚本名称,选择导出报告,在选择导出的路径,等到报告导出即可。
小结
好了,这节课的内容就到此为止啦,今天我们主要学习了poco脚本的录制、定位脚本的编写以及常见的poco api等等,内容还是比较多的,希望同学们课后可以好好练习,先把课上讲的示例自己编写一遍之后,就可以尝试写一写别的应用的poco测试脚本了。

下节课我们将学习一个新的库:airtest-selenium,用于网页的自动化测试,下期我们不见不散~