Files
suixinkan_ios_new/suixinkanUITests/Support/NavigationAssertions.swift
汉秋 aac8458b04 优化 UI Test 路由直达与会话复用,提升自定义 TabBar 下的稳定性。
新增启动参数直达首页与个人中心页面,引入 AppUITestRouteDriver 与 UITestSession 共享登录,并重构各模块用例的导航断言逻辑。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-26 11:25:36 +08:00

100 lines
3.0 KiB
Swift

//
// NavigationAssertions.swift
// suixinkanUITests
//
// Created by Codex on 2026/6/26.
//
import XCTest
///
enum NavigationAssertions {
///
@discardableResult
static func waitForNavigationTitle(
_ title: String,
in app: SuixinkanApp,
timeout: TimeInterval = 12,
file: StaticString = #filePath,
line: UInt = #line
) -> Bool {
let deadline = Date().addingTimeInterval(timeout)
while Date() < deadline {
if app.application.navigationBars[title].exists {
return true
}
let topBar = app.application.navigationBars.element(boundBy: 0)
if topBar.staticTexts[title].exists {
return true
}
if app.application.staticTexts[title].exists {
return true
}
RunLoop.current.run(until: Date().addingTimeInterval(0.2))
}
XCTAssertTrue(false, "未找到导航标题:\(title)", file: file, line: line)
return false
}
///
@discardableResult
static func waitForAnyNavigationTitle(
_ titles: [String],
in app: SuixinkanApp,
timeout: TimeInterval = 12,
file: StaticString = #filePath,
line: UInt = #line
) -> String? {
let deadline = Date().addingTimeInterval(timeout)
while Date() < deadline {
for title in titles {
if app.application.navigationBars[title].exists {
return title
}
let topBar = app.application.navigationBars.element(boundBy: 0)
if topBar.staticTexts[title].exists {
return title
}
if app.application.staticTexts[title].exists {
return title
}
}
RunLoop.current.run(until: Date().addingTimeInterval(0.2))
}
XCTFail("未找到任一导航标题:\(titles.joined(separator: " / "))", file: file, line: line)
return nil
}
///
@discardableResult
static func waitForStaticText(
_ text: String,
in app: SuixinkanApp,
timeout: TimeInterval = 8,
file: StaticString = #filePath,
line: UInt = #line
) -> Bool {
let label = app.application.staticTexts[text]
let exists = label.waitForExistence(timeout: timeout)
XCTAssertTrue(exists, "未找到文案:\(text)", file: file, line: line)
return exists
}
/// Loading
static func assertNotStuckOnLoading(
app: SuixinkanApp,
file: StaticString = #filePath,
line: UInt = #line
) {
let loading = app.application.staticTexts["加载中"]
XCTAssertFalse(loading.exists, "页面不应长期停留在全局 Loading。", file: file, line: line)
}
}