UI测试UITableView单元格计数

dam*_*ndd 3 tdd automated-tests uitableview ios xcode-ui-testing

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

XCUIApplication().tables.element.swipeUp()
let count = XCUIApplication().tables.element.children(matching: .cell).count
XCTAssert(count > 0)
Run Code Online (Sandbox Code Playgroud)

断言失败是因为count,即使向上滑动滚动了显然已成功填充的表格视图,该始终为0。我也尝试过:

XCTAssert(app.tables.cells.count > 0)
Run Code Online (Sandbox Code Playgroud)

具有相同的结果。我什至在一个屏幕上创建了一个带有3个静态单元格的表格视图的空项目,以消除UI测试的任何其他可能的干扰,它仍然始终返回0。我正在使用Xcode 9在iOS 11上进行测试。

Cha*_*and 8

单元并不总是注册为单元,这取决于您如何配置可访问性。仔细检查可访问性实际上是否看到了中的单元格Xcode menu -> Open Developer Tool -> Accessibility Inspector

根据您的布局代码,很可能会看到可访问性,staticTexts而不是cells-在这种情况下,您应该声明

XCTAssert(app.tables.staticTexts.count > 0)
Run Code Online (Sandbox Code Playgroud)

如果您要使用单元格,请按照以下步骤配置单元格tableView:cellForItemAtIndexPath

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

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

  • 我已经使用“app.tables.cells.count”很长一段时间了,最​​近它间歇性地停止工作。`cell.isAccessibilityElement = true` 已经帮我解决了这个问题,谢谢。 (2认同)