FrontPage

2011/08/17からのアクセス回数 4446

Automation

titanium/単体テスト(QUnit)を試すでは、データベース廻りの単体テストを紹介しましたが、 今回は、XCodeに付属するAutomationを使ったUIのテスト方法について説明します。

起動方法

Automationは、XCodeのInstrumentsのライブラリとして提供されています。

  • /Developer/Applications以下のInstrumentsを起動します
  • Chooseダイアログが表示されますので、Automationを選択します

choose_dialog.png

  • Choose Targetメニューから「Choose Target...」でターゲットを選択します、ここではTitanium mobileで作成したDemoアプリを選択します

choose_target.png

  • デフォルトでは、iPad - Simulator- iOS 3.2となっているので、ターゲットのiOSにします *1

lunch_option.png

UIのテスト

テストスクリプトの設定

Automationのテストは、javascriptで記述したスクリプトに沿って行われます。

Scriptのタグで使用するスクリプトをセットします。ここではautomation_test.jsをセットします。

最初のスクリプト

最初に、ログの出力と部品の構成を出力するスクリプトを実行します。

UIALogger.logStart("Starting Test");

UIALogger.logStart("Logging Tab1 element tree …");
UIATarget.localTarget().logElementTree();
UIALogger.logPass();
  • UIALogger.logStartでロググループの開始をログ出力
  • logElementTreeで部品の構成を表示
  • UIALogger.logPassでグループの処理の成功をログ出力

しています。スクリプトの実行は、Recordボタンを押した後にStart Scriptボタンを押します。 *2

テストの画面は、

iPhone.png

出力結果は、

log1.png

これでは、良く分からないので、このログの階層構造を示すと以下のようになります。

UI階層.png

部品へのアクセス

Automation Reference Collection*3 に各部品へのアクセス方法が載っています。

すべてのUI部品が、UIAElementクラスのサブクラスとなっているので、部品が含む要素は、buttons()等のように部品要素単位で取得することができます。

logElementTreeで正確な画面の構成が取得できるので、これを元に部品にアクセスします。

最初のスクリプトにタブバーのTab 1ボタンの名前を出力してみます。

var target = UIATarget.localTarget();
var app = target.frontMostApp();
var main = app.mainWindow();
var navi = main.navigationBar();
var tab = main.tabBar();

UIALogger.logDebug(tab.buttons()[0].name());
  • 最初にtarget, app, main, navi, tabにターゲット、アプリケーション、メインウィンドウ、ナビゲーションバー、タブバーをセットします
  • tab.buttons()[0].name()でタブバーのボタン配列の1個目のボタンの名前を取得し、logDebugでログに出力します

実行結果は、以下の通りです。

log2.png

画面遷移

次に画面遷移ですが、通常の操作通り、部品をタップ(tap関数)して画面を遷移します。

Tab 2のWebViewのFoodLogサイト画面に遷移してみます。 Webページの表示に時間がかかるので、delay関数ですこし待ちます。

tab.buttons()["Tab 2"].tap();
target.delay(3.0);

UIALogger.logStart("Logging Tab2 element tree …");
main.logElementTree();
UIALogger.logPass();

FoodLog.png

ログの結果、WeViewの中身の要素も通常の要素と同じように表示されていることが分かります。 *4

log3.png

また、tapの直後はmain.logElementTreeが正しく表示されませんので、delay関数で少し時間を 置くのを忘れないようしてください。

テストシナリオの実行

画面の切り替えができたので、テストシナリオに沿った動作をさせてみましょう。

  • 初期画面
  • FoodLog画面切り替え
  • 記録の追加
  • グラフの表示

以上の処理をスクリプトにすると記録の追加は、

// Tab 1に戻り
tab.buttons()["Tab 1"].tap();
target.delay(2.0);
// 追加ボタンを押す
navi.buttons()["Add"].tap();
target.delay(0.5);
// 体重を入力
main.textFields()[1].setValue("63.5");
target.delay(1.0);
main.buttons()["この値で保存する"].tap();
target.delay(1.0);

となり、グラフ表示は、

// グラフを表示
navi.buttons()["Graph"].tap();
target.delay(1.0);

となります。

テスト動画

実際にiPhoneシミュレータで実行している動画をアップします。

上記デモに使ったテストスクリプト

コメント

選択肢 投票
おもしろかった 4  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。


(Input image string)


*1 Automationは、iOS4以降でないと使えません
*2 Run on Recordを選択すると、StartScriptボタンを押さなくても自動的にスクリプトが実行されます
*3 GoogleでUIAutomationRefとするとでてきます
*4 WebViewの画面遷移もAutomationから操作できるので、この結果はとても重要なことです

添付ファイル: fileUI階層.png 529件 [詳細] fileautomation_test.js 423件 [詳細] filelog3.png 495件 [詳細] fileFoodLog.png 495件 [詳細] filelunch_option.png 524件 [詳細] filelog2.png 516件 [詳細] filelog1.png 511件 [詳細] fileiPhone.png 525件 [詳細] filechoose_target.png 473件 [詳細] filechoose_dialog.png 518件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-04-11 (木) 18:19:14 (1446d)
SmartDoc