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) 是一种面向连…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
