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

news2024/11/27 14:35:36

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 Image

from PIL import Image

auto_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()
        # 获取节点尺寸除以2

        for i_0 in range(len(size_0)):
            size_0[i_0] = size_0[i_0] / 2
        print(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.coloradmin.cn/o/1169040.html

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

相关文章

Android笔记(十一):Compose中使用ViewModel

通过ViewModel组件用于保存视图中需要的数据。ViewModel主要目的是将与用户界面相关的数据模型和应用程序的逻辑与负责实际显示和管理用户界面以及与操作系统交互的代码分离开来,为UI界面管理数据。常见的管理方式主要有:LiveData和StateFlow两种形式来实…

路由器基础(十一):ACL 配置

访问控制列表 (Access Control List,ACL) 是目前使用最多的访问控制实现技术。访问控制列表是路由器接口的指令列表,用来控制端口进出的数据包。ACL适用于所有的被路由协议,如IP、IPX、AppleTalk 等。访问控制列表可以分为基本访问控制列表和高级访问控制…

nodejs+springboot+elementui+python的Sd球鞋销售平台的设计与实现-毕业设计

此网站系统的开发方式和信息管理方式,借鉴前人设计的信息和研发。以网站商品信息为主,购物商品为核心功能来进行设计和研发,把网站信息和技术整合,开发出一套Sd球鞋销售平台。用目前现有的新技术进行系统开发,提供后台…

K-edge 和逃逸问题

一 k-eage基本概念 1 k-edge概念 K-edge称为K边, 其物理意义是高原子序数物质原子内部K层自由电子, 易与特定能量下X射线光子发生光电吸收作用, 导致对该能量的X射线光子吸收特别大。 而K-edge特性表现为X射线与物质发生相互作用时, 其衰减系数随着能量的增加而逐渐减小, 但在…

【优选算法系列】第一节.栈的简介(1047. 删除字符串中的所有相邻重复项和844. 比较含退格的字符串)

文章目录 前言一、删除字符串中的所有相邻重复项和 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、比较含退格的字符串 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 …

Vue组件化开发,组件的创建,注册,使用,详解Vue,vm,VueComponent,vc

组件化开发 模块是指将一个大的js文件按照模块化拆分规则进行拆分成的每个js文件, 凡是采用模块方式开发的应用都可以称为模块化应用(组件包括模块) 传统方式开发的一个网页通常包括三部分: 结构(HTML)、样式(CSS)、交互(JavaScript) 关系纵横交织复杂,牵一发动全…

4+m6A+机器学习+分型,要素过多,没有思路的同学可借鉴

今天给同学们分享一篇生信文章“Diagnostic, clustering, and immune cell infiltration analysis of m6A regulators in patients with sepsis”,这篇文章发表在Sci Rep.期刊上,影响因子为4.6。 结果解读: 脓毒症中m6A调节因子的转录改变 …

ChinaSoft 论坛巡礼 | 安全攸关软件的智能化开发方法论坛

2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

5.RDD持久化

概述 今日目标: RDD 持久化 RDD持久化原理RDD持久化策略如何选择RDD持久化策略案例 相关文章如下: spark官网地址RDD编程指南 RDD 持久化 RDD持久化原理 Spark中最重要的功能之一是跨操作在内存中持久化(或缓存)数据集。当…

Make.com实现多个APP应用的自动化的入门指南

Make.com是一款基于云的自动化平台,可帮助用户将多个应用程序连接在一起,并通过设置自动化流程来简化日常任务。Make.com提供丰富的API集成,支持连接各种流行的应用程序,包括社交媒体、电子商务、CRM等。 使用Make.com实现多个AP…

AM@点与点集的关系@n维空间邻域

文章目录 abstract坐标平面平面点集 平面邻域利用邻域描述点与点集的关系聚点点集分类 n n n维空间基础概念线性运算和空间概念 空间中的两点距离 n n n维空间中的变元极限 n n n维空间内的邻域 abstract 坐标平面和平面点集, n n n维空间点集点与点集的关系n维空间及其邻域 …

python用cv2画图(line, rectangle, text等)

Python做图像图形研究的时候,通常需要画很多辅助几何形状(比如bounding box等)。基于opencv的几何图形绘制具有易用性,而且天然能和numpy数组交互。 本文总结了几种常用的cv2画几何图形的方法,当一个简易的手册使用&a…

【this详解】学习JavaScript的this的使用和原理这一篇就够了,超详细,建议收藏!!!

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:前端js专栏 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的…

IS200EPSMG1AED 使用Lua创建逻辑脚本或完整程序

IS200EPSMG1AED 使用Lua创建逻辑脚本或完整程序 IS200EPSMG1AED 是一种支持网络的I/O控制器,它执行类似于可编程逻辑控制器(PLC)的控制、逻辑和监控功能。然而,与PLC不同,X-600M是为基于网络的应用而设计的。X-600M可以使用内置网络服务器和…

094基于web+springboot的酒店客房管理系统

欢迎大家关注,一起好好学习,天天向上 文章目录 一项目简介技术介绍 二、功能组成三、效果图四、 文章目录 一项目简介 本酒店客房管理系统有管理员,用户,会员,清洁人员。管理员功能有个人中心,用户管理&am…

2023年最新CUDA安装教程,看完就会(windows版)。

目录 前言 注意:本教程建立在您已经正确安装了显卡驱动的基础上 第一步,找到对应的CUDA版本 第二步,查看你要安装的pytorch版本对应的cuda版本(如果只需要安装cuda可以跳过) 第二步,下载cuda 第三步,…

PointNet++ 论文阅读

论文链接 PointNet 0. Abstract **背景:**PointNet的设计并未捕捉到度量空间中存在的局部结构,限制了其识别细粒度模式和适用于复杂场景的能力 解决思路: 引入了一种分层神经网络,该网络在输入点集的嵌套分割上递归地应用Poin…

[PHP]禅道项目管理软件ZenTaoPMS源码包 v16.4

禅道项目管理软件ZenTaoPMS一键安装包是一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。注重实效的管理思想,合理的软件…

C语言,数据结构指针,结构构体操作符 •,->,*的区别,看这篇就够了

在朋友们学习指针和数据结构这一章的时候,对各种操作符云里雾里。当你看到这么文章之后你就会明白了。 一 • 和 ->运算符 • 运算符:是结构变量访问结构体成员时用的操作符 -> 运算符:这是结构体指针访问结构体成员时调用的运算符。 …

GCN火车票识别项目 P1 火车票识别项目介绍 Pytorch LSTM/GCN

从本节开始,我将带大家完成一个深度学习项目:用图卷积神经网络(GCN),实现一个「火车票文字信息提取」的项目,由于火车票上每个节点文字不是等长的,所以还需要添加一个前置的 LSTM 来提取句子特征。 课前说明 1、这是…