【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!

2023-10-28 00:52

本文主要是介绍【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 前言

上一篇推文利用一个在图片范围内实现随机坐标点击的例子,去教会大家如何将自己想要的效果实现出来,受到大家的热情反响,在我们官方讨论群中,还有大佬对我们的示例代码进行优化改进,做了很多合理的函数封装,以及减少了示例脚本内的二次查找等问题;我们也征得大佬同意,将他的代码与大家分享一下~(大佬来自Airtest官方讨论3群-Moty)

2. 代码分享

Moty同学是通过在本地python环境安装Airtest库去进行Airtest自动化脚本编写的,同时该脚本在AirtestIDE上是可以完美适配运行的。所以大家在编写自动化脚本的时候,可以有多重选择;但是AirtestIDE在代码编写上也有很多方便大家的小设计小巧思,大家也可以多多使用我们的AirtestIDE啊~

废话不多说,我们先来看看Moty同学代码的运行情况,可以看到通过生成随机坐标的形式,点击图片上的任意点,这里用计算器去具象化,可以看到每次随机坐标可以点击不同数字或者数字的不同位置,每次运行都可以获得随机的数字序列。

在这里插入图片描述

看起来很厉害的样子,我们应该这么去实现呢,让我们来看看Moty同学的代码吧~

# -*- encoding=utf8 -*-
__author__ = "Moty"from airtest.core.api import *
from airtest.cli.parser import cli_setup
from airtest.core.error import *
from airtest.core.settings import Settings as ST
import random"""
获取模板匹配的目标区域的矩形 这一部分实现参考 cv.py 中 loop_find 部分
: param : tpl 模板
: param : intervalfunc 没有合适匹配时的回调函数
: return 最佳匹配的矩形区域(x1,y1,x2,y2)
"""def rectangle(tpl,intervalfunc=None):  G.LOGGING.info("Try finding: %s", tpl)start_time = time.time()while True:screen = G.DEVICE.snapshot(filename=None, quality=ST.SNAPSHOT_QUALITY)if screen is None:# 如果截图为空,则可能是屏幕锁定了G.LOGGING.warning("Screen is None, may be locked")else:match_result = tpl._cv_match(screen)if match_result:try_log_screen(screen)# 这里 rect 得到的是 4个坐标点 取出左上右下角 得到(x1,y1,x2,y2) 元组rect = match_result.get("rectangle")if rect is not None:return (round(rect[0][0]) , round(rect[0][1]) , round(rect[2][0]) , round(rect[2][1]))if intervalfunc is not None:intervalfunc()# 超时则raise,未超时则进行下次循环:if (time.time() - start_time) > ST.FIND_TIMEOUT:try_log_screen(screen)# 如果超时,则抛出异常raise TargetNotFoundError('Picture %s not found in screen' % tpl)else:time.sleep(0.5)"""
param : rect : 矩形区域 或模板
return : 区域内的随机坐标 
"""# 获取矩形区域内的随机坐标
def random_point(rect):# 如果传入的是图片,则获取图片匹配的矩形区域if isinstance(rect, Template):x1, y1, x2, y2 = rectangle(rect)else:x1, y1, x2, y2 = rect# 在矩形区域内随机生成一个坐标点x = random.randint(x1, x2)y = random.randint(y1, y2)return x, y"""
在 矩形范围内 随机点击 
param : v : 目标区域 or 模板 or 坐标点(兼容touch)
param : times : 点击次数
return :最终点击的点的坐标
"""
@logwrap
def random_touch_in_area(v, times=1, **kwargs):if isinstance(v, Template) or (isinstance(v, tuple) and len(v) == 4):pos = random_point(v)else:try_log_screen()pos = v
# 在目标区域内随机点击for _ in range(times): G.DEVICE.touch(pos, **kwargs) time.sleep(0.05)  delay_after_operation()  return posif __name__ == '__main__':# 如果没有通过命令行连接设备,则使用该连接命令,若使用IDE运行则可忽略这段代码,不用写上if not cli_setup():auto_setup(__file__, logdir=None, devices=["android:///",])# 录制图片tpl = Template(r"tpl1697636105500.png", record_pos=(0.243, -0.165), resolution=(1080, 2280))# 获取模板匹配的目标区域的矩形result = rectangle(tpl)print(f"图片所在矩形区域 {result}")# 在目标区域内随机点击for i in range(10):p =  random_touch_in_area(tpl)print(f"第 {i+1:02d} 次点击坐标 {p}")sleep(1)

可以看出来,在编写代码的时候,Moty同学将每一个步骤进行函数封装后,可以减少二次查找的次数以及代码冗余,Moty同学的编写思路很值得我们学习~

3.小结

最后,希望同学们在学习以及使用Airtest的时候,可以先学习方法,掌握代码编写技巧后,对自己的脚本可以进行优化再优化,从而实现代码收益最大化。同时,我们也鼓励大家在学习我们的官方教程脚本的时候,进行优化再创作,也可以到我们官方Q群进行投稿噢~

官方Q群:目前1、2、3群已满,大家可以加入4群(117973773)。

这里附上我们官方教程文档的网址,欢迎同学们查阅哦:https://airtest.doc.io.netease.com/。

这篇关于【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/289578

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四