优化 UI Test 路由直达与会话复用,提升自定义 TabBar 下的稳定性。
新增启动参数直达首页与个人中心页面,引入 AppUITestRouteDriver 与 UITestSession 共享登录,并重构各模块用例的导航断言逻辑。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -18,9 +18,32 @@ enum TabBarNavigator {
|
||||
|
||||
/// 切换到指定 Tab 并等待页面稳定。
|
||||
static func select(_ tab: Tab, app: SuixinkanApp, file: StaticString = #filePath, line: UInt = #line) {
|
||||
let button = app.application.buttons[tab.rawValue]
|
||||
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..<candidates.count {
|
||||
let candidate = candidates.element(boundBy: index)
|
||||
guard candidate.exists else { continue }
|
||||
|
||||
let midY = candidate.frame.midY
|
||||
guard midY > screenHeight * 0.72 else { continue }
|
||||
|
||||
if midY > bestY {
|
||||
bestMatch = candidate
|
||||
bestY = midY
|
||||
}
|
||||
}
|
||||
|
||||
return bestMatch ?? candidates.firstMatch
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user