vit*_*rmm 8 ios swift xcode-ui-testing swift3
我们最近使用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)
Run Code Online (Sandbox Code Playgroud)
注意: app是XCUIApplication.
这是我们检查它是否被选中的方式:
XCTAssert(cell.isSelected)
Run Code Online (Sandbox Code Playgroud)
另一个观察是我们确定该对象存在,因为waitForExpectations它返回true:
let existsPredicate = NSPredicate(format: "exists = 1")
expectation(for: existsPredicate, evaluatedWith: cell, handler: nil)
waitForExpectations(timeout: 20, handler: nil)
Run Code Online (Sandbox Code Playgroud)
编辑:为了替换isSelected,我尝试使用NSPredicate selected = 1和isSelected = 1.没有用.我也尝试使用acessibilityValue基于其他问题的答案,但它并不那么简单,因为有时我的表视图中的项目是以编程方式选择/取消选择的.此外,该方法涉及向应用程序添加测试代码,这不是一个好习惯.
在BOUNTY END之后编辑:由于没有人能找到解决该问题的解决方案,这显然是Xcode中的一个错误,我已向Apple提交了错误报告.当他们发布带有修复的Xcode版本时,我会在这里发表评论.
小智 6
我做了一些测试和一些研究.您可以查看为此目的创建的应用程序>> here <<.如果你能把它检查出来会很棒(它需要一些工作).还有用于证明其有效的UI测试.此外,还有两个选项,一个是vanilla XCTest,另一个是我与同事AutoMate一起创建的帮助程序库.但那不是重点.
这是我发现的:
1)isSelected财产XCUIElement取决于accessibilityTrait.要在XCTest中选择的元素必须已UIAccessibilityTraitSelected设置.
2)我无法重现你的问题,但我能够控制isSelected财产.
3)是的,它需要一些代码,但如果对你来说很重要,它应该适用于VoiceOver.
所有必需的代码都在您的自定义UITableViewCell子类中.并使用压倒性的UIAccessibilityElement accessibilityTraits财产.
private var traits: UIAccessibilityTraits = UIAccessibilityTraitNone
// MARK: UITableViewCell life cycle
override func awakeFromNib() {
super.awakeFromNib()
traits = super.accessibilityTraits
}
// MARK: UIAccessibilityElement
override var accessibilityTraits: UIAccessibilityTraits {
get {
if isSelected {
return traits | UIAccessibilityTraitSelected
}
return traits
}
set {
traits = newValue
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
1329 次 |
| 最近记录: |