import XCTest /// 书签 chrome 状态测试 /// 覆盖:书签列表按钮在零书签时禁用、添加后启用、书签跨重启存活 final class BookmarkChromeStateTests: XCTestCase { private let app = XCUIApplication() override func setUpWithError() throws { continueAfterFailure = false } /// 零书签时,底部书签列表按钮应禁用 func testBookmarksListButtonDisabledWhenNoBookmarks() throws { app.launchAndOpenSampleBook() app.waitForReader() app.showReaderChromeIfNeeded() let bookmarksButton = app.buttons[IDs.readerBookmarks] guard bookmarksButton.waitForExistence(timeout: 3) else { throw XCTSkip("书签列表按钮不存在") } // 零书签时按钮应存在但不可用 XCTAssertFalse(bookmarksButton.isEnabled, "零书签时书签列表按钮应禁用") } /// 添加书签后,底部书签列表按钮应启用 func testBookmarksListButtonEnabledAfterAdding() throws { app.launchAndOpenSampleBook() app.waitForReader() app.showReaderChromeIfNeeded() // 添加书签 let bookmarkButton = app.buttons[IDs.readerBookmark] guard bookmarkButton.waitForExistence(timeout: 3) else { throw XCTSkip("书签按钮不存在") } bookmarkButton.tap() // 验证书签列表按钮启用 let bookmarksButton = app.buttons[IDs.readerBookmarks] guard bookmarksButton.waitForExistence(timeout: 3) else { throw XCTSkip("书签列表按钮不存在") } XCTAssertTrue(bookmarksButton.isEnabled, "添加书签后书签列表按钮应启用") } /// 书签跨重启存活 func testBookmarkSurvivesRestart() { app.launchAndOpenSampleBook() app.waitForReader() // 添加书签 app.showReaderChromeIfNeeded() let bookmarkButton = app.buttons[IDs.readerBookmark] bookmarkButton.waitForExistence(timeout: 3) bookmarkButton.tap() // 等待书签状态确认 app.waitForDemoReaderState(timeout: 5, description: "bookmarks=1") { $0.bookmarks == 1 } // 关闭阅读器 app.buttons[IDs.readerBack].tap() // 重新打开(不重置状态) app.launchAndOpenSampleBook(resetsReaderState: false) app.waitForReader() // 验证书签仍然存在 app.waitForDemoReaderState(timeout: 5, description: "bookmarks=1 after restart") { $0.bookmarks == 1 } } }