Swift 中的异步 UI 测试
Asynchronous UI testing in Swift
我在 UI 测试中有一个用于登录应用程序的按钮。自动化的用户流程是这样的:
- 用户点击按钮
- 按钮文本从 "Log In" 更改为 "Processing..."
- 登录成功按钮消失
我的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))
我在 UI 测试中有一个用于登录应用程序的按钮。自动化的用户流程是这样的:
- 用户点击按钮
- 按钮文本从 "Log In" 更改为 "Processing..."
- 登录成功按钮消失
我的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))