优化 UI Test 路由直达与会话复用,提升自定义 TabBar 下的稳定性。
新增启动参数直达首页与个人中心页面,引入 AppUITestRouteDriver 与 UITestSession 共享登录,并重构各模块用例的导航断言逻辑。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
57
suixinkanUITests/Support/UITestTapHelper.swift
Normal file
57
suixinkanUITests/Support/UITestTapHelper.swift
Normal file
@ -0,0 +1,57 @@
|
||||
//
|
||||
// UITestTapHelper.swift
|
||||
// suixinkanUITests
|
||||
//
|
||||
// Created by Codex on 2026/6/26.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
|
||||
/// 在 SwiftUI 列表中定位并点击带文案的入口。
|
||||
enum UITestTapHelper {
|
||||
/// 优先点击按钮,其次点击静态文案。
|
||||
static func tapLabel(
|
||||
_ label: String,
|
||||
in app: SuixinkanApp,
|
||||
timeout: TimeInterval = 8,
|
||||
file: StaticString = #filePath,
|
||||
line: UInt = #line
|
||||
) {
|
||||
if let target = findLabel(label, in: app, timeout: timeout) {
|
||||
target.tap()
|
||||
app.waitForGlobalLoadingToDisappear()
|
||||
return
|
||||
}
|
||||
|
||||
app.application.swipeUp()
|
||||
if let target = findLabel(label, in: app, timeout: 2) {
|
||||
target.tap()
|
||||
app.waitForGlobalLoadingToDisappear()
|
||||
return
|
||||
}
|
||||
|
||||
XCTFail("未找到可点击文案:\(label)", file: file, line: line)
|
||||
}
|
||||
|
||||
/// 查找可点击的按钮或文案。
|
||||
private static func findLabel(_ label: String, in app: SuixinkanApp, timeout: TimeInterval) -> XCUIElement? {
|
||||
let button = app.application.buttons[label]
|
||||
if button.waitForExistence(timeout: timeout) {
|
||||
return button
|
||||
}
|
||||
|
||||
let containsButton = app.application.buttons.matching(
|
||||
NSPredicate(format: "label CONTAINS %@", label)
|
||||
).firstMatch
|
||||
if containsButton.waitForExistence(timeout: 2) {
|
||||
return containsButton
|
||||
}
|
||||
|
||||
let text = app.application.staticTexts[label]
|
||||
if text.waitForExistence(timeout: 2) {
|
||||
return text
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user