【发布时间】:2017-03-21 18:48:46
【问题描述】:
我们最近使用 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)
注意:app 是一个 XCUIApplication。
下面是我们检查它是否被选中的方法:
XCTAssert(cell.isSelected)
另一个观察结果是,我们确定对象存在是因为 waitForExpectations 正在返回 true:
let existsPredicate = NSPredicate(format: "exists = 1")
expectation(for: existsPredicate, evaluatedWith: cell, handler: nil)
waitForExpectations(timeout: 20, handler: nil)
编辑:为了替换isSelected,我尝试将NSPredicate 与selected = 1 和isSelected = 1 一起使用。没有工作。我还尝试根据其他问题的答案使用acessibilityValue,但这并不是那么简单,因为有时我的表格视图中的项目是通过编程方式选择/取消选择的。此外,该方法涉及向应用程序添加测试代码,这不是一个好的做法。
悬赏结束后编辑:由于没有人能找到解决该问题的方法,而这显然是 Xcode 中的一个错误,我已向 Apple 提交了一份错误报告。当他们发布带有修复的 Xcode 版本时,我会在这里发表评论。
额外编辑:在我上次编辑后的一天,dzoanb 提供了一个实用的答案。
【问题讨论】:
标签: ios swift swift3 xcode-ui-testing