IOS 4中實現UI自動測試教程
IOS 4中實現UI自動測試教程是本文要介紹的內容,這篇文章的對象是 iOS 4 的初學者,我希望一個典型的iPhone 開發者能夠通過這篇文章掌握自動設置UI測試的方法。
UI 自動測試是iOS 4中重要的附加功能,它由名為“Automation”的新的工具對象支持,非常適合Producitivity風格應用的UI測試。
Automation工具從腳本工作(用JavaScript語言編寫),它在應用上模仿/擊發被請求的事件。測試腳本必須是可靠的可執行JavaScript文件,而且該文件可獲取主機的工具。
什么是測試腳本?
測試腳本是有順序的命令集合,每一個命令獲取一個應用中的用戶接口組件,然后在上面執行一個用戶行為,或者使用與之相關的信息。
描述
我使用的應用例子有一個名為“登陸”的屏幕,包含兩個文本域名:分別是“用戶名”和“密碼”,以及一個“登陸”按鈕。
寫測試腳本之前,在“Interface Builder”中標記所有的UI控制,在視圖中將可存取性標簽設置成一個唯一值(必須)。
在調試模式中編譯你的應用
測試腳本:
正如我上面提到的,測試腳本基本上是有順序的命令集合。換言之,它將文本測試的例子轉換成可以被“Automation”工具自動執行的JavaScript
下面是測試腳本的例子
- // Get the handle of applications main window
- var window = UIATarget.localTarget().frontMostApp().mainWindow();
- // Get the handle of view
- var view = window.elements()[0];
- var textfields = window.textFields();
- var passwordfields = window.secureTextFields();
- var buttons = window.buttons();
- var textviews = window.textViews();
- var statictexts = window.staticTexts();
- var target = UIATarget.localTarget();
- // Check number of Text field(s)
- if(textfields.length!=1)
- {
- UIALogger.logFail("FAIL: Inavlid number of Text field(s)");
- }
- else
- {
- UIALogger.logPass("PASS: Correct number of Text field(s)");
- }
- // Check number of Secure field(s)
- if(passwordfields.length!=1)
- {
- UIALogger.logFail("FAIL: Inavlid number of Secure field(s)");
- }
- else
- {
- UIALogger.logPass("PASS: Correct number of Secure field(s)");
- }
- // Check number of static field(s)
- if(statictexts.length!=2)
- {
- UIALogger.logFail("FAIL: Inavlid number of static field(s)");
- }
- else
- {
- UIALogger.logPass("PASS: Correct number of static field(s)");
- }
- // Check number of buttons(s)
- if(buttons.length!=1)
- {
- UIALogger.logFail("FAIL: Inavlid number of button(s)");
- }
- else
- {
- UIALogger.logPass("PASS: Correct number of button(s)");
- }
- //TESTCASE_001 : Test Log on Screen
- //Check existence of desired TextField On UIScreen
- if(textfields["username"]==null || textfields["username"].toString() == "[object UIAElementNil]")
- {
- UIALogger.logFail("FAIL:Desired textfield not found.");
- }
- else
- {
- UIALogger.logPass("PASS: Desired UITextField is available");
- }
- //TESTCASE_1.2 :Check existence desired of PasswordField On UIScreen
- if(passwordfields[0]==null || passwordfields[0].toString() == "[object UIAElementNil]")
- {
- UIALogger.logFail("FAIL:Desired UISecureField not found.");
- }
- else
- {
- UIALogger.logPass("PASS: Desired UISecureField is available");
- }
- //TESTCASE_1.3 :Check For Existence of Buttons On UIScreen
- if(buttons["logon"]==null || buttons["logon"].toString() == "[object UIAElementNil]")
- {
- UIALogger.logFail("FAIL:Desired UIButton not found.");
- }
- else
- {
- UIALogger.logPass("PASS: Desired UIButton is available");
- }
- //TESTCASE_001 : Missing User Name
- ///////////////////////////////////////
- textfields["username"].setValue("");
- passwordfields[0].setValue("password");
- buttons["logon"].tap();
- //target.delay(2);
- var errorVal=textviews["error"].value();
- if(errorVal!="Invalid User Name or Password")
- {
- UIALogger.logFail("Did Not Get Missing UserName Error : "+errorVal);
- }
- else
- {
- UIALogger.logPass("Missing User Name");
- }
- //TESTCASE_002 : Missing Password
- ////////////////////////////////////////////////
- textfields["username"].setValue("username");
- passwordfields[0].setValue("");
- buttons["logon"].tap();
- target.delay(2);
- var errorVal=textviews["error"].value();
- if(errorVal!="Invalid User Name or Password")
- {
- UIALogger.logFail("Did Not Get Missing Password Error : "+errorVal);
- }
- else
- {
- UIALogger.logPass(" Missing Password");
- }
- //TESTCASE_003 : Successful Log On
- textfields["username"].setValue("username");
- passwordfields[0].setValue("password");
- buttons["logon"].tap();
- target.delay(2);
應用中的所有UI組件通過有次序的對象層級結構傳達給腳本,該層次結構通過UIAElements類定義,包括UIATarget、UIALogger等子類。
請參照蘋果開發者網站的UI Automation Reference Collection獲取更多信息。
完成腳本之后按下列步驟執行。
第一步
打開Instruments(你可以在Spotlight中找到它),在樣本選擇窗口中選擇“Automation”
第二步
Trace窗口會打開,在“Choose Target”下拉窗口的幫助下選擇應用的調試版本。
第三步
使用“Script”下拉窗口選擇測試腳本文件,然后點擊“Run and Record”按鈕。
之后會自動運行“iPhone Simulator”,并開始執行測試腳本(可能花費4-5秒時間)。
可重用的測試腳本
API提供一個#import指令,你可以用它編寫更小的、可重用的、分離的測試腳本。
例如:如果你準備在文件 TestUtilities.js中定義常用函數,你可以在腳本中加入命令行 #import”<path-to-library-folder>/TestUtilities.js”,從而使你的測試腳本能夠使用這些函數。
測試樣本代碼的硬件要求
帶有 Snow Leopard 10.6(或者更高版本)和iOS SDK 4.0 的Mac Mini(Intel處理器版本)
(1)解壓附件“LoginWindow_src.zip”,在調試模式下編譯它,并在模擬器Simulator上進行測試。
(2)“用戶名/密碼”是可靠證明;在相應的“User ID”和“Password”字段中填寫值。
你遇到“Unexpected error…”了?
“Unexpected error in -[UIATarget_0x5a20d20 frontMostApp], /SourceCache/UIAutomation_Sim/UIAutomation-37/Framework/UIATargetElements.m line 437″
如果你遇到了這個錯誤,復制一個 com.apple.Accessibility.plist 到4.0.1就可以解決這個問題。
復制com.apple.Accessibility.plist 到~/Library/Application Support/iPhone Simulator/4.0.1/Library/Preferences
確保這個文件中僅有兩個分別名為“AccessibilityEnabled”和“ApplicationAccessibilityEnabled”的鍵值,并且都經過效驗。
小結:IOS 4中實現UI自動測試教程的內容介紹完了,希望本文對你有所幫助!

























