如何在swift中的XCTest中加载或不加载静态文本来测试Webview



第一次尝试编写单元测试用例时。下面是以下场景的阻塞。

当我点击一个按钮时,它会导航到下一个屏幕,并加载网络视图。我需要等待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/

最新更新