目录
Poco
Poco是一款跨平台的自动化测试框架,基于UI控件搜索原理,与基于图像识别的Airtest不同的是,Poco可以使用类似 poco(“OK”).click() 的方式来获取并操作节点。
Poco能帮助我们获取控件的属性信息、操作控件、设置控件的text属性等等,但是连接设备、断言等操作,还需要依赖于Airtest的API,所以我们大多数情况下,都需要混合使用Airtest和Poco框架来编写我们的自动化脚本。
安装
pip install pocoui
三种定位选择器
基本选择器(推荐)
在poco实例后加一对括号,就可以进行元素选择了。
选择器会遍历所有元素,将满足给定条件的元素都选出来并返回。
括号里的参数就是所给定的条件,用属性名值对表示,其中第一个参数表示 节点名 ,就像 poco(“star_single”) 。后面还可以跟着一些可选参数,均表示 节点的属性及预期的属性值。
poco("star_single",type="Image")
# 表示在star_single节点下,type = 'image'的元素
相对选择器(不推荐)
如果直接用节点属性(或者说仅仅使用基本选择器)没法选出元素时,还可以通过元素之间的渲染层级关系进行选择,例如父子关系、兄弟关系、祖先后代关系等等
poco("plays").child("playBasic").offspring("star_single")
# 表示在 plays 节点下,找到儿子节点 playBasic , 再找儿子的所有后代在中的 star_single
空间顺序选择器(不推荐)
name0 = poco("Content").child(type="Text")[0].get_name()
name1 = poco("Content").child(type="Text")[1].get_name()
name2 = poco("Content").child(type="Text")[2].get_name()
# 根据索引取值
利用正则表达式匹配控件(推荐)
只要能够用 poco(xx=预期属性值) 来选择的控件,就可以用 poco(xxMatches=预期属性值的正则表达式) 来进行匹配定位。
Poco定位脚本的常见问题
区分控件定位脚本与控件操作脚本
# poco控件定位脚本
poco("star_single")
# poco控件操作脚本
poco("star_single").click()
Poco控件的核心API
控件点击操作
# 控件单击
poco("star_single").click()
# 控件长按
poco('star_single').long_click()
控件的滑动操作
# 向下滑动0.2个单位距离
poco("Handle").swipe([0,0.2])
sleep(1.0)
# 向上滑动0.2个单位距离
poco("Handle").swipe([0,-0.2])
sleep(1.0)
# 向下滑动0.1个单位距离
poco("Handle").swipe("down")
sleep(1.0)
# 向上滑动0.1个单位距离
poco("Handle").swipe("up")
sleep(1.0)
控件属性的读取和设置
print("name:"+poco("star_single").attr("name"))
print("type:"+poco("star_single").attr("type"))
print("texture:"+poco("star_single").attr("texture"))
或
print("name:"+poco("star_single").get_name())
print("position:"+str(poco("star_single").get_position()))
print("size:"+str(poco("star_single").get_size()))
设置控件的属性值
# 先激活输入光标
poco("pos_input").click()
# 再执行输入动作
poco("pos_input").set_text("123")
或
poco("pos_input").setattr('text',"456")
判断控件是否存在
if poco("star_single").exists():
poco("star_single").click()
else:
print("未找到星星控件")
Airtest的exists是用于判断图片存在,exists(图片);而Poco的exists是用于判断控件存在,poco(xxx).exists()。
断言控件存在
assert_equal(poco("star_single").exists(),True,"断言星星控件存在")
控件的拖动
# 拖动到另一个控件上
poco("playDragAndDrop").child("star")[0].drag_to(poco("shell"))
# 拖动到固定目标上
poco("playDragAndDrop").child("star")[1].drag_to([0.503, 0.705])
控件的等待事件
# 在10s内等待控件出现,如出现,则进行长按操作
poco(texture="icon").wait(timeout=10).long_click()
# 以下等待在超时会报错
# 等待黄色小鱼出现
poco("yellow").wait_for_appearance(timeout=20)
# 等待计分文本控件消失
poco(text="Count:").wait_for_disappearance(timeout=3)
# 等待多个控件
poco("wait_ui2").click()
yellow = poco("yellow")
blue = poco("blue")
black = poco("black")
poco.wait_for_all([yellow,blue,black])
poco("btn_back").click()
Android平台的Poco初始化
多个设备需要初始化不同的poco对象
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__,devices=["android://127.0.0.1:5037/127.0.0.1:7555"])
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
poco(text="网易云音乐").click()