2017-07-18 29 views
1

在僅包含具有20行的表視圖的應用程序中,它們全部包含文本「單元格X」,X是行的索引,我有以下測試:防止訪問不存在的元素失敗測試

func testTwentyFirstRow() 
{ 
    let cell = XCUIApplication().staticTexts["Cell 20"] 
    let label = cell.label 
    XCTAssert(label == "Cell 20", "Label is not equal to Cell 20") 
} 

此測試失敗,與以下錯誤

No matches found for Find: Elements matching predicate '"Cell 20" IN identifiers' from input {(
    StaticText, 0x60800019b930, traits: 8589934656, label: 'Cell 0', 
    ... 
    StaticText, 0x60800019d740, traits: 8589934656, label: 'Cell 19' 
)} 

第二行是否有任何阻止它失敗存在,但有它失敗的下一行,而不是在那裏我主張的價值標籤?

回答

0

如果您訪問除exists之外的XCUIElement的屬性,框架將嘗試解析導致該元素的查詢,然後檢查它以查找該屬性的值。

如果您在檢查其他任何內容或與它進行交互之前檢查元素exists,則可以處理尚不存在的情況。

if cell.exists { 
    let label = cell.label 
    XCTAssertEqual(label, "text") 
} else { 
    XCTFail("Cell did not exist") 
} 

您沒有失敗,在這一點上的測試,你可以採取行動,以使小區中存在使用循環一直滾動,直到它確實存在,或任何你喜歡的。

+0

但是由於'cell.exists'和'cell.label'是在應用程序的不同狀態下執行的,所以有可能在cell.label執行時單元不再存在。儘管如此,我可能會過分簡化我的問題。我真正的問題是,我有一臺視頻播放器在視頻播放完畢後消失,這使我的測試失敗。 –

+0

它應該是一個近乎即時的檢查,因爲將使用相同的快照來檢查存在和標籤。你能否延長視頻以穩定測試?或者,標籤檢查測試可以很好地作爲單元測試,在那裏你可以模擬未經測試的實體。 – Oletha