第一次尝试编写单元测试用例时。下面是以下场景的阻塞。
当我点击一个按钮时,它会导航到下一个屏幕,并加载网络视图。我需要等待Web视图加载。
我试着等到下面的代码显示静态文本
let rewards = self.app.staticTexts[“Rewards”]
let exists = NSPredicate(format: “exists == 1”)
expectationForPredicate(exists, evaluatedWithObject: rewards, handler: nil)
waitForExpectationsWithTimeout(10, handler: nil)
XCTAssert(rewards.exists)
XCTAssert(app.staticTexts[“Rewards Overview”].exists)
但在我的场景中,当我点击按钮时,它将导航到下一个屏幕,网络视图将开始加载。但是webview的内容总是动态的。所以我需要等到webviewDidFinishLoad。
如果元素在给定的超时内存在,可以使用waitForExistence(timeout:)
返回布尔值-我建议您在用例中使用此方法。
https://developer.apple.com/documentation/xctest/xcuielement/2879412-waitforexistence
我建议您编写自己的等待函数,因为使用waitForExistence(timeout:)
,您只能等待存在,但它会忽略元素的其他状态(.isHittable
、.isEnabled
等(或只是等待任何其他布尔值。
另外,如果你有很多测试需要等待,waitForExistence(timeout:)
的速度会非常慢(我们在编写了自己的等待后就停止使用了(。如果对象存在,则是由于系统方法在返回true之前等待了额外的1-2s。
这可能会对您有所帮助,但它不是Swift,而是ObjC:https://pspdfkit.com/blog/2016/running-ui-tests-with-ludicrous-speed/