版權聲明:允許轉載,但轉載必須保留原鏈接;請勿用作商業或者非法用途
由於游戲的界面是通過游戲引擎渲染出來的,游戲界面沒有系統原生的控件信息,所以對於游戲,我們需要接入 poco-sdk 才能獲取到游戲界面中的控件信息。下面以Unity開發的手游為例,介紹如何在Android和iOS平台進行連接。
Android 平台
- 從 poco sdk repo 將
Unity3D這個文件夾克隆下來。

- 將克隆下來的
Unity3D文件夾放置於你的Unity項目的Assets/Scripts文件夾下。

- 將
Assets/Scripts/Unity3D目錄下以未用到的UI系統命名的文件夾刪除。例:假如您的項目使用的UI系統是ugui,請將fairygui和ngui兩個文件夾刪除,保留ugui文件夾。

-
在
Unity3D中打開您的項目,並將Unity3D/PocoManager.cs作為一個script component添加到您的GameObject中,要求掛載在一個永不銷毀的對象下,比如通常情況下的主相機。舉例: 點擊
demo這個場景下的Main Camera, 會在右方出現inspector界面,點擊inspector界面當中的Add Component。

在彈出的對話框中輸入
poco,選擇出現的Poco Manager這個選項。
完成后會在
inspector界面出現如圖所示的component。
-
點擊界面左上角
File->Build Settings, 生成一個合適的安卓包,並安裝到您的手機上。
- 啟動
Airtest IDE,按照上文所述將Airtest IDE與您的手機鏈接,並啟動對應的游戲。
- 在左下角的
Poco輔助窗中選擇Unity模式,即可看到當前界面的UI樹結構:

- 在選擇
Unity模式之后,Airtest IDE會自動插入poco的初始化代碼:

之后的腳本編寫,就可以利用Poco提供的API對游戲界面上的元素進行操作了。
下面是一個簡單的測試用例。您可以從這里下載這個簡單的Unity3D小游戲。在安裝完成后,打開游戲后點擊Start再點擊drag drop會出現如下所示的界面。

每將一顆星星拖動到屏幕中心的貝殼上,將得到20分;如果將5顆星星依次拖動到貝殼上,那將獲得100分。下面的腳本就是在測試依次拖動5顆星星是否會得到100分的分數。
from airtest.core.api import * auto_setup(__file__) from poco.drivers.unity3d import UnityPoco poco = UnityPoco() poco('btn_start').click() time.sleep(1.5) poco('drag_and_drop').click() shell = poco('shell').focus('center') for star in poco('plays').offspring('star'): star.drag_to(shell) time.sleep(1) assert poco('scoreVal').get_text() == "100", "score correct." poco('btn_back', type='Button').click()
點擊運行腳本按鈕,就會得到如下所示的結果。

iOS平台
- 同樣的,先完成引擎SDK接入,然后通過Airtest IDE連接iOS手機
- 與Android不同的是,iOS Unity Poco的連接需要啟動兩個proxy,8100端口用於連接iOS手機,5001端口用於連接poco-sdk的rpc端口
iproxy 8100 8100
iproxy 5001 5001
這里的iproxy相當於adb中的forward
- 連接好iOS手機之后,選擇Poco輔助窗中的
Unity模式,即可看到當前界面的UI樹結構:

- 之后即可通過Poco提供的API,對iOS上的游戲編寫自動化測試腳本了。
