2015-12-03 85 views
10

我與UITableViews工作,我想找到對應於細胞內的控制或靜態文本的單元格。找父母或兄弟姐妹和Xcode UI測試

更一般地,一個好辦法找到一個給定元素的父母或兄弟姐妹將是巨大的瞭解。

現在我只是通過細胞循環,直到我找到正確的一個,我想避免的。我試過使用app.tables.cells.containingPredicate,但沒有任何運氣。

let pred = NSPredicate { (element, bindings: [String : AnyObject]?) -> Bool in 
     return element.staticTexts["My Text"].exists 
} 
let cells = app.tables.cells.containingPredicate(pred) 

傳遞給謂詞塊的元素是一個沒有staticTexts的XCElementSnapshot。

編輯

詹姆斯是正確的,containingType:標識符:方法的偉大工程。

在迅速的,它看起來像這樣

let cell = app.tables.cells.containingType(.StaticText, identifier: "My Text") 

凡在方法簽名標識不符合元素的標識屬性,而這僅僅是你會通過短信括號訪問一個元素的常規方式。

app.cells.staticTexts["My Text"] 
+0

我仍然爲什麼'app.cells.staticTexts [「My Text」]'沒有爲你工作。如果字符串「我的文本」屬於任何單元格,則應用程序的可訪問性層次結構的快照將查找該字符串並與之匹配。 'containsType:identifier:'方法創建一個'XCUIElementQuery',這並不意味着這個查詢中的'XCUIElement'確實存在於你的應用中。 – Citronex

+0

app.cells.staticTexts []會還給我一個靜態文本,即的UILabel,而我需要的UITableViewCell,不是標籤 – Alex

+0

我看。糾正我,如果我錯了,但做'let cell = app.tables.cells.containingType(.StaticText,標識符:「我的文本」)'是創建一個XCUIElementQuery,而不是一個XCUIElement,所以你實際上並沒有實例化一個元素在您的應用程序中,只是創建一個查詢可能不存在的元素。如果在控制檯上執行'po app.tables.cells.containingType(.StaticText,identifier:「blah blah」),它將總是返回一個對象,即使它不存在,也不能在一個對象上運行任何斷言XCUIElementQuery,甚至是.exist或.hittable方法來查看你的元素是否真實。 – Citronex

回答

9

您是否嘗試過使用containingType代替containingPredicate?它似乎給你你正在尋找的東西。我對Swift不太熟悉,但在Objective C中,它看起來像這樣:

[app.cells containingType:XCUIElementTypeStaticText identifier:@"My Text"]; 
+0

我認爲在該方法中「標識符」是元素的標識符屬性,感謝校正 – Alex

+0

斯威夫特:'app.cells.staticTexts [「我的文本」]' –

+0

@JoeMasilotti知道爲什麼方法簽名是標識符:,但這不對應於XCUIElement上的標識符屬性? XCUIElementQuery的標識符是括號內的東西嗎? – Alex