// // TabBarNavigator.swift // suixinkanUITests // // Created by Codex on 2026/6/26. // import XCTest /// 主 Tab 导航封装。 enum TabBarNavigator { enum Tab: String, CaseIterable { case home = "首页" case orders = "订单" case statistics = "数据" case profile = "我的" } /// 切换到指定 Tab 并等待页面稳定。 static func select(_ tab: Tab, app: SuixinkanApp, file: StaticString = #filePath, line: UInt = #line) { let button = bottomTabButton(named: tab.rawValue, in: app) XCTAssertTrue(button.waitForExistence(timeout: 8), "未找到 Tab:\(tab.rawValue)", file: file, line: line) button.tap() app.waitForGlobalLoadingToDisappear() } /// 在底部自定义 TabBar 中定位唯一可点击的 Tab 按钮。 private static func bottomTabButton(named title: String, in app: SuixinkanApp) -> XCUIElement { let candidates = app.application.buttons.matching(NSPredicate(format: "label == %@", title)) let screenHeight = app.application.windows.element(boundBy: 0).frame.height var bestMatch: XCUIElement? var bestY: CGFloat = -1 for index in 0.. screenHeight * 0.72 else { continue } if midY > bestY { bestMatch = candidate bestY = midY } } return bestMatch ?? candidates.firstMatch } }