code

2017年11月21日 星期二

iOS test 2 - UI test & XCTest framework

XCode 7的新功能

首先罵一下apple,好少的official tutorial,好爛的documentation!!!
這一點Android好太多!!!!

這在WWDC 2015出現,可以選左邊這個連結觀看影片。

整個UI test架構主要由以下三個classes構成:



XCUIApplication

這是UIApplication的代理人 (proxy),會永遠啟動一個新的process,幫助我們clean app state,XCUIApplication也是所有XCUIElement的最上層,形成一個element hierarchy:




XCUIElement

這是UIApplication中的UI element的代理人。

要找到畫面中的一個XCUIElement,我們需要進行query,其實體化物件為XCUElementQuery。要做任何event synthesis (例如tapping) 或是access property的動作一定要是unique element,否則XCTest不知道要找哪一個才是正確的,所以就會被判定成failure!


XCUIElementQuery

有一個安全測試XCUIElement是否存在的屬性: exists。
使用exists屬性,即便UI element已經不存在,或是非唯一,都不會使得test case被判定成failure。

每個query都會回傳一個set,可能有零到多個elements,可以用subscript operator (e.g. [ ] )來取得:




Relationship Query

1. Descendents (所有在某個ui element下面的ui element):



2. Children (direct descendents):



3. Containment:
這是當一堆無法unique分出來的elements,例如uitableview cell,但是他們subviews會有獨特的元素,就可以query他們的containment relationship,來代表此cell的獨特性。


Filter a query

filter一個傳回來的query:
1. UI type


或者是方便的api:




2. ids: accessibility id / label / title

3. predicates

4. relationship




Query evaluation

算是lazy evaluation,只有當以下情況才會被evaluated:


Event Synthesis

這個就是模擬使用者能做的互動,所有程式通道都是跟真實互動時的通道一樣。

Non-accessible UI Elements

如果發現某些element看得到,但是無法在test case access的話,可能有以下原因:


沒有留言:

張貼留言