Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹

Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹

一、项目背景

  • 在一个项目中,选项被选中和未选中的节点元素的属性值无变化,通过AI识别率达不到百分百,想着通过计算图片的HSV值来判断选择能否被选中。(HSV比较友好,人更容易理解,为啥不要RGB是因为颜色模型太复杂,图片计算的RGB值不好判断颜色)回到正题上来,图片计算值时首先要扣出app选项的图片。看了网上好多资料,知识点比较零碎,我自己写了一个大体函数,有小伙伴遇到通用问题后就可以自己将函数粘贴的自己项目中,记住要带包。

二 、 解决思路及方法

  • airtest工具根据app页面信息提取坐标进行截图保存在自定义文件夹,关键词app页面信息就是页面上的文字,根据文字提取文字的坐标和尺寸(计算出的坐标和尺寸是相当App整个页面长宽百分比,需要获取整个页面的长宽,通过百分比计算定位到左上和右下坐标),通过坐标和尺寸计算出左上和右下的坐标值,通过这两个坐标值进行截图并保存在自定义文件下。在python自动化测试中,批量截图的文件命名以时间戳进行命名。直接上代码。

在这里插入图片描述

在这里插入图片描述

# -*- encoding=utf8 -*-
__author__ = "Administrator"from airtest.core.api import *
from airtest.aircv import *from airtest.core.api import *
from airtest.core.api import *
from airtest.aircv import *
from PIL import Imagefrom PIL import Imageauto_setup(__file__)from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
# 刷脚本禁止写函数调用
screen = G.DEVICE.snapshot() 
# 局部截图# 获取屏幕尺寸
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
android_poco= AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
screen_with, screen_height = android_poco.get_screen_size()
print("屏幕的宽度",screen_with,"屏幕的长度", screen_height)def txt_zuo_biao_jie_tu(jiedian):print(len((jiedian)))for jiedian_i in range(len(jiedian)):print("开始计算")# 获取等级文本====成色jiedian_txt = jiedian[jiedian_i].child("android.view.View").get_text()print(jiedian_txt)# 获取元素节点jiedian_i_nod = jiedian[jiedian_i].child("android.view.View")# 获取节点坐标print(jiedian_i_nod.get_position())print(jiedian_i_nod.get_size())size_0 = jiedian_i_nod.get_size()position_0 = jiedian_i_nod.get_position()# 获取节点尺寸除以2for i_0 in range(len(size_0)):size_0[i_0] = size_0[i_0] / 2print(size_0)
#         # 计算坐标list_jia = []list_jian = []for index_0, item_0 in enumerate(position_0):list_jia.append(item_0 + size_0[index_0])print(list_jia)for index_0, item_0 in enumerate(position_0):list_jian.append(item_0 - size_0[index_0])print(list_jian)count = 1# 获取屏幕的大小list_jian_0 = []list_jia_0 = []# 获取坐标后开始截图list_jian_0.append(list_jian[0]*screen_with)list_jian_0.append(list_jian[1]*screen_height)list_jia_0.append(list_jia[0]*screen_with)list_jia_0.append(list_jia[1]*screen_height)c_0 = tuple(list_jian_0 + list_jia_0)print(c_0)# 截取图片区域screen = G.DEVICE.snapshot()# # 局部截图screen = aircv.crop_image(screen,c_0)# 保存局部截图到指定文件夹中pil_image = cv2_2_pil(screen)picture_name="{}_{}".format("截图颜色判断", time.strftime('%Y%m%d%H%M%S'))pil_image.save("G:/9月份pyqt项目/Airtest/代码/截图/untitled.air/{}.png".format(picture_name), quality=99, optimize=True)return("成功")if __name__ == '__main__':jiedian = poco("android.widget.FrameLayout").offspring("com.wuba.zhuanzhuan:id/fah").child("android.webkit.WebView").offspring("app").child("android.view.View").child("android.view.View").child("android.view.View")[5].child("android.view.View").child("android.view.View")[1].child("android.view.View")[0].offspring("android.widget.ListView").child("android.view.View")txt_zuo_biao_jie_tu(jiedian)
  • 思路值得参考,代码写的比较乱,大家可以作为参考,以后再遇到类似的问题,直接上代码。当然有不足之处,多多包涵,小伙伴就自己补充,争取项目在最短时间内,不烧脑细胞可以完活。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/129817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32 for Arduino 分区信息

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-11-04❤️❤️ 本篇更新记录 2023-11-04❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏…

【JAVA学习笔记】59 - JUnit框架使用、本章作业

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter15/src/com/yinhai/homework JUnit测试框架 1.基本介绍 1. JUnit是一个Java语言的单元测试框架 2.多数Java的开发环境都已经集成了JUnit作为单元测试的工具 2.如何使用 创建方法后&#x…

JVM离线分析-使用MAT分析dump堆文件

1. MAT(Memory Analyzer Tool)的介绍 官方介绍 The Eclipse Memory Analyzer is a fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption. Use the Memory Analyzer to analyze productive heap …

Java随机获取某个范围内的随机整数

随机获取某个范围内的随机整数 一、代码 /*** 随机获取某个范围内的随机整数的值* param min 最小值* param max 最大值* return*/public static int randomNum(int min,int max) {// 创建一个Random对象Random random new Random();// 生成指定范围内的随机整数int randomI…

通过@ConfigrationProperties读取配置文件属性并赋值

这种设计使得 Anything 成为 Something 类的静态成员,因此不依赖于外部类的实例。静态内部类通常更独立,它们可以单独存在且无需引用外部类的实例。 如果将 Anything 类定义为非静态的内部类,它将依赖于 Something 类的实例。这意味着每个 S…

vue中的rules表单校验规则使用方法 :rules=“rules“

一、el-form里面必写属性值 :ref"dataForm" // 提交表单时进行校验 :rules"rules" // return 下的校验规则 :model"userForm" // 绑定表单的值 <el-formref"dataForm" // 必写属性值:rules"rules"…

CV论文阅读大合集

YearNameAreamodeldescriptiondrawback2021 ICMLClip &#xff08;Contrastive Language-Image Pre-training&#xff09;contrastive learning、zero-shot learing、mutimodel用文本作为监督信号来训练可迁移的视觉模型CLIP’s zero-shot performance, although comparable to…

redis缓存击穿,redisson分布式锁,redis逻辑过期

什么是缓存击穿&#xff1a; 缓存击穿是指在高并发环境下&#xff0c;某个热点数据的缓存过期&#xff0c;导致大量请求同时访问后端存储系统&#xff0c;引起系统性能下降和后端存储压力过大的现象。 解决方案&#xff1a; 1. redisson分布式锁 本质上是缓存重建的过程中&…

「Verilog学习笔记」四选一多路器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 通过波形示意图我们可以发现&#xff0c;当sel为0&#xff0c;1&#xff0c;2时&#xff0c;输出mux_out分别为d3&#xff0c;d2&#xff0c;d1&#xff0c;那么sel3…

PHP中文转拼音实现

pinyin.php 床前明月光&#xff0c;疑是地上霜。 举头望明月&#xff0c;低头思故乡 <?php /*** PHP 汉字转拼音 [包含20902个基本汉字5059生僻字]* author 楼教主(cik520qq.com)* version v1.2* note 请开启 mb_string 扩展*/var_dump(pinyin(床前明月光&#xff0c;疑是…

【Redis】的简介和安装配置(Linux和windows)及操作命令

目录 一、概述 1.介绍 2.特点 二、安配 1. 安装 2. 配置 3. 主机连接 1.Linux连接 2.windows连接 三、命令 1. 字符串(String) 2. 哈希(Hash) 3. 列表&#xff08;List&#xff09; 4. 集合&#xff08;Set&#xff09; 一、概述 1.介绍 Redis是一个开源的、基…

零代码复现-TCGA联合GEO免疫基因结合代谢基因生信套路(二)

零代码复现-TCGA联合GEO免疫基因结合代谢基因生信套路&#xff08;二&#xff09;-关键基因集的获取和生存数据准备 前面的分析中&#xff0c;下载TCGA和GEO的数据&#xff0c;并进行简单的处理&#xff0c;接下来就是相关基因集的获取和整理&#xff0c;为后期聚类和降维做准…

【PyQt学习篇 · ⑥】:QWidget - 事件

文章目录 事件消息显示和关闭事件移动事件调整大小事件鼠标事件进入和离开事件鼠标按下和释放事件鼠标双击事件鼠标按下移动事件 键盘事件焦点事件拖拽事件绘制事件改变事件右键菜单输入法 事件转发机制案例一案例二案例三 事件消息 显示和关闭事件 showEvent(QShowEvent)方法…

小白如何制作电子画册?看这里,超多画册模板任你挑!

传统纸质版的画册&#xff0c;制作起来即费力又费时&#xff0c;花费还高&#xff0c;想要修改内容还得重新制作&#xff0c;特别麻烦。现在互联网发达&#xff0c;如今已经用上了H5的技术&#xff0c;小白也能快速制作一本翻页电子画册。 只需用FLBOOK&#xff0c;在线就可以制…

Linux的历史与环境

目录 Linux的背景介绍 Linux的时代背景-硅谷模式 计算机发展 UNIX发展历史 Linux诞生的偶然与必然 Linux开源 Linux发行版本 搭建Linux的环境 1.直接安装在物理机上 2.使用虚拟机软件 3.使用云服务器 &#xff08;1&#xff09;购买云服务器 &#xff08;2&#x…

OceanBase:03-集群部署

目录 一、集群规划 二、配置要求 三、部署前配置 1.配置 limits.conf 2.配置 sysctl.conf 3.关闭防火墙 4.关闭 SELinux 5.创建数据目录&#xff0c;修改文件所有者信息 6.设置无密码 SSH 登录 7.安装jdk 四、解压执行安装 五、集群部署 1.OBD命令行部署 2. OBD白…

2019年408真题复盘

紫色标记是认为有一定的思维难度或重点总结 红色标记是这次刷真题做错的 记录自己对题目的一些想法与联系&#xff0c;可能并不太关注题目本身。 分数用时 选择部分 80/8036min大题部分41/7094min总分121130min 摘自知乎老哥&#xff1a;“我做历年真题时&#xff0c;绝大部分…

图数据库Neo4j——SpringBoot使用Neo4j 简单增删改查 复杂查询初步

前言 图形数据库是专门用于存储图形数据的数据库&#xff0c;它使用图形模型来存储数据&#xff0c;并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。 Neo4j是用Java实现的开源NoSQL图数据库&#xff0c;本篇博客介绍如何在SpringBoot中使用Neo4j图数据库&…

python连接clickhouse (CK)

Author: tkhywang 2810248865qq.com Date: 2023-11-01 11:28:58 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-11-01 11:36:25 FilePath: \PythonProject02\Python读取clickhouse2 数据库数据.py Description: 这是默认设置,请设置customMade, 打开koroFileHead…

【Linux】:Linux开发工具之Linux编辑器vim的使用

&#x1f52b;1.Linux编辑器-vim使用 &#x1f4e4; vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以…