使用XCTest's XCTWaiter
课程,我想查看predicate
,即:
{strong}中的 XCTNSPredicateExpectation 预期中的NSPredicate(format: "hittable == true")
打开
class func wait(for expectations: [XCTestExpectation], timeout seconds: TimeInterval, enforceOrder enforceOrderOfFulfillment: Bool) -> XCTWaiterResult`
我想在多个XCTestExpectation预期中验证此谓词。我认为这是检查特定屏幕上多个元素是否可以访问的最有效方法。
我发现在具有多个预期的数组上使用可命中谓词的组合会导致错误
`Assertion Failure: <unknown>:0: Neither attributes nor error returned`
如果我使用exists谓词,wait(for:timeout:enforceOrder:)
中对一系列期望的验证效果很好。此外,如果期望数组仅包含一个期望值,则验证与可命中的predicate
结合使用可以正常工作。
这是一种测试方法,如果您在 XCTestCase 子类中运行它,则需要将标识符调整为应用中可在屏幕上同时显示的内容:
func testAssertThatMultipleElementsAreHittable() {
let accessibilityIdentifiers = ["lapTimer", "eventTimer", "startButton", "stopButton"]
let predicate = NSPredicate(format: "hittable == true") //fails with hittable, but passes with exists!
var expectations = [XCTNSPredicateExpectation]()
accessibilityIdentifiers.forEach { (identifier) in
expectations.append(XCTNSPredicateExpectation(predicate: predicate, object: XCUIApplication().descendants(matching: .any)[identifier]))
}
let result = XCTWaiter.wait(for: expectations, timeout: 5.0, enforceOrder: false)
if result != .completed {
XCTFail("waiting failed!")
}
}
你知道这里发生了什么吗?