swift - 防止访问不存在的元素导致测试失败

标签 swift xctest xcode-ui-testing

在一个只包含 20 行 TableView 的应用程序中,所有这些都包含文本“Cell 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'
)}

是否有任何方法可以防止它在那里失败,但让它在下一行而不是我断言标签值的地方失败?

最佳答案

如果您访问 XCUIElement 的属性而不是 exists,框架将尝试解析导致该元素的查询,然后检查它以找到该属性的值。

如果您在检查任何其他元素或与其交互之前检查元素存在,则可以处理该元素尚不存在的情况。

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

此时您不必通过测试,您可以采取行动使单元格存在,使用循环继续滚动直到它确实存在,或者您喜欢的任何方式。

关于swift - 防止访问不存在的元素导致测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45157465/

相关文章:

ios - 在下次运行之前以后台模式关闭应用程序

unit-testing - 如何在 Swift 中对 NSFetchedResultsController 进行单元测试

iOS UITests - 检测是否有任何 XCUIElement 在当前运行中被点击过

ios - Xcode 用户界面测试 : simulator not visible while test running

ios - UI 测试失败 - 获取元素快照失败错误 -25201

ios - 如何在异步图像下载和调整图像高度后更新 tableview 单元格

swift - 如何使用 google 登录 sdk 在 UIButton 而不是 UIView 中实现 google 登录?

ios - 如何从 Swift 中的日期获取星期几

ios - 使用 CocoaPods 为 iOS 设置 OCMock

ios - 为什么 UIView 在手动实例化到模拟 UIViewController 后为 nil?