import XCTest final class ToolbarStateTests: XCTestCase { private let app = XCUIApplication() override func setUpWithError() throws { continueAfterFailure = false } func testTapContentHidesToolbar() throws { app.launchAndOpenSampleBook() app.waitForReader(timeout: 12) app.showReaderChromeIfNeeded() XCTAssertTrue(app.otherElements[IDs.readerTopToolbar].waitForExistence(timeout: 3), "顶部工具栏应可见") XCTAssertTrue(app.otherElements[IDs.readerBottomToolbar].waitForExistence(timeout: 3), "底部工具栏应可见") app.hideReaderChromeIfNeeded() let backButton = app.buttons[IDs.readerBack] let hidden = !backButton.waitForExistence(timeout: 2) XCTAssertTrue(hidden, "点击内容区后工具栏应隐藏") } func testToolbarShowHideToggle() throws { app.launchAndOpenSampleBook() app.waitForReader(timeout: 12) app.showReaderChromeIfNeeded() XCTAssertTrue(app.buttons[IDs.readerBack].waitForExistence(timeout: 3)) app.hideReaderChromeIfNeeded() app.showReaderChromeIfNeeded() XCTAssertTrue(app.buttons[IDs.readerBack].waitForExistence(timeout: 3)) app.waitForDemoReaderState(timeout: 5, description: "reader=opened") { $0.isOpened } } func testAddHighlightButtonDisabledWithoutSelection() throws { app.launchAndOpenSampleBook() app.waitForReader(timeout: 12) app.showReaderChromeIfNeeded() let addHighlightButton = app.buttons[IDs.readerAddHighlight] XCTAssertTrue(addHighlightButton.waitForExistence(timeout: 3), "标注按钮应存在") let beforeState = app.waitForDemoReaderState(timeout: 3, description: "初始高亮数") { $0.highlights != nil } let highlightsBefore = beforeState.highlights ?? 0 addHighlightButton.tap() let afterState = app.waitForDemoReaderState(timeout: 3, description: "点击后的高亮数") { $0.highlights != nil } let highlightsAfter = afterState.highlights ?? 0 XCTAssertEqual(highlightsAfter, highlightsBefore, "无选区时点击标注按钮不应创建标注") } func testPageCurlSwipeNavigation() throws { app.launchAndOpenSampleBook(displayType: "pagecurl") app.waitForReader(timeout: 12) app.waitForReaderPage(1, timeout: 5) let paging = app.collectionViews[IDs.readerPaging] if paging.waitForExistence(timeout: 5) { paging.swipeLeft() } app.waitForDemoReaderState(timeout: 5, description: "reader=opened") { $0.isOpened } } }