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


    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])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    4. 小结

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

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

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

  • 相关阅读:
    【Shell篇<Ⅲ>】——shell函数、字符串的处理
    一键开启默认打印机共享功能,如何用powershell编写一个一键开启windows本地默认打印机共享的脚本
    volatile关键字
    知乎乱码、b站首页乱码、蓝奏云网盘打不开都是DNS惹的祸!修改设备的DNS
    《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 4 Mining Data Streams
    【英语:语法基础】C1.日常对话-自我介绍
    无声的世界,精神科用药并结合临床的一些分析及笔记(八)
    Recommendation Fairness: From Static to Dynamic 阅读笔记
    ArduinoUNO实战-第一章-LED闪烁实验
    2019年亚太杯APMCM数学建模大赛B题区域经济活力及其影响因素的分析与决策求解全过程文档及程序
  • 原文地址:https://blog.csdn.net/AirtestProject/article/details/133949985