// // CameraScreen.swift // PlantGuideUITests // // Screen object for the Camera tab. // import XCTest struct CameraScreen { let app: XCUIApplication // MARK: - Elements var captureButton: XCUIElement { app.buttons[UITestID.Camera.captureButton] } var permissionDeniedView: XCUIElement { app.otherElements[UITestID.Camera.permissionDeniedView] } var openSettingsButton: XCUIElement { app.buttons[UITestID.Camera.openSettingsButton] } var previewView: XCUIElement { app.otherElements[UITestID.Camera.previewView] } // MARK: - State Checks /// Returns `true` if any valid camera state is visible (authorized, denied, or requesting). func hasValidState(timeout: TimeInterval = 5) -> Bool { captureButton.waitForExistence(timeout: timeout) || permissionDeniedView.waitForExistence(timeout: 2) // Fallback: look for any text that hints at camera permission || app.staticTexts.matching( NSPredicate(format: "label CONTAINS[c] 'camera'") ).firstMatch.waitForExistence(timeout: 2) } // MARK: - Actions func tapCapture() { captureButton.tapWhenReady() } }