看這個簡單的小栗子,操作流程:找到tabbar->找到名稱是“First”的button點擊->給第一個textField設值->點擊鍵盤的return->取id是“RecipeName”的staticTexts(label)的值->斷言該label內容和之前輸入內容的相等。
可以看出尋找控件的兩種方式:依據控件Accessibility identitifer查找;依據控件在數組的下標查找。前者需要你去設置,增加開發時成本。后者的變化性高,UI層級改變導致你的用例改變。
test("Test 1", function(target, app) {
target.logDevice();
var window = app.mainWindow();
app.logElementTree();
//-- select the elements
UIALogger.logMessage( "Select the first tab" );
var tabBar = app.tabBar();
var selectedTabName = tabBar.selectedButton().name();
if (selectedTabName != "First") {
tabBar.buttons()["First"].tap();
}
//-- tap on the text fiels
UIALogger.logMessage( "Tap on the text field now" );
var recipeName = "Unusually Long Name for a Recipe";
window.textFields()[0].setValue(recipeName);
target.delay( 2 );
//-- tap on the text fiels
UIALogger.logMessage( "Dismiss the keyboard" );
app.logElementTree();
app.keyboard().buttons()["return"].tap();
var textValue = window.staticTexts()["RecipeName"].value();
assertEquals(recipeName, textValue);
});
這里有篇詳細的教程,如果想要UIAutomation的表現可以下載一個Xcode 7來跑一跑。Demo請戳我
UITest是Apple隨著Xcode 7和iOS 9新的UI自動化測試框架。較之前不同的是,在UITest框架下,我們可以使用自己熟悉的Objc和Swift語言來編寫自動化測試的腳本。除此之外,UITest最大的亮點是支持屏幕錄制——通過對App的操作自動生成相應的測試腳本代碼。這意味著非專業人士,也可以很方便地參與到自動化測試里來。
原理和UIAutomation一樣,UITest也依賴控件的Accessibility屬性,UITest為所有UIKit控件提供了一個XCUI開頭的代理類。比如UIApplication,對應的是XCUIApplication,在 UI Testing 中代表整個 app 的對象。
對于一般的UIKit對象,Apple提供XCUIElement對象作為映射。我們不能直接通過得到的 XCUIElement 來直接訪問被測 app 中的元素,而只能通過 Accessibility 中的像是 identifier 或者 frame 這樣的屬性來獲取 UI 的信息。關于具體的可用屬性,可以參看 XCUIElementAttributes 的文檔。雖然不能直接通過Element得到屬性,但是可以通過- descendantsMatchingType:
,訪問子節點,從而得到層級結構。
hello world和屏幕錄制操作,可以參考喵大的筆記,附有demo哦。
UITest支持iOS開發熟悉的編程語言、屏幕錄制等多項強大功能,但這些都是和Xcode這個IDE綁定的。當我們在Xcode里寫完代碼,本地運行,這種種更像是單元測試,而沒有太多自動化的味道了。一段真正的自動化測試腳本,應該和被測代碼分開,能夠部署到一臺服務器上自動運行,讓一項自動化測試真正自動化起來,成為了我的小目標3.0版本。在這里,Appium這個強大的自動化測試工具登場了,看看他的自我介紹。
Appium 是一個開源的,跨平臺的自動化測試工具。 它支持模擬器(iOS,FirefoxOS,Android)和真機(iOS, Android, FirefoxOS)上的原生應用,混合應用和移動 web 應用。
原文轉自:http://www.jianshu.com/p/aae160cb9cc4