Replace brittle localized-string selectors and broken wait helpers with a robust, identifier-first UI test infrastructure. All 41 UI tests pass on iOS 26.2 simulator (iPhone 17). Foundation: - BaseUITestCase with deterministic launch helpers (launchClean, launchOffline) - WaitHelpers (waitUntilHittable, waitUntilGone, tapWhenReady) replacing sleep() - UITestID enum mirroring AccessibilityIdentifiers from the app target - Screen objects: TabBarScreen, CameraScreen, CollectionScreen, TodayScreen, SettingsScreen, PlantDetailScreen Key fixes: - Tab navigation uses waitForExistence+tap instead of isHittable (unreliable in iOS 26 simulator) - Tests handle real app state (empty collection, no camera permission) - Increased timeouts for parallel clone execution - Added NetworkMonitorProtocol and protocol-typed DI for testability - Fixed actor-isolation issues in unit test mocks Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
28 lines
872 B
Swift
28 lines
872 B
Swift
//
|
|
// XCUIApplication+Launch.swift
|
|
// PlantGuideUITests
|
|
//
|
|
// Launch configuration keys shared between BaseUITestCase and direct XCUIApplication usage.
|
|
//
|
|
|
|
import XCTest
|
|
|
|
// MARK: - Launch Configuration Keys
|
|
|
|
/// Keys for launch arguments and environment variables.
|
|
/// Consumed by the app's bootstrap code to set up test fixtures.
|
|
enum LaunchConfigKey {
|
|
// Launch arguments
|
|
static let uiTesting = "-UITesting"
|
|
static let cleanState = "-CleanState"
|
|
static let mockData = "-MockData"
|
|
static let offlineMode = "-OfflineMode"
|
|
static let skipOnboarding = "-SkipOnboarding"
|
|
|
|
// Environment variable keys
|
|
static let isUITesting = "IS_UI_TESTING"
|
|
static let useMockData = "USE_MOCK_DATA"
|
|
static let isOfflineMode = "IS_OFFLINE_MODE"
|
|
static let mockAPIResponseDelay = "MOCK_API_RESPONSE_DELAY"
|
|
}
|