在UIAutomation中,界面就是由一堆UI元素構建的層級結構,所有UI元素都繼承對象UIAElement ,該對象提供了每個UI元素必須具備的一些屬性:
name
value
elements
parent
而整個界面的層級結構如下:
Target(設備級別的UI,用于支持晃動,屏幕方向變動等操作)
Application(設備上的應用,比方說Status Bar,keyboard等)
Main window(應用的界面,比方說導航條)
View(界面下的View,比方說UITableView)
Element(View下的一個元素)
Child element(元素下的一個子元素)
下面是一個訪問到Child element的例子:
UIATarget.localTarget().HamcrestDemo().tableViews()[0].cells()[0].elements()
開發者還可以通過“UIATarget.localTarget().logElementTree()”在控制臺打印出該target下所有的的elements。
找到UI元素之后,開發者可以基于該UI元素做期望的操作,UIAutomation作為原生的UI測試框架,基本上支持iOS上的所有UI元素和操作,比方說:
點擊按鈕,例: ***.buttons[“add”].tap()
輸入文本, 例:***.textfields[0].setValue(“new”)
滾動屏幕,例:***.scrollToElementWithPredicate(“name begin with ’test’”)
關于使用UIAutomation做UI測試,推薦大家一定要看一下2010的WWDC的Session 306:Automating User Interface Testing with Instruments【19】。 另外,這兒還有一篇很好的博客,詳細的講解了如何使用UIAutomation做UI自動化測試:http://blog.manbolo.com /2012/04/08/ios-automated-tests-with-uiautomation
Apple通過Instruments為UIAutomation測試用例的命令行運行提供了支持,這樣就為UIAutomation和CI服務器的集成提供了便利。開發者可以通過如下的步驟在命令行中運行UIAutomation測試腳本
指定目標設備,構建被測應用,該應用會被安裝到指定的DSTROOT目錄下
xcodebuild
-project "/Users/twer/Documents/xcodeworkspace/AudioDemo/AudioDemo.xcodeproj"
-schemeAudioDemo
-sdk iphonesimulator6.1
-configuration Release SYMROOT="/Users/twer/Documents/xcodeworkspace/
AudioDemo/build" DSTROOT="/Users/twer/Documents/xcodeworkspace/AudioDemo/
build" TARGETED_DEVICE_FAMILY="1"
install
啟動Instruments,基于第一步生成的應用運行UIAutomation測試
instruments
-t "/Applications/Xcode.app/Contents/Applications/Instruments.app/
Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/
Automation.tracetemplate" "/Users/twer/Documents/xcodeworkspace/AudioDemo
/build/Applications/TestExample.app"
-e UIASCRIPT
為了更好的展示測試效果以及與CI服務器集成,活躍的社區開發者們還嘗試把UIAutomation和Jasmine集成:https://github.com/shaune/jasmine-ios-acceptance-tests
UIAutomation因其原生支持,并且通過和Instruments的絕佳配合,開發者可以非常方便的使用錄制操作自動生成測試腳本,贏得了很多開發者的支持,但是因蘋果公司的基因,其系統非常封閉,導致開發者難以擴展,于是活躍的社區開發者們開始制造自己的輪子,Fone Monkey就是其中的一個優秀成果。
Fone Monkey
Fone Monkey是由Gorilla Logic 公司創建并維護的一個iOS自動化測試工具,其功能和UIAutomation差不多,但是由于其開源特性,極大的解放了活躍開發者的生產力,開發者可以很容易的根據自身需要擴展其功能。
Fone Monkey的安裝雖然簡單,但是比UIAutomation的原生支持來說,也算是一大劣勢了,具體的安裝過程可以參考:http://www.gorillalogic.com/fonemonkey-ios/fonemonkey-setup-guide/add- fonemonkey-your-xcode-project
Fone Monkey的使用方式主要就是錄制/回放,也可以把錄制好的測試用例保存為腳本以其他方式運行。安裝好Fone Monkey啟動測試以后,應用界面會有點變化:
開發者通過點擊Record按鈕錄制操作,點擊Play按鈕播放之前錄制的操作,點擊More按鈕可以添加一些針對元素的驗證, 這樣就形成了一個測試用例。
在Fone Monkey中錄制的測試用例可以保存為3種格式,以支持多種運行方式:
scriptName.fm:用于支持在Fone Monkey的窗口中運行測試
scriptName.m:用于和Xcode的OCUnit test 集成,可以以OCUnit的測試用例的形式運行UI測試,這就讓UI具備了命令行運行和與CI集成的能力。
scriptName.js:UIAutomation的格式,用于支持在Instruments中,以UIAutomation的形式運行測試。
原文轉自:http://www.kuqin.com/shuoit/20130920/335289.html