在 XCUITests 中,如何等待多个 ui 元素的存在?
Posted
技术标签:
【中文标题】在 XCUITests 中,如何等待多个 ui 元素的存在?【英文标题】:In XCUITests, how to wait for existence of several ui elements? 【发布时间】:2018-10-12 11:51:09 【问题描述】:在 XCode 中进行 UITests 时等待多个 XCUIElement
s 存在的最佳方法是什么?
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:稍微简洁一点的版本:
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
【讨论】:
【参考方案3】:使用可变参数函数:
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)
【讨论】:
以上是关于在 XCUITests 中,如何等待多个 ui 元素的存在?的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 测试实验室是不是支持 iOS XCUITests 附件?
如何通过 .ipa 在 Xcode for iOS 中运行自动化 XCUITests
MFC:如何从主线程使用 MsgWaitForMultipleObjects() 来等待多个线程完成使用 SendMessage()?