在XCode中执行UITest时,等待多个XCUIElement
存在的最佳方法是什么?
答案 0 :(得分:1)
我发现此代码有效。我们为超时时间运行一个循环,在两次迭代之间等待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
}
答案 1 :(得分:0)
更简洁的版本:
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
}
答案 2 :(得分:0)
也请检查以下内容:https://pspdfkit.com/blog/2016/running-ui-tests-with-ludicrous-speed/
您基本上可以将其用作等待任何东西,这将给您Bool
作为回报(多种条件等)
答案 3 :(得分:0)
使用可变参数函数:
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)