我想让测试暂停,等待元素出现在屏幕上,然后再继续。
我看不出有什么好办法来创造一种期望,然后等待使用
public func waitForExpectationsWithTimeout(timeout: NSTimeInterval, handler: XCWaitCompletionHandler?)
我一直使用的创造期望的方法是
public func expectationForPredicate(predicate: NSPredicate, evaluatedWithObject object: AnyObject, handler: XCPredicateExpectationHandler?) -> XCTestExpectation
但是这需要一个已经存在的元素,而我希望测试等待一个还不存在的元素。
有人知道最好的方法吗?
6条答案
按热度按时间a5g8bdjr1#
在
expectationForPredicate(predicate: evaluatedWithObject: handler:)
中,你并没有给予一个实际的对象,而是给出了一个在视图层次结构中找到它的查询。查看UI测试备忘录和从标题生成的文档(目前还没有官方文档),所有这些都是由Joe Masilotti编写的。
5lwkijsr2#
这个问题是关于Swift2的,但它仍然是2019年的热门搜索结果,所以我想给予一个最新的答案。
Xcode 9.0+的
waitForExistence
让事情变得简单了一些:Web视图示例:
xdyibdwo3#
你可以在Swift 3中使用它
在Xcode 9、iOS 11中,您可以使用新的API
waitForExistence
holgip5t4#
它不接受已经存在的元素,只需要定义下面的 predicate :
let exists = NSPredicate(format: "exists = 1")
然后在你的期望中使用这个 predicate ,当然,等待你的期望。
anauzrmj5#
对于Xcode 8.3及更高版本,您可以使用新类
XCTWaiter
等待预期,示例测试如下所示:Read the documentation以获取更多信息。
ar7v8xwq6#
基于onmyway133 code我想出了扩展(Swift 3.2):
因此,在调用站点上,您可以用途: