Stabilize UI test suite — 39% → 98%+ pass rate
Fix root causes uncovered across repeated parallel runs: - Admin seed password "test1234" failed backend complexity (needs uppercase). Bumped to "Test1234" across every hard-coded reference (AuthenticatedUITestCase default, TestAccountManager seeded-login default, Tests/*Integration suites, Tests/DataLayer, OnboardingTests). - dismissKeyboard() tapped the Return key first, which races SwiftUI's TextField binding on numeric keyboards (postal, year built) and complex forms. KeyboardDismisser now prefers the keyboard-toolbar Done button, falls back to tap-above-keyboard, then keyboard Return. BaseUITestCase.clearAndEnterText uses the same helper. - Form page-object save() helpers (task / residence / contractor / document) now dismiss the keyboard and scroll the submit button into view before tapping, eliminating Suite4/6/7/8 "save button stayed visible" timeouts. - Suite6 createTask was producing a disabled-save race: under parallel contention the SwiftUI title binding lagged behind XCUITest typing. Rewritten to inline Suite5's proven pattern with a retry that nudges the title binding via a no-op edit when Add is disabled, and an explicit refreshTasks after creation. - Suite8 selectProperty now picks the residence by name (works with menu, list, or wheel picker variants) — avoids bad form-cell taps when the picker hasn't fully rendered. - run_ui_tests.sh uses 2 workers instead of 4 (4-worker contention caused XCUITest typing races across Suite5/7/8) and isolates Suite6 in its own 2-worker phase after the main parallel phase. - Add AAA_SeedTests / SuiteZZ_CleanupTests: the runner's Phase 1 (seed) and Phase 3 (cleanup) depend on these and they were missing from version control.
This commit is contained in:
@@ -10,8 +10,8 @@ private enum DataLayerTestError: Error {
|
||||
/// All tests run against the real local backend via `AuthenticatedUITestCase` with UI-driven login.
|
||||
final class DataLayerTests: AuthenticatedUITestCase {
|
||||
override var needsAPISession: Bool { true }
|
||||
override var testCredentials: (username: String, password: String) { ("admin", "test1234") }
|
||||
override var apiCredentials: (username: String, password: String) { ("admin", "test1234") }
|
||||
override var testCredentials: (username: String, password: String) { ("admin", "Test1234") }
|
||||
override var apiCredentials: (username: String, password: String) { ("admin", "Test1234") }
|
||||
// Tests 08/09 restart the app (testing persistence) — relaunch ensures clean state for subsequent tests
|
||||
override var relaunchBetweenTests: Bool { true }
|
||||
|
||||
@@ -30,7 +30,7 @@ final class DataLayerTests: AuthenticatedUITestCase {
|
||||
let login = LoginScreenObject(app: app)
|
||||
login.waitForLoad(timeout: defaultTimeout)
|
||||
login.enterUsername("admin")
|
||||
login.enterPassword("test1234")
|
||||
login.enterPassword("Test1234")
|
||||
app.buttons[AccessibilityIdentifiers.Authentication.loginButton].waitForExistenceOrFail(timeout: defaultTimeout).forceTap()
|
||||
|
||||
let verificationScreen = VerificationScreen(app: app)
|
||||
|
||||
Reference in New Issue
Block a user