UIAutomation---IOS自動化測試的工具
xcode中自帶的Instuments工具可以用來進行APP的自動化測試, 以及用於進行記憶體洩露, 檔案讀寫操作等的效能分析.
第一部分: 熟悉Instruments的UIAutomation.
首先, 選取xcode->Open Developer Tool->Instruments開啟Instruments工具, 然後在左上角可以選取裝置及被測APP(如下圖):
在這裡, 我選取了iPhone 5s的一個模擬濃ky"/kf/ware/vc/" target="_blank" class="keylink">vcsINLUvLDWrsewseDQtLXE0ru49rzytaW1xNaquvXI1bGoQVBQLjwvcD4KPHA+uNW/qsq8vdO0pVVJQXV0b21hdGlvbrXEu7AsIL2o0unRodTxwrzWxr3Fsb61xLe9yr3AtMrsz6S4w7mkvt+1xMq508MuIMjnz8LNvLXEtdeyv7XEyP249rC0xaW31rHwyseypbfFLCDCvNbGLCDNo9a5LjwvcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20141229/20141229084253128.png"
alt="\">
點選中間的紅色按鈕開始錄製, 錄製過程中, 程式碼框中會實時更新自動化指令碼, 點選停止後, 就錄製成功了一段自動化測試指令碼了. 然後可以點選左邊執行即可看到iPhone 5s模擬器中的執行結果了, 跟錄製的動作是一致的.
?1 |
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
可以看出, 使用UIAutomation對IOS的APP進行自動化測試, 使用的是JavaScript語言.
以上的target, app是建立特定的執行環境, 然後通過app.mainWindow()獲取APP的UIWindow.
也可以通過var navBar = app.navigationBar()來獲取APP的導航欄navigationBar.
使用target.logElementTree()可以建立APP的層級結構樹(類似於Android自動化中的getHierarchyView()方法). 一個簡單的結構如下:
第二部分: 控制元件的獲取及操作
獲取UI控制元件的方法也非常簡便:
?1 2 3 4 |
var tableViews = window.tableViews()
// 可以獲取所有的tableView組成的陣列.
var cells = tableViews[ 0 ].cells()
// 則獲取到第一個tableView中的所有cell元素.
var textFields = window.textFields()
textFields[ 0 ].value()
// 獲取該textField中的值
|
對控制元件的操作如下:
?1 2 3 4 5 6 7 8 9 10 11 |
window.textFields()[ 0 ].setValue( "name" );
// 向textField中填充value.
cells[ 0 ].tap()
// 對某個cell執行tap操作.
target.tap({x:
100 , y: 200 });
// 通過座標執行tap操作
target.doubleTap({x:
100 , y: 200 });
target.twoFingerTap({x:
100 , y: 200 });
// 縮放
target.pinchOpenFromToForDuration({x: 20 , y: 200 }, {x: 300 ,
y: 200 }, 2 );
target.pinchCloseFromToForDuration({x: 20 , y: 200 }, {x: 300 ,
y: 200 }, 2 );
// 拖拽滑動:
target.dragFromToForDuration({x: 160 , y: 200 }, {x: 160 ,
y: 400 }, 1 );
target.flickFromTo({x: 160 , y: 200 }, {x: 160 ,
y: 400 });
|
1 2 3 4 5 6 7 |
var navBar = app.navigationBar();
navBar.leftButton().tap()
var tabBar = app.tabBar();
var selectedTabName = tabBar.selectedButton().name();
if
(selectedTabName != "First" ) {
tabBar.buttons()[ "First" ].tap();
}
|
1 2 3 4 |
UIALogger.logStart( "mainTest" );
UIALogger.logMessage(
"Select the cells"
);
UIALogger.logPass( "PASS" );
UIALogger.logFail( "FAIL" );
|
熟悉了基本的UIAutomation相關的規則之後, 我們就可以來編寫自定義的自動化指令碼了.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var navBar = app.navigationBar();
target.logElementTree();
UIALogger.logStart( "mainTest" );
UIALogger.logMessage(
"Select the cells"
);
var cells = window.tableViews()[ 0 ].cells();
for
(var index in cells) {
// window.tableViews()[0].cells()[0].tap();
UIALogger.logMessage(cells[index]);
cells[index].tap();
navBar.leftButton().tap()
}
|
log欄裡, 會呈現所有的執行結果, 分析起來也是非常方便的.
怎麼樣, 使用起來是不是蠻簡單的. 但是, 在這裡, 只是簡單總結了Instruments中UIAutomation的基本用法, 真正精髓的東西還要自己去慢慢琢磨.
所有的技術都是易學難精, 大家加油.
參考:http://www.2cto.com/kf/201412/365413.html