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() app.waitForReader() app.showReaderChromeIfNeeded() let bookmarkButton = app.buttons[IDs.readerBookmark] XCTAssertTrue(bookmarkButton.waitForExistence(timeout: 5), "书签按钮未出现") bookmarkButton.tap() 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) XCTAssertTrue(bookmarksListButton.isEnabled, "书签列表按钮未启用") bookmarksListButton.tap() let bookmarksPanel = app.tables[IDs.readerBookmarksTable] XCTAssertTrue(bookmarksPanel.waitForExistence(timeout: 5), "书签面板未出现") XCTAssertTrue(app.navigationBars[IDs.readerBookmarksNavBar].waitForExistence(timeout: 2), "书签导航栏未暴露") } }