UI 测试 UITableView 单元格计数

UI Testing UITableView cell count

我正在尝试验证 table 视图在我的 UI 测试中是否填充了一定数量的单元格。这是我的代码:

XCUIApplication().tables.element.swipeUp()
let count = XCUIApplication().tables.element.children(matching: .cell).count
XCTAssert(count > 0)

断言失败,因为 count 始终为 0,即使向上滑动滚动明显已成功填充的 table 视图也是如此。我也试过:

XCTAssert(app.tables.cells.count > 0)

结果相同。我什至在一个屏幕中创建了一个带有 table 视图和 3 个静态单元格的空项目,以消除 UI 测试的任何其他可能的干扰,它仍然总是 returns 0。我正在 iOS 11 和 Xcode 9.

上进行测试

单元格并不总是注册为单元格,具体取决于您如何配置辅助功能。仔细检查可访问性是否确实看到 Xcode menu -> Open Developer Tool -> Accessibility Inspector.

中的单元格

可能看到的辅助功能是 staticTexts 而不是 cells,具体取决于您的布局代码——在这种情况下,您应该断言

XCTAssert(app.tables.staticTexts.count > 0)

如果您需要单元格,请像 tableView:cellForItemAtIndexPath 中那样配置您的单元格:

cell.isAccessibilityElement = true
cell.accessibilityLabel = cell.titleLabel.text // (for example)
cell.accessibilityIdentifier = "MyCellId" // (or whatever you want XCUITest to identify it as)

这会将单元格标记为根可访问项,而不是将单元格的每个子视图都标记为离散元素。

XCUIApplication().tables.children(matching: .cell).count

从 table 视图中删除所有行。使用 Xcode 11.1 编写并使用 SwiftUI 测试。

func deleteAllCellsFromTable() {
    let app = XCUIApplication()
    let tablesQuery = app.tables

    app.navigationBars["Navigation Bar Title"].buttons["Edit"].tap()

    while app.tables.children(matching: .cell).count > 0 {
        let deleteButton = tablesQuery.children(matching: .cell).element(boundBy: 0).buttons["Delete "]
        deleteButton.tap()

        let deleteButton2 = tablesQuery.children(matching: .cell).element(boundBy: 0).buttons["trailing0"]
        deleteButton2.tap()
    }
}