如何使用谓词检查XCTest

时间:2017-05-22 14:55:42

标签: ios swift xctest xcode-ui-testing

使用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!")
    }
}

你知道这里发生了什么吗?

0 个答案:

没有答案