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()
}
}
我正在尝试验证 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()
}
}