python自动化[poco篇]

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()
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Generalzy

文章对您有帮助,倍感荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值