优化 UI Test 路由直达与会话复用,提升自定义 TabBar 下的稳定性。
新增启动参数直达首页与个人中心页面,引入 AppUITestRouteDriver 与 UITestSession 共享登录,并重构各模块用例的导航断言逻辑。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
69
suixinkanUITests/Support/UITestSession.swift
Normal file
69
suixinkanUITests/Support/UITestSession.swift
Normal file
@ -0,0 +1,69 @@
|
||||
//
|
||||
// UITestSession.swift
|
||||
// suixinkanUITests
|
||||
//
|
||||
// Created by Codex on 2026/6/26.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
|
||||
/// 全套件共享的已登录 App 会话,避免每个测试类重复冷启动登录。
|
||||
enum UITestSession {
|
||||
private static var sharedApp: SuixinkanApp?
|
||||
|
||||
/// 获取或创建已登录 App 实例。
|
||||
static func app(file: StaticString = #filePath, line: UInt = #line) throws -> SuixinkanApp {
|
||||
if let sharedApp {
|
||||
if sharedApp.application.state != .runningForeground {
|
||||
sharedApp.launch()
|
||||
}
|
||||
return sharedApp
|
||||
}
|
||||
|
||||
let launched = try UITestAuthenticatedSession.launchLoggedIn(file: file, line: line)
|
||||
sharedApp = launched
|
||||
return launched
|
||||
}
|
||||
|
||||
/// 以指定首页菜单直达参数重启 App,并复用 Keychain 登录态。
|
||||
@discardableResult
|
||||
static func relaunch(
|
||||
openMenu menuTitle: String,
|
||||
file: StaticString = #filePath,
|
||||
line: UInt = #line
|
||||
) throws -> SuixinkanApp {
|
||||
sharedApp?.application.terminate()
|
||||
|
||||
let relaunched = try UITestAuthenticatedSession.launchLoggedIn(
|
||||
openMenuTitle: menuTitle,
|
||||
file: file,
|
||||
line: line
|
||||
)
|
||||
sharedApp = relaunched
|
||||
return relaunched
|
||||
}
|
||||
|
||||
/// 以指定个人中心路由直达参数重启 App,并复用 Keychain 登录态。
|
||||
@discardableResult
|
||||
static func relaunch(
|
||||
openProfile route: String,
|
||||
file: StaticString = #filePath,
|
||||
line: UInt = #line
|
||||
) throws -> SuixinkanApp {
|
||||
sharedApp?.application.terminate()
|
||||
|
||||
let relaunched = try UITestAuthenticatedSession.launchLoggedIn(
|
||||
openProfileRoute: route,
|
||||
file: file,
|
||||
line: line
|
||||
)
|
||||
sharedApp = relaunched
|
||||
return relaunched
|
||||
}
|
||||
|
||||
/// 登录冒烟等用例清空本地状态后,使共享会话失效。
|
||||
static func invalidate() {
|
||||
sharedApp?.application.terminate()
|
||||
sharedApp = nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user