即使元素存在,XCTKVOExpectation也会超时

时间:2017-08-03 12:42:39

标签: swift android-espresso xctest xcode-ui-testing xctestexpectation

我使用的是swift,xcode 8.3.3和XCTest。我正在尝试使用XCTKVOExpectation等待屏幕上存在元素。即使元素存在,它总是返回timedout(2)的结果。

这是我的代码:

func waitForElementToAppear(element: XCUIElement) -> Bool {
    let expectation = XCTKVOExpectation(keyPath: "exists", object: element,
                                        expectedValue: true)

    let result = XCTWaiter().wait(for: [expectation], timeout: 10)
    print(element.exists)
    print(result.rawValue)
    return result == .completed
}

当我打印element.exists时,它打印为true。但是result.rawValue是2(.timedout)增加超时值也没有解决这个问题。

我能够成功使用XCTNSPredicateExpectation:

    let myPredicate = NSPredicate(format: "exists == true")
    let myExpectation = XCTNSPredicateExpectation(predicate: myPredicate,
                                                object: element)

    let result = XCTWaiter().wait(for: [myExpectation], timeout: 10)
    return result == .completed

想知道为什么XCTKVOExpectation无法正常工作?

1 个答案:

答案 0 :(得分:0)

不是真正的答案,但我也在Xcode 9.3.1中看到了这一点。完全相同的谓词组合在许多地方的其他地方运作良好,但特别是几乎总是超时。

我现在通过在发出等待之前检查对象是否存在来解决它,然后也是" result == XCTWaiterResultCompleted || object.exists" (目标C)。

我很想知道这是一个错误还是我做错了什么?