优化 UI Test 路由直达与会话复用,提升自定义 TabBar 下的稳定性。
新增启动参数直达首页与个人中心页面,引入 AppUITestRouteDriver 与 UITestSession 共享登录,并重构各模块用例的导航断言逻辑。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -13,10 +13,19 @@ final class SuixinkanApp {
|
||||
private let resetState: Bool
|
||||
|
||||
/// 创建并配置 UI Test 启动参数的应用实例。
|
||||
init(resetState: Bool = false) {
|
||||
init(
|
||||
resetState: Bool = false,
|
||||
openMenuTitle: String? = nil,
|
||||
openProfileRoute: String? = nil
|
||||
) {
|
||||
self.resetState = resetState
|
||||
application = XCUIApplication()
|
||||
UITestLaunchConfiguration.apply(to: application, resetState: resetState)
|
||||
UITestLaunchConfiguration.apply(
|
||||
to: application,
|
||||
resetState: resetState,
|
||||
openMenu: openMenuTitle,
|
||||
openProfile: openProfileRoute
|
||||
)
|
||||
}
|
||||
|
||||
/// 启动 App 并等待首屏稳定。
|
||||
@ -63,8 +72,12 @@ final class SuixinkanApp {
|
||||
|
||||
/// 判断主 Tab 是否已出现。
|
||||
var isOnMainTabs: Bool {
|
||||
application.buttons["首页"].waitForExistence(timeout: 1)
|
||||
|| application.buttons["我的"].waitForExistence(timeout: 1)
|
||||
TabBarNavigator.Tab.allCases.contains { tab in
|
||||
let button = application.buttons.matching(
|
||||
NSPredicate(format: "label == %@", tab.rawValue)
|
||||
).firstMatch
|
||||
return button.waitForExistence(timeout: 1)
|
||||
}
|
||||
}
|
||||
|
||||
/// 等待冷启动后进入登录页或主 Tab。
|
||||
@ -72,7 +85,13 @@ final class SuixinkanApp {
|
||||
if application.staticTexts["login.title"].waitForExistence(timeout: 2) {
|
||||
return
|
||||
}
|
||||
_ = application.buttons["首页"].waitForExistence(timeout: timeout)
|
||||
|| application.buttons["我的"].waitForExistence(timeout: 2)
|
||||
|
||||
let deadline = Date().addingTimeInterval(timeout)
|
||||
while Date() < deadline {
|
||||
if isOnMainTabs {
|
||||
return
|
||||
}
|
||||
RunLoop.current.run(until: Date().addingTimeInterval(0.2))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user