import XCTest final class BookmarkTests: XCTestCase { private let app = XCUIApplication() override func setUpWithError() throws { continueAfterFailure = false } func testBookmarkButtonExistsInToolbar() { app.launchAndOpenSampleBook() app.waitForReader() app.showReaderChromeIfNeeded() let bookmarkButton = app.buttons[IDs.readerBookmark] XCTAssertTrue(bookmarkButton.waitForExistence(timeout: 5), "书签按钮未出现") } func testToggleBookmark() { app.launchAndOpenSampleBook() app.waitForReader() app.showReaderChromeIfNeeded() let bookmarkButton = app.buttons[IDs.readerBookmark] XCTAssertTrue(bookmarkButton.waitForExistence(timeout: 5), "书签按钮未出现") bookmarkButton.tap() Thread.sleep(forTimeInterval: 1) app.showReaderChromeIfNeeded() XCTAssertTrue(bookmarkButton.waitForExistence(timeout: 5), "书签按钮再次点击后未出现") bookmarkButton.tap() } func testBookmarksButtonVisibleAfterBookmarkAdded() { app.launchAndOpenSampleBook() app.waitForReader() app.showReaderChromeIfNeeded() let bookmarkButton = app.buttons[IDs.readerBookmark] XCTAssertTrue(bookmarkButton.waitForExistence(timeout: 5), "书签按钮未出现") bookmarkButton.tap() Thread.sleep(forTimeInterval: 1) app.showReaderChromeIfNeeded() let bookmarksListButton = app.buttons[IDs.readerBookmarks] XCTAssertTrue(bookmarksListButton.waitForExistence(timeout: 5), "书签列表按钮未出现") } func testBookmarksListButtonExists() { app.launchAndOpenSampleBook() app.waitForReader() app.showReaderChromeIfNeeded() let bookmarksListButton = app.buttons[IDs.readerBookmarks] XCTAssertTrue(bookmarksListButton.waitForExistence(timeout: 5), "书签列表按钮未出现") } func testBookmarksPanelIsAccessible() { // 不重置状态,利用已有的持久化书签来测试面板 app.launchAndOpenSampleBook(resetsReaderState: false) app.waitForReader() app.showReaderChromeIfNeeded() // 如果没有书签,先添加一个 let state = app.currentDemoReaderState() if state?.bookmarks == 0 || state?.bookmarks == nil { let bookmarkButton = app.buttons[IDs.readerBookmark] if bookmarkButton.waitForExistence(timeout: 5) { bookmarkButton.tap() RunLoop.current.run(until: Date().addingTimeInterval(1.5)) } } app.showReaderChromeIfNeeded() let bookmarksListButton = app.buttons[IDs.readerBookmarks] XCTAssertTrue(bookmarksListButton.waitForExistence(timeout: 5), "书签列表按钮未出现") // 等待按钮变为可用(有书签时) let enabledPredicate = NSPredicate(format: "isEnabled == true") expectation(for: enabledPredicate, evaluatedWith: bookmarksListButton) waitForExpectations(timeout: 10) bookmarksListButton.tap() let bookmarksPanel = app.tables[IDs.readerBookmarksTable] XCTAssertTrue(bookmarksPanel.waitForExistence(timeout: 5), "书签面板未出现") XCTAssertTrue(app.navigationBars[IDs.readerBookmarksNavBar].waitForExistence(timeout: 2), "书签导航栏未暴露") } }