gpt4 book ai didi

swift - 在 XCUITests 中,如何等待两个 ui 元素中的任何一个存在

转载 作者:可可西里 更新时间:2023-11-01 00:56:09 26 4
gpt4 key购买 nike

看看 XCTWaiter().wait(...) 我相信我们可以使用这段代码等待多重期望变为真

let notHittablePredicate = NSPredicate(format: "hittable == false")
let myExpectation = XCTNSPredicateExpectation(predicate: notHittablePredicate, object: element)
let result = XCTWaiter().wait(for: [myExpectation], timeout: timeout)
//for takes array of expectations

但这在提供的期望中使用了 like AND。有没有办法在提供的期望中进行 OR。

就像我在登录时有一个用例,点击提交后,我想等待两个元素之一。第一个元素是“您已经在另一台设备上登录。如果您继续,您另一台设备上任何未保存的数据都将丢失吗?”。第二个元素是登录后的主屏幕。所以任何人都可以出现。目前我首先等待第一个元素直到超时发生,然后等待第二个元素。但是我想在这里优化时间,只要两个元素中的任何一个存在==true就继续。然后我会检查 element1 是否存在,然后点击是,然后等待主屏幕,否则就断言 element2 存在。

如果问题中有不清楚的地方,请发表评论。谢谢

最佳答案

灵感来自 http://masilotti.com/ui-testing-tdd/ ,您不必依赖 XCTWaiter。您可以简单地运行一个循环并测试其中一个是否存在。

/// Waits for either of the two elements to exist (i.e. for scenarios where you might have
/// conditional UI logic and aren't sure which will show)
///
/// - Parameters:
/// - elementA: The first element to check for
/// - elementB: The second, or fallback, element to check for
/// - Returns: the element that existed
@discardableResult
func waitForEitherElementToExist(_ elementA: XCUIElement, _ elementB: XCUIElement) -> XCUIElement? {
let startTime = NSDate.timeIntervalSinceReferenceDate
while (!elementA.exists && !elementB.exists) { // while neither element exists
if (NSDate.timeIntervalSinceReferenceDate - startTime > 5.0) {
XCTFail("Timed out waiting for either element to exist.")
break
}
sleep(1)
}

if elementA.exists { return elementA }
if elementB.exists { return elementB }
return nil
}

那么你可以这样做:

let foundElement = waitForEitherElementToExist(elementA, elementB)
if foundElement == elementA {
// e.g. if it's a button, tap it
} else {
// element B was found
}

关于swift - 在 XCUITests 中,如何等待两个 ui 元素中的任何一个存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47880395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com