我们最近使用 Xcode 8.2.1 (8C1002) 将 Swift 2.3 项目更新为 Swift 3,现在大多数与 tableViews 和 isSelected 属性相关的 UI 测试都不起作用。即使选择了对象,它也始终返回 false(我们可以在 iOS 模拟器中看到它)。
有人遇到过类似的问题吗?在转换之前,我们的代码在 Swift 2.3 中可以正常工作。以下是我们检索 tableView 单元格的方法:
let cell = app.tables.cells.element(at: 4)
Note: app
是一个XCUI应用程序。
这是我们检查是否被选中的方法:
XCTAssert(cell.isSelected)
另一个观察结果是我们确信该物体存在是因为waitForExpectations
返回 true:
let existsPredicate = NSPredicate(format: "exists = 1")
expectation(for: existsPredicate, evaluatedWith: cell, handler: nil)
waitForExpectations(timeout: 20, handler: nil)
EDIT:为了更换isSelected
,我尝试将 NSPredicate 与selected = 1
与isSelected = 1
。没有一个起作用。我也尝试使用acessibilityValue
基于其他问题的答案,但是事情并没有那么简单,因为有时我的表视图中的项目是以编程方式选择/取消选择的。此外,该方法涉及向应用程序添加测试代码,这不是一个好的做法。
赏金结束后编辑:由于没有人能找到该问题的解决方案,而且这显然是 Xcode 中的一个错误,因此我已向 Apple 提交了一份错误报告。当他们发布带有修复程序的 Xcode 版本时,我将在这里发表评论。
额外编辑:在我上次编辑后的一天,dzoanb 给出了一个实用的答案。