【问题标题】: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。

【问题讨论】:

    标签: ios swift xctest ios-ui-automation xctestcase


    【解决方案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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 2012-04-14
        相关资源
        最近更新 更多