如何在没有静态文本的情况下在 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 中的标题和静态文本

如何在没有文本框的情况下在 Selenium 中上传文件

如何使用 Python 在没有窗口的情况下在屏幕上显示文本

如何在没有 pod 的情况下在 iOS 中设计概述的文本字段

在没有 IP 地址的情况下在 Express 中提供静态文件

如何在不使用outerHTML的情况下在javascript中将标签作为文本? [复制]