2016-02-24 59 views
2

這是使用Xcode 7.2.1和Swift 2.0。Xcode UITesting:標籤從層次結構中消失,不會回來

我有一個表單元格,其中包含用於顯示錯誤消息的UILabel。因此,在最初的負載是使用這樣的代碼空白:

cell.errorLabel.alpha = 0.0 
cell.errorLabel.text = nil 

再後來當我發現一個錯誤的我要顯示我這樣做:

cell.label.text = "to" 
cell.errorLabel.alpha = 1.0 
cell.errorLabel.text = "Error !!!!" 

這在運行時正常工作應用程序。但是,在UI測試中運行時,我嘗試測試顯示錯誤是這樣的:

let toCell = XCUIApplication().tables.... // Finds the cell with label 'to' 
XCTAssertTrue(toCell.staticTexts["Error !!!!"].exists) 

並且失敗。我已經通過檢查其他('到')標籤存在,證實我獲得了正確的單元格。它是什麼。但UI測試不會看到錯誤標籤。我已經加入了破發點,並使用調試器這樣的測試這樣的:

(lldb) p toCell.staticTexts.count 
    t = 427.03s  Get number of matches for: Descendants matching type StaticText 
    t = 427.29s   Snapshot accessibility hierarchy for enterprise.com.me 
    t = 427.31s   Find: Descendants matching type Table 
(UInt) $R2 = 1 
    t = 427.31s   Find: Descendants matching type Cell 
    t = 427.32s   Find: Elements containing elements matching type StaticText with identifier 'to' 
    t = 427.32s   Find: Descendants matching type StaticText 

(UInt) $R2 = 1表明有一個靜態文本存在。然而看着模擬器,我可以清楚地看到兩個UILabel。

我已經嘗試了許多事情來單獨分離問題 - 只使用alpha或將文本設置爲nil或使用UIView的hidden屬性。無論我嘗試什麼,使用這些選項中的任何一個來初始隱藏標籤都會使其在UI測試中不可見,以便日後可見。

我很困惑,我懷疑這是一個錯誤。任何人有任何想法如何讓UI測試看到UILabel一旦我使它可見?

P.S.我也嘗試使用等待循環等待標籤出現(使用expectationForPredicate(...),但UILabel尚未顯示。

+0

告訴標籤你很抱歉,也許她會回來;) –

+0

嘗試將cell.labelText.text = nil替換爲cell.labelText.text =「」 –

+0

您可能不得不使用'waitForExpectationsWithTimeout'來等待標籤出現。即您可能會發現應用程序與測試之間的競爭條件。 – Michael

回答

0

問題竟然是我沒有在單元格上設置accessibilityElements屬性。可訪問性是有問題試圖找出什麼在每一個。

所以,如果你正在構建自定義的細胞表視圖,確保您設置accessibilityElements屬性,以使測試能夠找到單元格的內容。