我使用的是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无法正常工作?
答案 0 :(得分:0)
不是真正的答案,但我也在Xcode 9.3.1中看到了这一点。完全相同的谓词组合在许多地方的其他地方运作良好,但特别是几乎总是超时。
我现在通过在发出等待之前检查对象是否存在来解决它,然后也是" result == XCTWaiterResultCompleted || object.exists" (目标C)。
我很想知道这是一个错误还是我做错了什么?