如何在没有静态文本的情况下在 XCTest 中快速测试 Webview 是不是加载
Posted
技术标签:
【中文标题】如何在没有静态文本的情况下在 XCTest 中快速测试 Webview 是不是加载【英文标题】:How to test Webview is loaded or not without staticTexts in XCTest in swift如何在没有静态文本的情况下在 XCTest 中快速测试 Webview 是否加载 【发布时间】:2018-10-31 10:28:42 【问题描述】:我第一次尝试编写单元测试用例。这是阻止以下情况。
当我点击一个按钮时,它会导航到下一个屏幕并加载 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。
【问题讨论】:
【参考方案1】:如果元素在给定的超时时间内进入存在,您可以使用 waitForExistence(timeout:)
返回布尔值 - 我建议您将其用于您的用例。
https://developer.apple.com/documentation/xctest/xcuielement/2879412-waitforexistence
【讨论】:
【参考方案2】:我建议您编写自己的等待函数,因为使用waitForExistence(timeout:)
,您只能等待存在,但它会忽略元素的其他状态(.isHittable
、.isEnabled
等)或只是等待任何其他布尔值.
加上waitForExistence(timeout:)
的速度非常慢,如果你有很多等待的测试(我们在编写自己的等待后停止使用它)。这是由于系统方法在返回true之前等待额外的1-2s(如果对象存在)引起的。
这可能会对您有所帮助,但它不是 Swift,而是它的 ObjC:https://pspdfkit.com/blog/2016/running-ui-tests-with-ludicrous-speed/
【讨论】:
以上是关于如何在没有静态文本的情况下在 XCTest 中快速测试 Webview 是不是加载的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 XCTest UI 测试区分 iOS 13 中的标题和静态文本
如何在没有 pod 的情况下在 iOS 中设计概述的文本字段