Airtest結合Poco對控件實施精準截圖

1.前言最近在Q羣內發現有個小夥伴提出了一個很有趣的腳本需求,想要實現“通過選擇器獲取到了控件,然後截圖這個控件範圍”,根據我們的Airtest的局部截圖接口以及poco控件的屬性查詢接口是可以很快實現的~

2.接口查找

首先我們需要知道我們應該怎麼實現用腳本去進行局部截圖,我們可以通過翻閱Airtest的API文檔發現,Airtest提供了 crop_image(img, rect) 方法可以幫助我們實現局部截圖,在我們往期的推文裏也介紹過該接口:

 

觀察接口需要傳入的參數是需要截圖範圍的左上角以及右下角座標,那我們可以先識別控件,打開poco點擊識別控件發現控件有很多屬性,仔細觀察發現,我們需要使用到的是pos(控件位置中心座標)以及size(控件大小範圍),通過計算即可得出截圖範圍的左上角以及右下角座標啦。

 

那我們應該如何獲取控件的這兩個數值呢,我們可以查看poco的API文檔,翻閱一下發現,poco還有獲取控件該參數的接口,這下就可以輕而易舉地得到所需的數據啦~

 

得到數據之後就是結合以上接口的傳輸數據來看,我們只需要計算得到控件的左上角座標以及右下角的座標後即可截出我們想要的圖片了

3.代碼演示

圖片

__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.aircv import *

auto_setup(__file__)

from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

#獲取屏幕分辨率
android = device()
xy=android.get_current_resolution()

screen = G.DEVICE.snapshot()

#使用poco去尋找控件
if poco(text="遊戲增強器").exists():
    a=poco(text="遊戲增強器").get_position()#獲取控件的中心座標
    b=poco(text="遊戲增強器").get_size()#獲取控件的實際長寬
    
    #計算左上角座標,轉化成絕對座標
    x1=int((a[0]-0.5*b[0])*xy[0])
    y1=int((a[1]-0.5*b[1])*xy[1])
    
    #計算右下角座標,轉化成絕對座標
    x2=int((a[0]+0.5*b[0])*xy[0])
    y2=int((a[1]+0.5*b[1])*xy[1])
    
    # 局部截圖
    screen = aircv.crop_image(screen,(x1,y1,x2,y2))
    # 保存局部截圖到log文件夾中
    try_log_screen(screen)

4.小結

通過代碼需求,我們可以先將需求拆分後逐個擊破,找到所需接口後就可以進行拼接使用啦,AirtestIDE也是集成了Python的代碼環境,可以正常使用python的基礎語法的~如果自己有更多的第三方庫進行編寫腳本的話,也是可以通過該方法使用自己的本地python環境運行我們的腳本。https://airtest.doc.io.netease.com/IDEdocs/3.4run_script/0_run_script/#4希望大家也可以通過Airtest與Poco的組合實現更多有趣的自動化腳本,同時我們十分歡迎大家將自己編寫的自動化腳本砸向我們~

---------------------------------------------------------------------------------

關注微信公衆號即可在手機上查閱,並可接收更多測試分享~

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