杭州上城区建设局网站,珠海婚恋网站建设市场分析,网站建设图标图片,18款禁用app软件免费大全Poco基于UI控件搜索原理 #xff0c;适用于Android、iOS原生和各种主流的游戏引擎应用。
中文官方文档#xff1a;欢迎使用Poco (ポコ) UI自动化框架 — poco 1.0 文档
参考文档#xff1a; Poco介绍 - Airtest Project Docs
环境准备
安装库#xff1a;pip install po…
Poco基于UI控件搜索原理 适用于Android、iOS原生和各种主流的游戏引擎应用。
中文官方文档欢迎使用Poco (ポコ) UI自动化框架 — poco 1.0 文档
参考文档 Poco介绍 - Airtest Project Docs
环境准备
安装库pip install pocoui 、 pip install airtest
IDE选用官网下载地址Airtest Project
连接设备
# 1、指定连接设备
from airtest.core.android import Android
from poco.drivers.android.uiautomation import AndroidUiautomationPoco # 导入Poco 库
dev1 Android() # 指定连接的手机设备指定参数为设备序列号为空时默认连接获取到的第一台设备
poco AndroidUiautomationPoco(dev1, screenshot_each_actionFalse) # 实例化设备对象# 2、连接默认设备
# from airtest.core.api import *
# from airtest.cli.parser import cli_setup
# from poco.drivers.android.uiautomation import AndroidUiautomationPoco
# poco AndroidUiautomationPoco(use_airtest_inputTrue, screenshot_each_actionFalse)
poco方法
执行adb命令
连接设备进行adb命令等操作支持所有的adb操作
print(poco.get_screen_size())
print(poco.adb_client.devices()) # 打印连接设备序列号
print(poco.adb_client.get_device_info()) # 打印设备信息
print(poco.adb_client.shell(ls)) # 执行adb命令
print(poco.adb_client.get_ip_address()) # 获取设备IP
poco.agent
print(poco.agent.screen.getPortSize()) # 屏幕分辨率
poco.device
print(poco.device.get_ip_address()) # 获取ip 地址
print(poco.device.list_app()) # 获取安装包
元素定位(选择器)
基本选择器
在poco实例后加一对括号,括号里的参数就是所给定的条件用属性名值对表示其中第一个参数表示节点名,后面还可以跟着一些可选参数均表示节点的属性及预期的属性值
print(poco(android.view.View,text 请输入密码).get_text()) 相对选择器
通过元素之间的渲染层级关系进行选择
poco(android.view.View).children() # 获取所有的子元素
poco(android.view.View).child(android.view.View, text暂无公告) # 当前节点的子元素,可根据指定参数获取符合条件的子元素没有参数时和children功能相同
poco(android.view.View).offspring(android.view.View, textMatches.*?密码.*?) # offspring从查询表达式给出的UI元素中选择包含直接子元素(ren)的子元素
poco(nameMatches退出登录).parent() # 从查询表达式给出的UI元素中选择直接子元素(ren),如果要获取更上层父节点的话需要在对象后添加继续添加parent()参数
poco(nameMatches退出登录).sibling() # 从查询表达式给出的UI元素中选择同级元素
正则匹配
支持正则匹配nameMatches、textMatches、typeMatches等使用xxMatches
for i in poco(textMatches.*?密码.*?):print(i.get_text()) 等待
指定元素等待
obj1, obj2, obj3 poco(text微信), poco(text小红书), poco(text日历)
obj poco(text微信)obj.wait(timeout2).exists() # 超时时间内查找元素返回布尔值,可以通过这个方法等待确定元素出现进行下一步操作
obj.wait_for_appearance(timeout2) # 等待元素出现(阻塞并等待直到UI元素在给定的超时内出现)
obj.wait_for_disappearance(timeout2) # 等待元素消失
页面整体等待
poco.wait_stable() # 休眠固定的秒数以便等待UI变得静止(稳定),不需要手动调用此方法,它在需要时自动调用
poco.wait_for_any([obj1, obj2, obj3], timeout2) # 等待指定的任意一个元素出现
poco.wait_for_all([obj1, obj2, obj3], timeout3) # 等待所有元素出现
元素信息获取
poco.get_*()方法 print(poco(text微信).get_text()) # 元素文本内容微信print(poco(text微信).get_size()) # 精准大小[0.22395833333333334, 0.1259018759018759]print(poco(text微信).get_position()) # 相对于屏幕的相对位置[0.8355654761904762, 0.6486291486291487]print(poco(text微信).get_name()) # 元素名称微信print(poco(text微信).get_bounds()) # 元素界限[0.5856782106782107, 0.9475446428571429, 0.7115800865800865, 0.7235863095238095]
poco.attr()方法 print(poco(textMatches.*?密码.*?).attr(name)) # UI元素的名称print(poco(textMatches.*?密码.*?).attr(text)) # UI元素的字符串值print(poco(textMatches.*?密码.*?).attr(size)) # UI元素大小print(poco(textMatches.*?密码.*?).attr(type)) # UI元素的类型名print(poco(textMatches.*?密码.*?).attr(visible)) # UI元素是否可见print(poco(textMatches.*?密码.*?).attr(pos)) # UI元素相对屏幕位置
常用操作
exists()
检测定位元素是否在测试UI元素层次结构中,相当于attr(visible)可以通过此判断决定是否进行某些操作【返回布尔值,可以通过这个方法等待确定元素出现进行下一步操作】。配合wait使用更好见等待方法。
点击/长按 poco(登录).click() # 点击选择的对象poco.click([0.5, 0.5]) # 点击某个点poco(text请填写手机号).long_click() # 长按某个选中的元素对象默认长按持续时间为2spoco.long_click([0.5, 0.5]) # 长按某个点
滚动
参数 direction滑动的方向vertical(垂直)、horizontal(水平)。 percent滑动的百分比(滑动的幅度)参数(0,1)垂直方向上滑动水平方向左滑动参数(-1,0)垂直方向下滑动水平方向右滑动。 duration滑动操作的持续时间。
poco.scroll(directionhorizontal, duration3, percent-0.5)
滑动 poco(text微信).swipe(directionleft, duration.3) # 通过指定方向(direction参数)指定要滑动的位置‘up’, ‘down’, ‘left’, ‘right’poco(微信).swipe([0.4, 0.8], duration3) # 通过坐标选择目标移动的终止位置
拖拽
参数目标位置target持续时间duration这个方法不好用通过测试发现只有垂直移动才好用。 poco(text微信).drag_to([0.5, 0.5], duration2)poco(text微信).drag_to(poco(text企业微信), duration.5)
序列手势
比drag_to好用的多。方法start_gesture手势开始,相当于按下的手势hold为按下持续的时间to为要移动到的目标位置可以是对象元素也可以是坐标up为执行完成松开的手势。 poco(微信).start_gesture().hold(0.5).to(poco(text小红书)).hold(5).to(poco(text企业微信)).hold(.5).to([0.5, .75]).hold(1).up() # 拖动微信图标移动poco(微信).start_gesture().hold(3).up() # 模拟长按微信图标3秒
双指操作
参数dead_zone缩放内半径不能大于percent
poco(nameandroid.view.View).pinch(directionin, percent0.6, duration2.0, dead_zone0.1)
焦点操作
选择元素焦点操作位置:center or anchoror point(x,y)
poco(text微信).focus(center).click() # focus局部定位 # 可模拟滑动效果obj1 poco(text移动网络)obj2 poco(text显示和亮度)obj1.focus(center).drag_to(obj2.focus(center))
输入 poco(textMatches.*?输入用户名.*?).set_text(1890010002) # 输入poco(textMatches.*?输入用户名.*?).set_text() # 清空内容