此文章來(lái)源于項(xiàng)目官方公眾號(hào):“AirtestProject”
版權(quán)聲明:允許轉(zhuǎn)載,但轉(zhuǎn)載必須保留原鏈接;請(qǐng)勿用作商業(yè)或者非法用途
1. 前言
前幾天有個(gè)新手同學(xué)在Airtest官群里問(wèn)了這樣一個(gè)問(wèn)題:
我是新手,在圖片范圍內(nèi)隨機(jī)點(diǎn)擊 ,用Airtest怎么實(shí)現(xiàn)?代碼?
那我們就以這個(gè)問(wèn)題為例,淺淺聊一下,怎么把需求轉(zhuǎn)化成我們的Airtest代碼。
2. 了解Airtest
首先新手同學(xué)對(duì)Airtest要有以下幾點(diǎn)認(rèn)知:
- ① Airtest是一個(gè)圖像識(shí)別框架,它能在屏幕上用圖像識(shí)別來(lái)找到想操作的位置并點(diǎn)擊,所以Airtest本質(zhì)上點(diǎn)擊的是目標(biāo)圖片的坐標(biāo),默認(rèn)是中心點(diǎn)
- ② Airtest是python第三方庫(kù),除了Airtest本身的接口之外,我們隨時(shí)可以import python的標(biāo)準(zhǔn)庫(kù)或者其它第三方庫(kù),一起使用
3. 分析需求,轉(zhuǎn)化成代碼
1)查文檔,找現(xiàn)成方法
有了以上2點(diǎn)認(rèn)知后,我們?cè)倩氐叫枨?,“在圖片范圍內(nèi)隨機(jī)點(diǎn)擊”,第一步我們要做的就是查詢官方教程文檔,看下有沒(méi)有現(xiàn)成的方法可以使用:
- ① 一般情況下,Airtest都是點(diǎn)擊圖片中心位置,不知道有沒(méi)有點(diǎn)擊圖片內(nèi)其它坐標(biāo)的方法
- ② 隨機(jī)點(diǎn)擊,怎么實(shí)現(xiàn)在圖片內(nèi)隨機(jī)點(diǎn)擊這個(gè)行為,不知道Airtest有沒(méi)有隨機(jī)點(diǎn)的方法
當(dāng)我們查閱Airtest的教程文檔之后,發(fā)現(xiàn)Airtest確實(shí)提供了點(diǎn)擊圖片內(nèi)非中心坐標(biāo)的方法,就是指定target_pos
,但是只能點(diǎn)擊圖片內(nèi)的9個(gè)點(diǎn):
這里似乎并不太符合在圖片范圍內(nèi)隨機(jī)點(diǎn)的需求。隨后我們又查詢了文檔,發(fā)現(xiàn)Airtest也沒(méi)有提供隨機(jī)點(diǎn)擊的方法。
2)分析需求,自己實(shí)現(xiàn)
那么我們到這里就需要進(jìn)入到第二步,分析需求,看看需求都有哪些難點(diǎn)需要我們實(shí)現(xiàn):
- ① 在圖片范圍內(nèi)點(diǎn)擊,那意味著在整個(gè)圖片的坐標(biāo)范圍內(nèi)點(diǎn)擊,那我們?cè)趺茨玫秸麄€(gè)圖片的坐標(biāo)范圍?
- ② 怎么點(diǎn)擊一個(gè)隨機(jī)的坐標(biāo)?
針對(duì)第一個(gè)難點(diǎn),其實(shí)我們分別拿到目標(biāo)圖片x、y坐標(biāo)的最小、最大值,就能確認(rèn)坐標(biāo)范圍了。
再進(jìn)一步思考,一張圖片x最小值是圖片的最左側(cè),最大值是圖片最右側(cè);y最小值是圖片最上方,最大值是圖片最下方;那就意味著,我們只要拿到圖片左上角和右下角的坐標(biāo),就能完全確認(rèn)目標(biāo)圖片x、y坐標(biāo)的最小、最大值,進(jìn)而確認(rèn)圖片坐標(biāo)范圍。
第一個(gè)難點(diǎn)解決后,再來(lái)看第二個(gè)難點(diǎn),隨機(jī)點(diǎn),這里就要借助python的標(biāo)準(zhǔn)庫(kù)random
了,能幫助我們生成一個(gè)隨機(jī)數(shù)的函數(shù)。
3)將思考轉(zhuǎn)化成代碼
最后一步就是將我們剛才分析需求,得到的思路,轉(zhuǎn)化成代碼:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
import random
auto_setup(__file__)
# 定義函數(shù),得到目標(biāo)圖片的坐標(biāo)范圍
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,拿到目標(biāo)圖片左上角的坐標(biāo)
down_pos = exists(Template(r"tpl1697515204054.png", target_pos=9, record_pos=(-0.16, 0.154), resolution=(2960, 1440))) # 利用target_pos=9,拿到目標(biāo)圖片右下角的坐標(biāo)
x = (int(up_pos[0]),int(down_pos[0])) # 拿到圖片x坐標(biāo)的范圍
y = (int(up_pos[1]),int(down_pos[1])) # 拿到圖片y坐標(biāo)的范圍
return x,y
else:
print("目標(biāo)圖片不存在")
# 分別拿到圖片x坐標(biāo)與y坐標(biāo)的范圍值
pos_r = pos_range()
x = pos_r[0]
y = pos_r[1]
# 在x、y的坐標(biāo)范圍內(nèi)生成隨機(jī)數(shù)
x_range = random.randint(x[0],x[1])
y_range = random.randint(y[0],y[1])
# 點(diǎn)擊圖片范圍內(nèi)任意坐標(biāo)
touch([x_range,y_range])
4. 小結(jié)
最后,希望新手同學(xué)想要用Airtest動(dòng)手實(shí)現(xiàn)一個(gè)需求的時(shí)候,別忘了以下幾個(gè)步驟:
- 查詢官方教程文檔,看看有沒(méi)有現(xiàn)成的方法可以使用
- 分析需求,拆解其中的難點(diǎn)逐一突破,找到解題思路
- 動(dòng)手編寫(xiě)腳本、調(diào)試、優(yōu)化
這里附上我們官方教程文檔的網(wǎng)址,歡迎同學(xué)們查閱哦:https://airtest.doc.io.netease.com/ 。
AirtestIDE下載:airtest.netease.com/
Airtest 教程官網(wǎng):airtest.doc.io.netease.com/
搭建企業(yè)私有云服務(wù):airlab.163.com/b2b文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-710876.html
官方答疑 Q 群:117973773文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-710876.html
到了這里,關(guān)于新手如何用Airtest實(shí)現(xiàn)在圖片范圍內(nèi)隨機(jī)點(diǎn)擊?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!