XCUITests中,如何等待多个ui元素的存在?
In XCUITests, how to wait for existence of several ui elements?
在 XCode 中执行 UITest 时等待多个 XCUIElement
存在的最佳方法是什么?
我发现此代码有效。我们 运行 一个超时持续时间的循环,在迭代之间等待 1 秒。在每一步中,我们都会检查所有元素是否存在,return 如果存在,则为真,否则继续。
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({ [=10=].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)
在 XCode 中执行 UITest 时等待多个 XCUIElement
存在的最佳方法是什么?
我发现此代码有效。我们 运行 一个超时持续时间的循环,在迭代之间等待 1 秒。在每一步中,我们都会检查所有元素是否存在,return 如果存在,则为真,否则继续。
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({ [=10=].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)