新手如何用Airtest實現在圖片範圍內隨機點擊?

此文章來源於項目官方公衆號:“AirtestProject”
版權聲明:允許轉載,但轉載必須保留原鏈接;請勿用作商業或者非法用途

1. 前言

前幾天有個新手同學在Airtest官羣裏問了這樣一個問題:

我是新手,在圖片範圍內隨機點擊 ,用Airtest怎麼實現?代碼?

那我們就以這個問題爲例,淺淺聊一下,怎麼把需求轉化成我們的Airtest代碼。

2. 瞭解Airtest

首先新手同學對Airtest要有以下幾點認知:

  • ① Airtest是一個圖像識別框架,它能在屏幕上用圖像識別來找到想操作的位置並點擊,所以Airtest本質上點擊的是目標圖片的座標,默認是中心點
  • ② Airtest是python第三方庫,除了Airtest本身的接口之外,我們隨時可以import python的標準庫或者其它第三方庫,一起使用

3. 分析需求,轉化成代碼

1)查文檔,找現成方法

有了以上2點認知後,我們再回到需求,“在圖片範圍內隨機點擊”,第一步我們要做的就是查詢官方教程文檔,看下有沒有現成的方法可以使用:

  • ① 一般情況下,Airtest都是點擊圖片中心位置,不知道有沒有點擊圖片內其它座標的方法
  • ② 隨機點擊,怎麼實現在圖片內隨機點擊這個行爲,不知道Airtest有沒有隨機點的方法

當我們查閱Airtest的教程文檔之後,發現Airtest確實提供了點擊圖片內非中心座標的方法,就是指定target_pos,但是隻能點擊圖片內的9個點:

這裏似乎並不太符合在圖片範圍內隨機點的需求。隨後我們又查詢了文檔,發現Airtest也沒有提供隨機點擊的方法。

2)分析需求,自己實現

那麼我們到這裏就需要進入到第二步,分析需求,看看需求都有哪些難點需要我們實現:

  • ① 在圖片範圍內點擊,那意味着在整個圖片的座標範圍內點擊,那我們怎麼拿到整個圖片的座標範圍?
  • ② 怎麼點擊一個隨機的座標?

針對第一個難點,其實我們分別拿到目標圖片x、y座標的最小、最大值,就能確認座標範圍了。

再進一步思考,一張圖片x最小值是圖片的最左側,最大值是圖片最右側;y最小值是圖片最上方,最大值是圖片最下方;那就意味着,我們只要拿到圖片左上角和右下角的座標,就能完全確認目標圖片x、y座標的最小、最大值,進而確認圖片座標範圍。

第一個難點解決後,再來看第二個難點,隨機點,這裏就要藉助python的標準庫random了,能幫助我們生成一個隨機數的函數。

3)將思考轉化成代碼

最後一步就是將我們剛纔分析需求,得到的思路,轉化成代碼:

# -*- 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/

AirtestIDE下載:airtest.netease.com/
Airtest 教程官網:airtest.doc.io.netease.com/
搭建企業私有云服務:airlab.163.com/b2b

官方答疑 Q 羣:117973773

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章