【发布时间】:2018-10-12 11:51:09
【问题描述】:
在 XCode 中进行 UITests 时等待多个 XCUIElements 存在的最佳方法是什么?
【问题讨论】:
在 XCode 中进行 UITests 时等待多个 XCUIElements 存在的最佳方法是什么?
【问题讨论】:
我发现这段代码可以正常工作。我们运行一个循环超时持续时间,在迭代之间等待 1 秒。在每一步我们检查所有元素是否存在,如果存在则返回 true,否则继续。
func waitForExistenceOfAll(elements: [XCUIElement], for timeout: TimeInterval) -> Bool {
guard elements.count > 0 else {
return true
}
let startTime = NSDate.timeIntervalSinceReferenceDate
while (NSDate.timeIntervalSinceReferenceDate - startTime <= timeout) {
var allExist = true
for element in elements {
if !element.exists {
allExist = false
break
}
}
if allExist {
return true
}
sleep(1)
}
return false
}
【讨论】:
稍微简洁一点的版本:
func waitForExistenceOfAll(elements: [XCUIElement], for timeout: TimeInterval) -> Bool {
for _ in 0 ... Int(timeout) {
if elements.filter({ $0.exists == false }).isEmpty {
return true
}
Thread.sleep(forTimeInterval: 1)
}
return false
}
【讨论】:
使用可变参数函数:
public func exists(_ elements: XCUIElement..., timeout: TimeInterval = 5.0) -> Bool {
for element in elements {
if !element.waitForExistence(timeout: timeout) {
return false
}
}
return true
}
用法:
exists(el1, el2, el3)
【讨论】: