Swift 中的异步 UI 测试

Asynchronous UI testing in Swift

我在 UI 测试中有一个用于登录应用程序的按钮。自动化的用户流程是这样的:

  1. 用户点击按钮
  2. 按钮文本从 "Log In" 更改为 "Processing..."
  3. 登录成功按钮消失

我的UI测试代码对于功能测试来说非常简单:

let loginButton = app.buttons["LOG IN"]
let welcomeText = app.staticTexts["Welcome!"]
loginButton.tap()
XCTAssertTrue(welcomeText.waitForExistence(10))

但是,它不会验证按钮 将状态更改为 "Processing..."

如果我尝试像这样检查代码,它不起作用,因为当 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 测试中异步启动这样的检查?

您可以使用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))