Poco框架(跨平台自动化测试框架)
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_action=False) # 实例化设备对象# 2、连接默认设备
# from airtest.core.api import *
# from airtest.cli.parser import cli_setup
# from poco.drivers.android.uiautomation import AndroidUiautomationPoco
# poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
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(timeout=2).exists() # 超时时间内查找元素,返回布尔值,可以通过这个方法等待确定元素出现进行下一步操作
obj.wait_for_appearance(timeout=2) # 等待元素出现(阻塞并等待,直到UI元素在给定的超时内出现)
obj.wait_for_disappearance(timeout=2) # 等待元素消失
页面整体等待
poco.wait_stable() # 休眠固定的秒数,以便等待UI变得静止(稳定),不需要手动调用此方法,它在需要时自动调用
poco.wait_for_any([obj1, obj2, obj3], timeout=2) # 等待指定的任意一个元素出现
poco.wait_for_all([obj1, obj2, obj3], timeout=3) # 等待所有元素出现
元素信息获取
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(direction='horizontal', duration=3, percent=-0.5)
滑动
poco(text='微信').swipe(direction='left', duration=.3) # 通过指定方向(direction参数)指定要滑动的位置:‘up’, ‘down’, ‘left’, ‘right’poco('微信').swipe([0.4, 0.8], duration=3) # 通过坐标选择目标移动的终止位置
拖拽
参数(目标位置target,持续时间duration),这个方法不好用,通过测试发现只有垂直移动才好用。
poco(text='微信').drag_to([0.5, 0.5], duration=2)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(name='android.view.View').pinch(direction='in', percent=0.6, duration=2.0, dead_zone=0.1)
焦点操作
选择元素焦点操作位置:'center' or 'anchor'or 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('') # 清空内容
相关文章:

Poco框架(跨平台自动化测试框架)
Poco基于UI控件搜索原理 ,适用于Android、iOS原生和各种主流的游戏引擎应用。 中文官方文档:欢迎使用Poco (ポコ) UI自动化框架 — poco 1.0 文档 参考文档: Poco介绍 - Airtest Project Docs 环境准备 安装库:pip install po…...
使用RANSAC算法在点云中拟合原始3D形状:pyRANSAC-3D的介绍和应用
随机样本共识(RANSAC)是一种强大的算法,用于从数据集中估计数学模型的参数,特别是在数据包含大量异常值时。在3D计算机视觉中,RANSAC常用于从点云数据中拟合原始形状,例如平面、长方体和圆柱体。本文将介绍一个名为pyRANSAC-3D的开源库,它提供了RANSAC算法的Python实现,…...

GPT-3.5 人工智能还是人工智障?——西红柿炒钢丝球!!
人工智能还是人工智障?——西红柿炒钢丝球 西红柿炒钢丝球的 基本信息西红柿炒钢丝球的 详细制作方法材料步骤 备注幕后花絮。。。。。。。。。关于GPT-3.5,你的看法: 西红柿炒钢丝球的 基本信息 西红柿炒钢丝球是一道具有悠久历史的传统中式…...
移动技术相关基本概念
信息网络隔离装置 一种能够保障企业信息网络安全的高级网络设备,主要作用是隔离内外网,阻隔外界攻击,保护企业网络不遭受黑客攻击、木马病毒入侵、信息泄露等安全威胁。同时还能对企业内部的流量进行监视,保护企业敏感数据不被内…...

数学建模—分类模型
本讲将介绍分类模型。对于而分类模型,我们将介绍逻辑回归(logistic regression)和Fisher线性判别分析两种分类算法;对于多分类模型,我们将简单介绍Spss中的多分类线性判别分析和多分类逻辑回归的操作步骤下。 本题按水…...
腾讯云SA3服务器AMD处理器CPU网络带宽性能详解
腾讯云AMD服务器SA3实例CPU采用2.55GHz主频的AMD EPYCTM Milan处理器,睿频3.5GHz,搭载最新一代八通道DDR4,内存计算性能稳定,默认网络优化,最高内网收发能力达1900万pps,最高内网带宽可支持100Gbps。腾讯云…...
Vue组件之间的传值汇总
组件之间的传值 1、父传子 props 2、父传子 slot 3、父传子 不建议用 attrs 4、 子传父 ref 5、子传父 emit 6、povide/inject只能在setup的时候用。 7、利用vuex和pinia去实现数据的交互 1、实现代码App.vue <script setup>import TestProps from ./components/T…...

Cadence OrCAD Capture CIS批量替换GND符号的方法
🏡《总目录》 🏡《宝典目录》 目录 1,概述2,方法3,总结1,概述 如下图所示,有时由于绘图是从多个地方复制粘贴而来,一个图纸中会存在多种GND符号。此时比较容易引起GND网络名不同意的问题,为了避免该问题可对其批量替换。 2,方法 第1步:选择需要替换的GND符号…...

图像的转置之c++实现(qt + 不调包)
1.基本原理 图像的转置就是将图像的横坐标和纵坐标交换位置,和矩阵的转置是一样的,公式见下: 2.代码实现(代码是我以前自学图像处理时写的,代码很粗糙没做任何优化,但很好理解) /*图像的转置函…...
qt中cmake自动处理ui文件的前提
说明:个人理解,未必正确 参考了下面的网址 http://cn.voidcc.com/question/p-wpcanvtj-tn.html http://cn.voidcc.com/question/p-wpcanvtj-tn.html cmake中将set(CMAKE_AUTOUIC ON)打开 set(CMAKE_AUTOUIC ON) # 自动处理ui文件, 自动处理ui文件是有…...

python接口自动化之使用requests库发送http请求
requests库 什么是Requests ?Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。 安装:cm…...

flink kafka消费者如何处理kafka主题的rebalance
背景: 我们日常使用kafka客户端消费kafka主题的消息时,当消费者退出/加入消费者组,kafka主题分区数有变等事件发生时,都会导致rebalance的发生,此时一般情况下,如果我们不自己处理offset,我们不…...
【Spring】基于xml文件和注解方式的自动装配
自动装配:根据指定的策略,在IOC容器中匹配某个bean,自动为bean中的类类型属性或接口类型的属性赋值,可以通过bean标签中的autowire属性设置自动装配的策略。 一、基于xml文件 一个类型的bean在IOC容器中只出现一次,默…...

ArcGIS Pro技术应用(暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合)
GIS是利用电子计算机及其外部设备,采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲,它是在一定的地域内,将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来,达到对地理和属性信息的综合管理。GIS的…...

『赠书活动 | 第十七期』《Python网络爬虫:从入门到实战》
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 『赠书活动 | 第十七期』 本期书籍:《Python网络爬虫:从入门到实战》 赠书规则:评论区:点赞|收…...

C++——vector介绍及其简要模拟实现
vector的介绍 此主题介绍转载自(https://cplusplus.com/reference/vector/vector/) 1.vector是一个表示可变大小数组的序列容器 2.vector同数组一样,采用连续存储空间来存储元素,这样可以用下标来对vector中的元素进行访问,但是vector的大…...

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案
一、需求分析 最近做的一个用H5加原生开发的html项目,现需要集成到Vue2.0项目里面来。遇到的相关问题做个记录和总结,以便能帮到大家避免踩坑。 二、问题记录 1、页面空白问题 将html页面通过iframe的方式嵌入进来之后,发现页面是空白的&am…...

目标检测中的IOU
IOU 什么是IOU?IOU应用场景写代码调试什么是IOU? 简单来说IOU就是用来度量目标检测中预测框与真实框的重叠程度。在图像分类中,有一个明确的指标准确率来衡量模型分类模型的好坏。其公式为: 这个公式显然不适合在在目标检测中使用。我们知道目标检测中都是用一个矩形框住…...

微信小程序实现双向滑动快捷选择价格(价格区间)
实现样子 提示:效果可以自己自定义,自己将文字样式更改为自己项目属性即可 实现达到方法 1、左边为最低价,右边为最高价格,可以拖动左边最低价选择价格。拖动右边为最高价。 2、当两个价格重合时,继续拖动࿰…...

W5500-EVB-PICO 做TCP Server进行回环测试(六)
前言 上一章我们用W5500-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试,那么本章将用开发板做TCP服务器来进行数据回环测试。 TCP是什么?什么是TCP Server?能干什么? TCP (Transmission Control Protocol) 是一种面向连…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...