はじめに
前回、Airtest IDE を使用して Android のゲームで
画像認識による UI の自動テストを行う方法を紹介しました
今回は「Poco」というフレームワークを Unity プロジェクトに導入して、
画像認識ではなく、Hierarchy のオブジェクトを文字列で指定する
UI の自動テストの方法を紹介していきます
検証環境
- Windows 10
- Android 7.0
- Airtest IDE v1.0.0
Airtest IDE の準備
上記の記事の「導入方法」と「Android と接続」を参考にしてください
Poco の導入
下記のページにアクセスして「Clone or download>Download ZIP」を押します
https://github.com/AirtestProject/Poco
そして、ダウンロードした ZIP ファイルを展開して
展開したフォルダ内の「Unity3D」フォルダを Unity プロジェクトに追加します
すると、コンパイルエラーが発生するので、
- uGUI を使用している場合は「ngui」フォルダを削除します
- NGUI を使用している場合は「ugui」フォルダを削除します
そして、シーンのカメラに「Poco Manager」をアタッチします
以上で Poco の導入が完了です
テスト用のスクリプトの作成
例えば、シーンにこのように UI のオブジェクトが配置して、
ボタンが押されたらテキストオブジェクトを非表示にするようにしたとします
そして、Android を Windows に接続して、
Unity から APK をビルドして、ビルドが完了したら
「Airtest IDE」の「Poco Assistant」のプルダウンメニューから「Unity」を選択します
すると、Unity の Hierarchy と同じ階層が表示されて、
Airtest IDE が Unity からビルドした APK を正しく認識していることがわかります
# -*- encoding=utf8 -*- from poco.drivers.unity3d import UnityPoco poco = UnityPoco() # StartButton という名前のボタンをクリックします poco('StartButton').click()
その後、「Script Editor」に上記のようなコードを貼り付けて実行します
そして、再生ボタンを押すか F5 を押すと、テストが開始され、
ボタンが自動でクリックされることが確認できます
以上が基本的な使い方になります
よく使われる関数
クリックと長押し
# -*- encoding=utf8 -*- from poco.drivers.unity3d import UnityPoco poco = UnityPoco() # basic という名前のオブジェクトをクリックします poco('basic').click() # basic と表示されているオブジェクトをクリックします poco(text='basic').click() # star_single という名前のオブジェクトを長押しします poco('star_single').long_click() # star_single という名前のオブジェクトを5秒間長押しします poco('star_single').long_click(duration=5)
- click:クリック
- long_click:長押し(秒数指定可能)
プロパティの取得や設定
# -*- encoding=utf8 -*- from poco.drivers.unity3d import UnityPoco poco = UnityPoco() # star_single という名前のオブジェクトを取得します star = poco('star_single') # star_single という名前のオブジェクトが存在する場合 if star.exists(): # 位置を取得します pos = star.get_position() # pos_input という名前のオブジェクトを取得します input_field = poco('pos_input') # 1秒待機します time.sleep(1) # pos_input という名前のオブジェクトのテキストを設定します input_field.set_text('x={:.02f}, y={:.02f}'.format(*pos)) # 3秒待機します time.sleep(3) # title という名前のオブジェクトのテキストを取得します title = poco('title').get_text() # 取得したテキストが「Basic test」と等しい場合 if title == 'Basic test': # btn_back という名前のボタンオブジェクトを取得します back = poco('btn_back', type='Button') # btn_back という名前のボタンオブジェクトをクリックします back.click()
- exists:存在するかどうかを確認
- get_position:位置を取得
- set_text:テキストを設定
- time.sleep:指定した秒数待機
# -*- encoding=utf8 -*- from poco.drivers.unity3d import UnityPoco poco = UnityPoco() # btn_start という名前のオブジェクトを取得します btn = poco('btn_start') # テキストを取得してログ出力します print(btn.get_text()) # => 'Start' # introduction という名前のオブジェクトを取得します intro = poco('introduction') # text プロパティの情報をログ出力します print(intro.attr('text')) # type プロパティの情報をログ出力します print(intro.attr('type')) # foo-bar という名前の FooBar オブジェクトを取得します obj = poco('foo-bar', type='FooBar') # オブジェクトが存在するかどうかをログ出力します print(obj.exists())
- attr:指定したプロパティの情報を取得
さいごに
今回は「Airtest IDE」と「Poco」を使用して
Unity で開発中の Android のゲームで UI の自動テストを行う方法を紹介しました
Airtest IDE では画像認識によるテストだけでなく、
このように Poco を使用することで文字列ベースのテストも可能になります
ぜひ今回紹介した方法でもテストを試してみていただければと思います