使用Airtest最常遇到的幾個需求,都幫你們實現好了


 

前言

本文目錄:

  • 1.絕對坐標和相對坐標的切換
  • 2.局部截圖
  • 3.局部找圖
  • 4.指定截圖保存的路徑和名稱
  • 5.刪除指定截圖和刪除多余圖片

1.絕對坐標和相對坐標的切換

用代碼實現絕對坐標和相對坐標之間的切換,我們需要先獲取當前設備的屏幕分辨率:

# 獲取設備屏幕分辨率(豎屏)
height = G.DEVICE.display_info['height']
width = G.DEVICE.display_info['width']

# 已知絕對坐標[311,1065],轉換成相對坐標
x1 = 311/width
y1 = 1065/height
poco.click([x1,y1])

# 已知相對坐標[0.3,0.55],轉換成絕對坐標
x2 = 0.3*width
y2 = 0.55*height
touch([x2,y2])

# 如果是橫屏設備的話,則分辨率如下
height = G.DEVICE.display_info['width']
width = G.DEVICE.display_info['height']

 

我們還可以用下述方式,判斷當前屏幕為橫屏還是豎屏,並獲取當前屏幕的分辨率:

if G.DEVICE.display_info['orientation'] in [1,3]:
    height = G.DEVICE.display_info['width']
    width = G.DEVICE.display_info['height']
else:
    height = G.DEVICE.display_info['height']
    width = G.DEVICE.display_info['width']

 

小技巧

IDE自帶查看當前設備坐標的方法(僅適用於Android、iOS真機以及模擬器設備)


(查看絕對坐標)


(查看相對坐標)

2.局部截圖

局部截圖或者說按坐標截圖是大家經常會問到的問題,Airtest提供了 crop_image(img, rect) 方法可以幫助我們實現局部截圖:

舉個例子,我們想要截取手機屏幕中被紅框圈中位置的截圖:

我們可以這么實現:

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

from airtest.core.api import *
# crop_image()方法在airtest.aircv中,需要引入
from airtest.aircv import *

auto_setup(__file__)
screen = G.DEVICE.snapshot()

# 局部截圖
screen = aircv.crop_image(screen,(0,160,1067,551))
# 保存局部截圖到log文件夾中
try_log_screen(screen)

 

結果如圖:

3.局部找圖

局部找圖的步驟:

  • 進行局部截圖
  • 定義要查找的目標截圖對象
  • 利用 match_in 方法,在局部截圖中查找指定的截圖對象
from airtest.core.api import *
from airtest.aircv import *
auto_setup(__file__)

screen = G.DEVICE.snapshot() 
# 局部截圖
local_screen = aircv.crop_image(screen,(0,949,1067,1500))

# 將我們的目標截圖設置為一個Template對象
tempalte = Template(r"png_code/設置.png")
# 在局部截圖里面查找指定的圖片對象
pos = tempalte.match_in(local_screen)

# 返回找到的圖片對象的坐標(該坐標是相對於局部截圖的坐標)
print(pos)

# 若要返回目標在整個屏幕中的坐標,則x,y都需要加上局部截圖時設置的最小x、y
print(pos[0]+0,pos[1]+949)

 

上述代碼中,我們用到了 Template 類和這個類里面的 match_in() 方法:

詳情可以參考鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.cv.html?highlight=TEMPLATE#airtest.core.cv.Template

小技巧
局部找圖相比於全局找圖,可以提高一定的查找效率。

4.指定截圖保存的路徑和名稱

如果是對當前設備的屏幕進行截圖,並將截圖保存在自定義路徑下,可以用下述方式實現:(假設保存在"D:/test/" 目錄下,命名為 "首頁.png"

screen = G.DEVICE.snapshot()  
pil_img = cv2_2_pil(screen)
pil_img.save("D:/test/首頁.png", quality=99, optimize=True)

 

而對於 touch 、assert_existswait 之類的截圖腳本,默認是保存在 .air 文件夾內,與 .py 文件在一起的:

如果需要修改此類截圖腳本中截圖文件的名稱,我們可以雙擊對應截圖打開 圖片編輯器 ,然后將 filename 改成自定義的名字即可:

改完之后,.air 文件夾內就會出現你自定義名稱的截圖副本,原名字的截圖文件可以清理掉:

特別注意:如果我們右鍵切換代碼模式,再手動去修改代碼中截圖文件的名稱,實際上並不會自動修改到 .air 文件夾下面對應截圖文件的名稱。 除非你再手動把 .air 文件夾對應截圖的名字改了。所以我們非常不建議用這種方式來修改截圖文件的名稱。

5.刪除指定截圖和刪除多余截圖

Airtest沒有提供刪除指定截圖的API,但是python提供了 remove() 方法,可以幫助我們刪除指定路徑的截圖文件。

os.remove("unity_demo.png")

 

該方法必須傳入的參數是要移除的文件路徑。

另外需要注意的是,截圖腳本對應的截圖文件是不能夠隨意刪除的,除非你不再需要用到某條截圖腳本,那對應的截圖文件才可以被刪掉。

如果誤刪了截圖腳本對應的截圖文件,則執行腳本時會報 airtest.aircv.error.FileNotExistError: File not exist: 的錯誤:

小技巧
很多時候,我們在IDE的腳本編輯窗口中刪除了一些截圖腳本,但這些截圖腳本的截圖文件卻依舊保存在 .air 的文件夾中,此時我們可以通過IDE自帶的 刪除多余圖片 的功能,幫助我們快速刪除這些多余的截圖文件:

右鍵點擊腳本名稱,選擇刪除多余圖片即可,成功刪除后,IDE窗口的右下角會提示:


 

Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM