AirtestProject Poco 框架实操:对节点可实施的操作
此文章来源于项目官方公众号:“AirtestProject”\
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
一、前言
之前我们介绍了Poco 的节点关系,以及获取节点属性的一些方法,具体详情可以点击查看我们历史推文~今天我们就来看看我们对 Poco 节点还能进行什么操作吧!
二、Poco 节点操作详解
2.1 修改文本类属性值:setattr(typename, val)
在日常测试中,有些文本类属性需要修改的时候,可以使用setattr(typename, val)
这个方法,通过输入属性名以及需要修改进去的内容即可。但是需要注意的是,很多属性如:name
、pos
等等是不推荐修改的,尤其是editalbe
为 **False
** 的节点,不建议修改该节点的所有属性,它们的修改可能会导致出现意外和误报错误。
使用的方式如下:
poco("com.sonyericsson.conversations:id/conversation_edit_text").setattr("text","我要发短信")
2.2 输入文字:set_text()
在日常输入的时候,我们可以使用set_text()
这个方法,但是在使用set_text()
之前,需要先执行一遍click
点击操作,激活文本框后,再执行输入操作。
使用方法如下:
poco("com.sonyericsson.conversations:id/conversation_edit_text").click()
poco("com.sonyericsson.conversations:id/conversation_edit_text").set_text("我要发短信")
如果在使用set_text()
无法输入,或出现相关报错的话,可以更换使用 Airtest 的text()
方法去进行输入即可。
poco("com.sonyericsson.conversations:id/conversation_edit_text").click()
text("我要发短信")
2.3 设置节点焦点:focus(f)
跟 Airtest 的图片一样,在 Poco 节点也有一定的操作点范围,且focus
所使用的是局部归一化坐标系,因此同样是 UI 框的左上角为原点,x 轴向右,y 轴向下,并且 UI 框长宽最大坐标均为 1。所以一般节点默认的操作点坐标为[0.5, 0.5]
。
在日常使用过程中,使用比较多的场景有以下几种情况:
2.3.1 内部偏移
如果需要对节点的 UI 框内的其他点进行操作的话,则需要利用focus
重新自定义一个操作点,也就是设置内部偏移量,调用这个方法将返回已设置了新操作点的 Poco 节点,重复调用则以最后一次所调用的为准。
# 内部偏移
poco(texture="icon").focus([0.1,0.8]).long_click()
2.3.2 外部偏移
如果是需要对节点的 UI 框外的其他点进行操作的话,也可以通过focus
去指定 UI 框外的偏移量,并且是会出现偏移量小于 0 或者大于 1 的情况,但是要注意的是,在考虑外部偏移量的同时,也要注意该偏移量坐标是否会超出屏幕范围,否则会出现该报错:InvalidOperationException('Click position out of screen
。
# 外部偏移
poco(text="pearl").focus([0.5,-3]).long_click()
更多关于 focus 的内容可以查看 PocoAPI 文档以及官方教程文档的对应内容:
https://poco-chinese.readthedocs.io/en/latest/source/poco.proxy.html#poco.proxy.UIObjectProxy.focus
https://airtest.doc.io.netease.com/IDEdocs/poco_framework/4_poco_API/#7
2.4 拖拽:drag_to(target, duration=2.0)
说到拖动,大家第一反应应该是swipe()
,但是swipe()
是单纯的从其中一个坐标,滑动到另一个坐标,但是drag_to()
是完全不同的,首先拖动的是节点而不是普通的一个坐标点,其次,拖动的终点是可以是另一个节点、同一个节点的不同 UI 位置、或者是某个坐标点。
括号内所需要传输的变量为target
:拖拽的终点(可以为节点,也可以为归一化坐标); duration=2.0
:默认拖拽的持续时间为 2 秒。
归一化坐标参考下图,以屏幕的左上角为原点建立坐标轴,x 轴向右,y 轴向下,坐标最大为 1,更多详情可查看我们的教程文档:https://airtest.doc.io.netease.com/IDEdocs/poco_framework/2_API_word/#2-poco_1
使用方法如下:
poco('star').drag_to(poco('shell'))
poco("音乐").drag_to([0.5,0.5])
2.5 长按:long_click(duration = 2.0)
与click
类似,long_click()
是对节点进行长按操作,可以传入长按的持续时间参数duration
,默认为 2 秒。
poco("音乐").long_click()
但如果想对某个坐标点进行长按操作的话,可以选择poco.pocofw module
下的long_click(pos, duration=2.0)
,我们需要传入设备屏幕归一化坐标 pos
以及 长按的持续时间参数 duration
即可。
poco.long_click((0.5,0.5), duration=2.0)
2.6 双击:double_click(x, y)
双击操作在poco 1.0.92
及以上版本均能使用,可以在括号内输入双击的偏移点坐标,不填写默认为双击节点的anchorPoint
,如下:
poco("音乐").double_click([0.2,0.8])
三、实操小案例
看完上述的操作详情后,让我们用一个小小的案例来看看上述操作在实际操作中的具体效果吧~
参考代码如下:
# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *
auto_setup(__file__)
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
#打开网易云音乐
start_app("com.netease.cloudmusic")
sleep(2.0)
poco("com.netease.cloudmusic:id/skipBtn").click()
#点击进入搜索界面
poco("com.netease.cloudmusic:id/iconSearch").click()
sleep(1.0)
#【使用setattr】输入“汪苏泷”
poco("com.netease.cloudmusic:id/search_src_text").setattr("text","汪苏泷")
sleep(1.0)
#点击搜索按钮,进行搜索
poco("com.netease.cloudmusic:id/toSearch").click()
sleep(1.0)
#点击播放全部歌曲
poco("com.netease.cloudmusic:id/actionView").click()
sleep(1.0)
#【使用double_click】双击喜欢歌曲
poco("com.netease.cloudmusic:id/smallAlbumDisc0").double_click()
#退出歌曲播放详情界面
poco("转到上一层级").click()
sleep(1.0)
#【使用focus、drag_to】分别进行节点UI定位以及进行拖拽换歌
poco("com.netease.cloudmusic:id/tv_music").focus([0.8,0.3]).drag_to(poco("com.netease.cloudmusic:id/tv_music").focus([0.2,0.3]),duration = 1.0)
sleep(1.0)
#【使用long_click】长按复制歌曲名
poco(text="此生不换 (Live版)").long_click()
poco("com.netease.cloudmusic:id/copyBtn").click()
#点击上方搜索框
poco("com.netease.cloudmusic:id/search_close_btn").click()
#【使用set_text】将剪切板的内容粘贴在搜索框内
poco("com.netease.cloudmusic:id/search_src_text").set_text(get_clipboard())
#点击搜索
poco("com.netease.cloudmusic:id/toSearch").click()
四、小结
我们今天分享了一些对 Poco 节点比较常用的操作方法,其中包括:
- 修改文本类属性值:
setattr(typename, val)
- 输入文字:
set_text()
- 设置节点焦点:
focus(f)
- 拖拽:
drag_to(target, duration=2.0)
- 长按:
long_click(duration = 2.0)
- 双击:
double_click(x, y)
通过这些方法,我们可以更好地编写 Poco 的自动化脚本,也可以将操作更简单化。如果同学们在使用 Poco 进行自动化测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在官方交流群里告诉我们或者提交 issue,也欢迎大家投稿。
AirtestIDE 下载:airtest.netease.com/\
Airtest 教程官网:airtest.doc.io.netease.com/\
搭建企业私有云服务:airlab.163.com/b2b
官方答疑 Q 群:526033840