新增启动参数直达首页与个人中心页面,引入 AppUITestRouteDriver 与 UITestSession 共享登录,并重构各模块用例的导航断言逻辑。 Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
1.6 KiB
Swift
58 lines
1.6 KiB
Swift
//
|
||
// 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
|
||
}
|
||
}
|