我正在嘗試使用XCode 7的XCTest UI測試功能來創建樹步行者,該功能可以系統地探索表視圖的確定性樹到指定的深度。它幾乎可以工作,除了我無法可靠地檢測到任何給定元素上的tap是否實際觸發了到新屏幕的轉換。我有一個大部分時間都在使用的hacky方法,它檢測導航欄標籤是否已更改,或者菜單元素數量是否已更改。我的XCode UI測試如何檢測到屏幕已更改?
第一個測試有錯誤的否定,因爲連續的屏幕可以有相同的導航欄標籤(我走的代碼庫不是我的)。第二個測試有誤報,因爲有時點擊一個表格元素不會轉換到另一個表格/屏幕,而是向當前屏幕添加額外的元素。
經過一番閱讀,似乎使用輔助功能標籤可能是一種方式。因此,我在應用程序代碼(viewDidAppear)中爲導航欄的輔助功能標籤設置了UID,然後在UI測試代碼中對其進行測試。感覺這應該是有效的,但我在測試代碼中只回收了零的值。
我會毫不猶豫地承認,當談到UI測試時,我是一個noob,主要是在沒有清楚地理解我在做什麼的情況下剪切/粘貼/修改其他人的代碼。所以我可能會在可訪問標籤代碼本身以及可能在概念級別上發現一些天真的錯誤,以檢測屏幕已經改變;也許有些事情我可以做得更簡單/更習慣。
中的應用:
- (void)viewDidAppear: (BOOL)animated {
[super viewDidAppear: animated];
//...
UINavigationBar* navBar = self.navigationController.navigationBar;
if(navBar)
{
static NSInteger s_UID = 0;
navBar.topItem.accessibilityLabel = [NSString stringWithFormat:@"UID-%ld", s_UID++];
}
}
在XCTest UI測試:
- (NSString*) navBarAccessibilityLabel: (XCUIApplication*) app
{
NSString* result = NULL;
XCUIElementQuery *navBars = app.navigationBars;
XCUIElement* firstElem = [navBars.staticTexts elementBoundByIndex:0];
if(firstElem)
{
result = (NSString*)firstElem.accessibilityLabel; // This is always nil
}
return result;
}
注意firstElem被發現,而且我能夠提取例如firstElem.label非常高興。
任何幫助表示讚賞。
一個偉大的文章ü沒有得到任何解決方案? @Kaitain? –