新手如何用Airtest实现在图片范围内随机点击?

news2025/1/16 8:03:06

1. 前言

前几天有个新手同学在Airtest官群里问了这样一个问题:

我是新手,在图片范围内随机点击 ,用Airtest怎么实现?代码?

那我们就以这个问题为例,浅浅聊一下,怎么把需求转化成我们的Airtest代码。

2. 了解Airtest

首先新手同学对Airtest要有以下几点认知:

  • ① Airtest是一个图像识别框架,它能在屏幕上用图像识别来找到想操作的位置并点击,所以Airtest本质上点击的是目标图片的坐标,默认是中心点
  • ② Airtest是python第三方库,除了Airtest本身的接口之外,我们随时可以import python的标准库或者其它第三方库,一起使用

3. 分析需求,转化成代码

1)查文档,找现成方法

有了以上2点认知后,我们再回到需求,“在图片范围内随机点击”,第一步我们要做的就是查询官方教程文档,看下有没有现成的方法可以使用:

  • ① 一般情况下,Airtest都是点击图片中心位置,不知道有没有点击图片内其它坐标的方法
  • ② 随机点击,怎么实现在图片内随机点击这个行为,不知道Airtest有没有随机点的方法

当我们查阅Airtest的教程文档之后,发现Airtest确实提供了点击图片内非中心坐标的方法,就是指定target_pos,但是只能点击图片内的9个点:

image

这里似乎并不太符合在图片范围内随机点的需求。随后我们又查询了文档,发现Airtest也没有提供随机点击的方法。

2)分析需求,自己实现

那么我们到这里就需要进入到第二步,分析需求,看看需求都有哪些难点需要我们实现:

  • ① 在图片范围内点击,那意味着在整个图片的坐标范围内点击,那我们怎么拿到整个图片的坐标范围?
  • ② 怎么点击一个随机的坐标?

针对第一个难点,其实我们分别拿到目标图片x、y坐标的最小、最大值,就能确认坐标范围了。

再进一步思考,一张图片x最小值是图片的最左侧,最大值是图片最右侧;y最小值是图片最上方,最大值是图片最下方;那就意味着,我们只要拿到图片左上角和右下角的坐标,就能完全确认目标图片x、y坐标的最小、最大值,进而确认图片坐标范围。

第一个难点解决后,再来看第二个难点,随机点,这里就要借助python的标准库random了,能帮助我们生成一个随机数的函数。

3)将思考转化成代码

最后一步就是将我们刚才分析需求,得到的思路,转化成代码:
image

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
import random

auto_setup(__file__)

# 定义函数,得到目标图片的坐标范围
def pos_range():
    if exists(Template(r"tpl1697515204054.png", target_pos=1, record_pos=(-0.16, 0.154), resolution=(2960, 1440))):
        up_pos = exists(Template(r"tpl1697515204054.png", target_pos=1, record_pos=(-0.16, 0.154), resolution=(2960, 1440))) # 利用target_pos=0,拿到目标图片左上角的坐标
        down_pos = exists(Template(r"tpl1697515204054.png", target_pos=9, record_pos=(-0.16, 0.154), resolution=(2960, 1440))) # 利用target_pos=9,拿到目标图片右下角的坐标
        x = (int(up_pos[0]),int(down_pos[0])) # 拿到图片x坐标的范围
        y = (int(up_pos[1]),int(down_pos[1])) # 拿到图片y坐标的范围
        return x,y
    else:
        print("目标图片不存在")

# 分别拿到图片x坐标与y坐标的范围值
pos_r = pos_range()
x = pos_r[0]
y = pos_r[1]

# 在x、y的坐标范围内生成随机数
x_range = random.randint(x[0],x[1])
y_range = random.randint(y[0],y[1])

# 点击图片范围内任意坐标
touch([x_range,y_range])

4. 小结

最后,希望新手同学想要用Airtest动手实现一个需求的时候,别忘了以下几个步骤:

  • 查询官方教程文档,看看有没有现成的方法可以使用
  • 分析需求,拆解其中的难点逐一突破,找到解题思路
  • 动手编写脚本、调试、优化

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

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

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

相关文章

Linux——shell外壳程序

shell外壳程序 1. 什么是shell外壳程序 Linux严格意义上说的是一个操作系统,我们称之为“核心 “ ,但我们一般用户,不能直接使用核心。 而是通过核心的“外壳”程序,也就是所谓的shell。 shell是所有外壳程序的统称 平时程序员…

毅速3D打印丨哪些产品最适合应用3D打印随形水路模具

3D打印技术随形水路模具无论是从生产效率、生产成本,还是从产品质量出发考虑,在各个领域有着重要的应用,毅速3D打印根据统计了目前应用比较多的产品领域主要有以下几类: 1、医疗美妆类产品。如化妆品包装瓶、脸部按摩仪等透明产品…

行情分析——加密货币市场大盘走势(10.20)

大饼昨日迅猛上涨,并在今日依然上涨,目前处在蓝色上涨趋势线,上涨趋势依然在。中长线可以考虑过几天止损或者继续持有。目前MACD日线呈现绿色实心5天,预计明后天可能会绿色空心,注意后续空头的到来,注意多单…

UART通信——笔记

UART通信特点 异步、全双工、串行。 只使用一对线就可以实现数据的通信,节约成本。 数据一位一位发送,数据传输较慢。 只能一对一通信。 如何实现通信的? UART: 发送数据的TX接受数据的RX参考GND UART是异步通信,…

SpringCloud 微服务全栈体系(一)

第一章 认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 一、单体架构 单体架构:将业务的所有功能集中在一个项目中开发&#xff…

MySQL数据库简单安装

MySQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管…

大河弯弯:CSS 文档流与三大元素显示模式

文章目录 参考环境文档流概念三大显示模式 内联元素概念常见的内联元素宽高由内容决定 块级元素概念常见的块级元素宽度受容器影响,高度受内容影响 内联块级元素概念常见的内联块级元素折中方案 设置元素的显示模式display 属性内联元素与块级元素的切换为什么要通过…

大托,如何站上天心南部的价值高地?

作者 | 魏启扬 陈宇航 来源 | 洞见新研社 陈飞 摄 “商贾云集于四方,市井数盈于万户”,长沙南城古往今来生生不息的热辣与烟火,每隔一段时间,都会有璀璨的迸发。 才在“加长版”黄金周释放了“不夜南城”的魅力,第…

YOLO目标检测——红细胞数据集【(含对应voc、coco和yolo三种格式标签】

实际项目应用:红细胞的自动检测和计数数据集说明:YOLO目标检测数据集,真实场景的高质量图片数据,数据场景丰富。使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签&am…

C++类和对象(四) (构造函数 析构函数)

1 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生…

SolidWorks2021 安装教程(亲测可用)

1.安装教程:(断网进行,否则安装了后还是无法用) 1.运行sw2021_network_serials_licensing 2. 注册表编辑器确定 3.成功添加到注册表中 4.复制SolidWorks_Flexnet_Server文件夹 5.运行SolidWorks_Flexnet_Server下的lserver_insta…

一个适合练手的接口测试实战项目——慕慕生鲜

前言 最近很多粉丝找小月要接口测试项目练练手,看看实力!今天,它来了 慕慕生鲜,完整版,文末有福利! 干货来咯,收藏好! 1. 接口测试需求分析 常见接口文档提供的两种方式 ①wor…

代码随想录算法训练营第23期day26|39. 组合总和、40.组合总和II、131.分割回文串

目录 一、(leetcode 39)组合总和 二、(leetcode 40)组合总和II 三、(leetcode 131)分割回文串 一、(leetcode 39)组合总和 力扣题目链接 状态:基本回溯AC&#xff0c…

Docker(2)

Docker网络 原生网络 [rootserver1 harbor]# docker network ls默认使用桥接模式,桥接到docker0上 [rootserver1 ~]# docker run -d --name demo nginx [rootserver1 ~]# yum install -y bridge-utils [rootserver1 ~]# brctl showhost模式,容器和宿…

【vue3】Transition过渡组件

Transition 自带的内部组件xxx-enter-from 开始进入过渡 0%xxx-enter-active 过渡过程xxx-enter-to 过渡完成 100%xxx-leave-from 开始退出 0%xxx-leave-active 退出过程xxx-leave-to 退出完成 100% xxx是组件属性name的值&#xff0c;自定义的。我使用的是fade-box <templa…

JavaSE编程题目练习(三)

博客昵称&#xff1a;架构师Cool 最喜欢的座右铭&#xff1a;一以贯之的努力&#xff0c;不得懈怠的人生。 作者简介&#xff1a;一名Coder&#xff0c;欢迎关注小弟&#xff01; 博主小留言&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟Cool&#xff0…

基于 Qt UDP通信局域网通信

前言 该例程经过实际验证可以正常使用,只简单的使用UDP中的单播模式(一对一), 所用测试系统在同一局域网,其中: QT版本:5.12 PC端UDP模式:单播 UDP通信目标:基于STM32F4+LWIP协议的以太网接口 调试助手: 虚拟串口+串口助手+UDP和TCP调试助手[编程人员必备]一、UDP通…

RIP,EIGRP,OSPF区别

1. 动态路由协议的作用是什么&#xff1f; 2. 路由协议都有哪些种类&#xff1f; 3. 如何判断路由协议的优劣&#xff1f; -- RIP&#xff0c;EIGRP&#xff0c;OSPF - 动态路由协议 -- 路由协议 - 路由器上的软件 -- 帮助路由器彼此之间同步路由表 -- 相互的传递…

MC 我的世界 模拟城市模拟大都市 模组下载及整合包导入详解

如何导入整合包 如果是从curseforge下载的整合包不需要解压的&#xff0c;直接按照下方步骤整就行了&#xff0c;把启动器和整合包复制到没有中文的路径下 双击启动exe文件&#xff0c;如果弹窗要更新啥的点确定即可&#xff0c;启动好了先登录账户&#xff0c;有正式版的登录…

攻防世界web篇-view_source

因为题目说了不能使用右键查看源代码 所以我直接F12来查看&#xff0c;但是F12只能查看不能复制flag 之后尝试view-source:http://61.147.171.105:57537/ 这里右键不受限制&#xff0c;可以直接粘贴复制