官网:Airtest Project (netease.com)

教程:Poco快速上手 - Airtest Project Docs (netease.com)

文档:欢迎使用Poco (ポコ) UI自动化框架 — poco 1.0 文档

poco是一种基于UI控件搜索的自动化框架,与airtest不同,它的操作方式与appium相似。

安装

pip install pocoui

官方demo

# coding=utf-8
import time
from poco.drivers.unity3d import UnityPoco

poco = UnityPoco()

poco('btn_start').click()
time.sleep(1.5)

bash = poco('bash').focus('center')
for star in poco('star'):
    star.drag_to(bash)
time.sleep(1)

assert poco('scoreVal').get_text() == "100", "score correct."
poco('btn_back', type='Button').click()

使用指南

Poco在大多数平台中,需要 事先接入Poco-SDK才可正常使用 ,在少数平台(如Android原生APP)可直接使用Poco,目前支持平台如下:

平台

Airtest

Poco

Cocos2dx-js, Cocos2dx-lua

接入文档

Unity3D

接入文档

Native Android APP

直接使用

iOS

帮助文档

Egret

接入文档

Other engines

可自行接入

WeChat Applet&webview

参考文档 随着微信更新可能会失效

Windows, MacOS

敬请期待

Netease

帮助文档

在airtest ide中新建脚本,可以在ide中直接编写poco即可,和airtest一样,可以使用录制来加速编写代码效率。但是airtest ide中没有poco的简要说明。

初始化pocoui

这里用Android作为例子,不同的引擎有不同的初始化方式,详情看文档,这里用的最多就是Android,所以只示例了Android。

from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True,screenshot_each_action=False)

点击

通过元素name

poco("com.android.systemui:id/mobile_settings_button").click()#.click()为点击,后面会讲到

通过元素text

poco(text="电话").click()

通过坐标

poco().click([0.507,0.013])

长按点击

poco("蓝牙。").long_click()# 默认的长按点击,笔者比较喜欢用这个(因为不用动脑而且不会出现很奇葩的错误)

发送文本

poco("cn.mobile.mms:id/embedded_text_editor").set_text("0000")

滑动页面

滑动页面是通过坐标完成的,在airtest中所有的坐标使用相对坐标,查看坐标的方法为:选项—>设置—>勾选【实时坐标显示】和【相对坐标】。鼠标移动到设备窗口即可查看相对坐标

poco.swipe([0.507,0.013],[0.507,0.575])
poco.swipe("down")
poco.swipe("up")

判断元素是否存在

有些元素是变化的,可能在某个时间段存在,某个时间段又消失了,这个时候我们可以判断元素是否存在

poco("android.widget.TextView").exists

可以配合if,如果元素存在,则执行动作

if(poco("android.widget.TextView").exists):
    print("输入框存在,点击");
    poco("android.widget.TextView").click()

控件等待

仅等待不报错

可以使用wait方法,指定时间等待控件出现,再进行点击操作(该方法的返回值是控件本身,所以后面可以紧跟控件操作,比如点击、长按)

# 在10s内等待控件出现,如出现,则进行长按操作
poco(texture="icon").wait(timeout=10).long_click()

等待后不满足则报错

Poco控件还支持另外2个等待事件,wait_for_appearance()wait_for_disappearance();这两个API可以等待页面上 某1个UI 出现或者消失,等待的超时时间 timeout 默认为120秒,如果在超时时长之内元素没有出现或者消失的话,会报 PocoTargetTimeout 的错误。

# 等待黄色小鱼出现
poco("yellow").wait_for_appearance(timeout=20)

# 等待计分文本控件消失
poco(text="Count:").wait_for_disappearance(timeout=3)

Poco类的等待事件

这里有两个poco类的等待方法:wait_for_any()wait_for_all()。与上述等待事件不同的是,wait_for_any()wait_for_all() 可以给定多个UI对象让其等待。(需要注意这两个方法是Poco类的方法)

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。

遍历元素

通过python的for循环可以 遍历任何序列的项目 ,如一个列表或者字符串。

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

for star in poco("playDragAndDrop").child("star"):
    star.drag_to(poco("bash"))

注意事项

poco源码中会杀死uiautomator的进程

文章作者: Vsoapmac
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 soap的会员制餐厅
自动化测试 第三方库 个人分享 框架
喜欢就支持一下吧