我第一次尝试编写单元测试用例。这里阻止了以下情况。
当我点击一个按钮时,它将导航到下一个屏幕,并且将加载Webview。我需要等待webview加载。
我试图等到下面的代码可以看到staticTexts
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将开始加载。但是,webview内容始终是动态的。所以我需要等到webviewDidFinishLoad。
答案 0 :(得分:1)
如果元素在给定的超时时间内进入存在状态,则可以使用waitForExistence(timeout:)
返回布尔值-我建议您在用例中使用此布尔值。
https://developer.apple.com/documentation/xctest/xcuielement/2879412-waitforexistence
答案 1 :(得分:0)
我建议您编写自己的等待函数,因为使用waitForExistence(timeout:)
时,您只能等待存在,但是它会忽略element(.isHittable
,.isEnabled
等)的其他状态或只需等待其他布尔值即可。
加号waitForExistence(timeout:)
的运行速度非常慢,如果您有很多等待很多的测试(在编写自己的等待之后我们就停止使用它)。这是由系统方法(如果存在)在返回true之前等待另外的1-2s引起的。
这可能会帮助您,但不是Swift,而是ObjC:https://pspdfkit.com/blog/2016/running-ui-tests-with-ludicrous-speed/