前言
本文目錄:
- 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()
方法:
小技巧
局部找圖相比於全局找圖,可以提高一定的查找效率。
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_exists
、wait
之類的截圖腳本,默認是保存在 .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