1篇文章带你了解poco的所有基本功能

简介: 1篇文章带你了解poco的所有基本功能

前言



本文将以官网上的安卓演示游戏为例,下载地址:poco.readthedocs.io/en/latest/s… 。下载完对应的 “demo game android” 以后,安装在待测的安卓手机上;再使用IDE连接上待测手机,并在poco辅助窗选择 unity 模式,刷出UI树后即可开始测试。



阅读本文,你将了解poco的以下功能:


  • 点击操作
  • 读取和设置控件的属性
  • 判断元素是否存在
  • 拖动与滑动
  • 内部偏移和外部偏移(focus)
  • 等待事件
  • 各种平台接入SDK的教程汇总


点击操作



poco支持各种点击操作:选中控件点击、坐标点击、长按等等。


需要注意的是,poco使用的坐标系是 相对坐标系 ,所以使用poco的坐标点击时,X、Y的坐标值的范围都在0~1之内,否则会报 Click position out of screen 的错误。

关于poco坐标系的详细内容,我们可以参考往期推文 如何让你的“坐标”一步到位


# 控件点击
poco("btn_start").click()
# 坐标点击
poco.click([0.14,0.2])
# 普通点击、长按
poco("star_single").click()
poco('star_single').long_click()
复制代码



click()long_click()  的API详情可以参看此链接:

poco.readthedocs.io/zh_CN/lates…


读取和设置控件的属性



获取属性


以节点名为 “star_single” 这个控件的属性为例,我们可以用 get_name() 方法来获取这个节点的name属性,还可以用 attr('name') 方法来获取:



# 获取属性
name1 = poco("star_single").get_name()
name2 = poco("star_single").attr('name')
text = poco("star_single").get_text()
print ("name1:",name1)
print ("name2:",name2)  
print("text:",text) 
复制代码



除了 get_name() 方法以外,poco还提供了 get_text()get_position()get_size()get_bounds() 这4个方法,帮助我们获取元素对应属性。这几个方法的详细API可以参考此链接:poco.readthedocs.io/zh_CN/lates…


attr() 可以获取的属性则更多:



另外从上图中我们还可以看出,如果我们获取控件不存在的属性,结果会返回none:



设置属性


通常我们需要设置元素属性的情况,就是设置文本框的文本属性,可以用 set_text() 方法或者 setattr() 方法:


# 设置属性
poco("pos_input").set_text("123")
poco("pos_input").setattr('text',"456")
# 错误示范
poco("pos_input").setattr('type',"456")
复制代码



这两方法的API详情可以参看此链接:poco.readthedocs.io/zh_CN/lates…


另外,如果我们强行设置不可修改的元素属性,就像上文所示范的那样,我们无法设置  “star_single”  的 type 属性,就会报 InvalidOperationException 的错误。


判断元素是否存在



写测试脚本时,我们经常会遇到这种情况:如果A元素存在,那么再执行B操作。判断A是否存在,我们可以使用 poco(XXX).exists()



拖动与滑动



拖动 drag_to


drag_to() 方法的终点可以是一个元素控件,也可以是一个固定的相对坐标:


# 拖动
for star in poco("playDragAndDrop").child("star"):
    star.drag_to(poco("shell"))
for star in poco("playDragAndDrop").child("star"):
    star.drag_to([0.5,0.6])
复制代码



滑动 swipe


poco的 swipe 接口我们在之前的推文 “你的swipe接口用不好,是因为...” 中有详细的介绍,大家可以前往查看~


内部偏移和外部偏移(focus)



在上文我们就提到过,poco使用的坐标系是 相对坐标系 。举个例子,我们选中下图的pearl图片控件,此时的坐标系就是相对这个控件的坐标系,并且是从0到1进行归一化的。


对这个控件进行点击操作,实际上点击的坐标是控件上(0.5,0.5)的位置:


poco(texture="icon").click()
复制代码



内部偏移


如果选中控件之后,你并不想点击控件的中心位置,而是想点击控件内部的其它位置,我们可以使用 focus() 方法来指定内部偏移量:


# 内部偏移
pearl = poco(texture="icon")
pearl.focus('center').long_click()
sleep(1.0)
pearl.focus([0.1,0.1]).long_click()
sleep(1.0)
pearl.focus([0.9,0.9]).long_click()
复制代码



外部偏移


选中1个控件以后,如果我们想点击控件之外的位置,也可以使用 focus() 方法来指定外部偏移量;并且会出现点击坐标的值小于0或者大于1的情况:



如上图所示,我们选中了 pearl 这个文本控件,但是我们想要去点击文本控件上方的图标,此时focus里面的Y坐标就是负数;因为相对于这个文本控件来说,上方图标的Y坐标已经小于0了:


# 外部偏移
pearl_text = poco(text="pearl")
pearl_text.focus([0.5,-3]).long_click()
复制代码


同理,如果点击该文本控件正下方比较远的位置,Y坐标就有可能大于1;当Y坐标大到超出当前屏幕时,就会报错: InvalidOperationException('Click position out of screen.


focus() 方法的API详情可以参看此链接:poco-chinese.readthedocs.io/en/latest/s…


遍历元素



上文讲拖动的时候,我们就给大家演示过遍历元素的例子,通过python的for循环,我们可以遍历任何序列的项目,如一个列表或者字符串。


例子中,poco("playDragAndDrop").child("star") 得到的就是1个控件序列(包含了5个星星元素), star 代表控件序列中的1个元素。因此通过这个循环,我们就遍历了5个星星元素的序列,并把每个星星元素依次拖动到贝壳上:


for star in poco("playDragAndDrop").child("star"):
    star.drag_to(poco("shell"))
复制代码


在自动化测试实践中,我们可以利用遍历元素做很多事情,比如我们可以用元素遍历依次获取下图几个图标正下方的名称:


for name in poco("playLocalPositioning").child("fish").offspring("name"):
    print(name.get_text())
复制代码



等待事件



wait_for_appearance()和wait_for_disappearance()


依旧以demo中的小游戏为例,我们想要实现以下操作:


  1. 等待蓝色鱼出现
  2. 点击蓝色鱼
  3. 等待炸弹出现
  4. 等待炸弹消失
  5. 点击返回按钮


poco("blue").wait_for_appearance()
poco("blue").click()
poco("bomb").wait_for_appearance()
poco("bomb").wait_for_disappearance()
poco("btn_back").click()
复制代码



因此,wait_for_appearance()wait_for_disappearance() 可以帮助我们等待页面上某1个元素出现或者消失,等待的超时时间 timeout 默认为120秒,如果在超时时长之内元素没有出现或者消失的话,会报 PocoTargetTimeout 的错误。


两个方法的API详情参考链接:poco-chinese.readthedocs.io/en/latest/s…


wait_for_any()和wait_for_all()


与上述等待事件不同的是,wait_for_any()wait_for_all() 可以给定多个UI对象让其等待。


wait_for_all() 是在超时时长结束之前,需要等待所有给定的UI对象都显示出来,即一次轮询所有UI,例如等待三个图标都显示之后,再点击返回按钮:


poco("wait_ui2").click()
yellow = poco("yellow")
blue = poco("blue")
black = poco("black")
poco.wait_for_all([yellow,blue,black])
poco("btn_back").click()
复制代码



wait_for_any() 则是在超时时长结束之前,等待任意一个UI显示出来,即一次轮询任何一个给定的UI,例如:


bomb = poco("bomb")
yellow = poco("yellow")
blue = poco("blue")
while True:
    fish = poco.wait_for_any([bomb,yellow,blue])
    print(fish.get_name())
复制代码



可以看到,只要页面出出现了等待的任一UI,wait_for_any() 方法都会返回第一个等待到的UI。


俩方法的API详情参考:poco-chinese.readthedocs.io/en/latest/s…


各种平台接入SDK的教程汇总



1.unity3d接入教程poco-chinese.readthedocs.io/zh_CN/lates…

2.cocos2dx-lua接入教程poco-chinese.readthedocs.io/zh_CN/lates…3.cocos2dx-js接入教程poco-chinese.readthedocs.io/zh_CN/lates…4.cocos-creator接入教程poco-chinese.readthedocs.io/zh_CN/lates…

5.Egret接入教程github.com/AirtestProj…

6.UE4接入教程mp.weixin.qq.com/s?__biz=MzU…

7.自行接入其它引擎的教程poco-chinese.readthedocs.io/zh_CN/lates…

8.WebView检视airtest.doc.io.netease.com/IDEdocs/poc…


其它


无需接入pocoSDK的平台:Android原生、iOS原生


暂不支持的平台:Windows、MacOS等


Airtest官网:airtest.netease.com/

Airtest教程官网:airtest.doc.io.netease.com/

搭建企业私有云服务:airlab.163.com/b2b

相关文章
|
8月前
|
JSON 小程序 算法
uniapp小程序封装常用工具函数
类似的工具函数还有很多,这里暂时不一一列举了,上面提到的银行卡校验,还可以使用阿里公开的一个校验接口cardNo=银行卡号码&cardBinCheck=true这个接口会返回对应的银行简称银行卡类型,如果想要显示对应的银行logo的话,可以联系我,由于JSON数据太大,没办法全部放在这里。
123 0
|
6月前
|
前端开发 数据可视化 搜索推荐
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
200 0
|
8月前
|
缓存 JavaScript iOS开发
iOS 逆向编程(十四)Cycript 语法入门
iOS 逆向编程(十四)Cycript 语法入门
150 0
|
9月前
|
XML 网络协议 Linux
POCO库的安装与基础知识说明
一、POCO简单介绍 POCO(Portable Components)是一个轻量级的 C++ 类库,提供了许多基本的、可移植的 C++ 组件和工具。它包含了很多模块,例如网络、XML、加密、多线程等等,可帮助 C++ 开发人员快速构建高效、可靠、可扩展的应用程序。 1.1 基本模块 Foundation:提供了许多基本的 C++ 类和函数,例如字符串、文件、日期时间、异常处理、日志等等。 Net:提供了网络编程的支持,包括 TCP、UDP、HTTP、HTTPS、SMTP、POP3、FTP、DNS 等等。 Util:提供了各种工具和辅助函数,例如配置文件、命令行解析、正则表达式、JS
375 0
|
Java Maven Android开发
Android组件化开发(五)--完整版音乐播放组件的封装
前面几篇系列文章我们讲解了`组件化开发`中几个常用功能组件的开发,包括:`网络请求组件`,`图片加载请求组件`,`应用保活组件`。今天我们来封装一个`音乐播放组件`。
|
C# C++ 计算机视觉
Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo
Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo
Qt中文翻译(官方文档,界面,工具等)集锦
Qt中文翻译(官方文档,界面,工具等)集锦
620 0
比心源码如何开发,这个功能要会实现
说到比心源码,不如讲讲比心源码实现聊天室功能该怎么做?
比心源码如何开发,这个功能要会实现
iOS-《编写高质量代码》笔记-第六章 继承与面向对象设计
建议41:明确isa在继承上的作用 图片发自简书App 我们发现 Class 本身也有一个isa指针,指向的是它的MetaClass。 当我们对一个实例发送消息时(-开头的方法),会在该 instance 对应的类的 methodLists 里查找。
896 0