XCTest UI Testing API:
XCUIApplication:理解成容器,所有的元素查找操作都在上進(jìn)行。
XCUIElementQuery:查找方式,查找的結(jié)果是一個(gè)或者多個(gè)XCUIElement,方便之后進(jìn)行操作。
XCUIElement:找到的元素,可以進(jìn)行相關(guān)的操作(點(diǎn)擊,輸入等)。
在上一章,我們利用錄制工具進(jìn)行錄制,并且成功的出現(xiàn)了第一行自動(dòng)化的代碼:
XCUIApplication().tables.buttons["點(diǎn)擊登錄"].tap()

XCUIApplication
對(duì)于XCUIApplication(),自己的理解是,這就是待測(cè)的目標(biāo)APP程序的一個(gè)實(shí)例,所有對(duì)元素的操作都即將此上面進(jìn)行操作。
往上查看,其實(shí)在SetUp階段,已經(jīng)對(duì)XCUIApplication()進(jìn)行了操作,如圖2。

右鍵點(diǎn)擊XCUIApplication(),選擇“Jump to Definition”查看定義,如圖3,可以看到XCUIApplication()有2個(gè)常用的方法launch()和terminate(),如圖4,從名字可以看出,一個(gè)是啟動(dòng)程序,一個(gè)是關(guān)閉程序。


我理解的是APP上的所有元素都為XCUIApplication()底下的子元素。因此當(dāng)需要查找某個(gè)元素進(jìn)行操作或者查看值的時(shí)候,都是從XCUIApplication()出發(fā)進(jìn)行查找。
XCUIElementQuery
XCUIElementQuery的作用,按我的理解,是跟web UI 自動(dòng)化工具selenium里頭 findelementbyXpath(id/css/class)一個(gè)原理,根據(jù)某個(gè)條件去查找當(dāng)前可視頁(yè)面所擁有的元素,返回一個(gè)或多個(gè)元素(XCUIElement)。獲取到一個(gè)的之后,可以直接進(jìn)行操作,多個(gè)的時(shí)候,需要進(jìn)行過濾,找到真正需要的那個(gè),再進(jìn)行操作。
XCUIElementQuery繼承XCUIElementTypeQueryProvider,可以從XCUIElementTypeQueryProvider(圖5)那看到當(dāng)前支持的元素類型,button,table,textfiled等等,以后遇到可疑的元素,可以從這看能不能查到對(duì)應(yīng)的。

XCUIElement
XCUIElement是確確實(shí)實(shí)的元素,可以進(jìn)行相關(guān)操作,用selenium最多的是click和sendkeys,這里用的最多的是tap和typeText,作用是等價(jià)的。IOS由于手機(jī)環(huán)境,有一些額外的動(dòng)作,可以通過右鍵tap,jump to Definition 查看更多的動(dòng)作,比如press(長(zhǎng)按),swipeUp(從下往上劃),swipeLeft(從右往左劃)等等,如圖6。

小結(jié)
做UI自動(dòng)化的入門級(jí)別水平,就是懂得根據(jù)規(guī)則,查找UI上的元素,并且給這些元素發(fā)送一些簡(jiǎn)單指令。了解了這3個(gè)api,基本上就可以控制元素做一些基本的行為了,能看到元素在“自動(dòng)”完成一些事情,感覺也跟“自動(dòng)化”掛鉤了,不是么? :)
下一章從登錄的一個(gè)測(cè)試用例開始,看看需要寫一些什么來完成一條用例。