Swift 中的异步 UI 测试
Posted
技术标签:
【中文标题】Swift 中的异步 UI 测试【英文标题】:Asynchronous UI testing in Swift 【发布时间】:2020-05-20 16:52:53 【问题描述】:我在 UI 测试中有一个用于登录应用的按钮。自动化的用户流程是这样的:
-
用户点击按钮
按钮文本从“登录”变为“处理中...”
登录成功后按钮消失
我的 UI 测试代码对于功能测试来说非常简单:
let loginButton = app.buttons["LOG IN"]
let welcomeText = app.staticTexts["Welcome!"]
loginButton.tap()
XCTAssertTrue(welcomeText.waitForExistence(10))
但是,它不会验证按钮将状态更改为“处理中...”。
如果我尝试像这样在代码中进行检查,它不起作用,因为当 UI 测试走过屏幕寻找文本时,它可能已经消失了。
let loginButton = app.buttons["LOG IN"]
let loginButtonProcessingText = app.buttons.staticTexts["Processing..."]
let welcomeText = app.staticTexts["Welcome!"]
loginButton.tap()
XCTAssertTrue(loginButtonProcessingText.exists)
XCTAssertTrue(welcomeText.waitForExistence(10))
所以我的想法是,我需要以某种方式开始检查处理测试同时点击按钮,或者可能在它之前一秒钟。
有没有办法在 XCUI 测试中异步启动这样的检查?
【问题讨论】:
应用流程是什么?Welcome!
文本在哪个控制器中?
您能描述一下您所说的应用程序流是什么意思吗? loginButton 和随后的欢迎文本有不同的控制器。应用流程非常简单:WebView 实例化所有按钮和字段。 loginButton 是一个 webView 按钮 loginButton,点击后开始身份验证,同时将文本更改为“处理中...”
【参考方案1】:
您可以使用expectation 来测试异步任务。 但首先,如果您将步骤分开如下所示,会更清楚;
let loginButton = app.buttons["LOG IN"]
loginButton.tap()
let loginButtonProcessingText = app.buttons.staticTexts["Processing..."]
XCTAssertTrue(loginButtonProcessingText.exists)
let welcomeText = app.staticTexts["Welcome!"]
XCTAssertTrue(welcomeText.waitForExistence(10))
【讨论】:
以上是关于Swift 中的异步 UI 测试的主要内容,如果未能解决你的问题,请参考以下文章