Files
Reflect/Tests iOS/Screens/OnboardingScreen.swift

79 lines
2.5 KiB
Swift

//
// OnboardingScreen.swift
// Tests iOS
//
// Screen object for the onboarding flow welcome, time, day, style, and subscription screens.
//
import XCTest
struct OnboardingScreen {
let app: XCUIApplication
// MARK: - Screen Elements
var welcomeScreen: XCUIElement { app.element(UITestID.Onboarding.welcome) }
var timeScreen: XCUIElement { app.element(UITestID.Onboarding.time) }
var dayScreen: XCUIElement { app.element(UITestID.Onboarding.day) }
var styleScreen: XCUIElement { app.element(UITestID.Onboarding.style) }
var subscriptionScreen: XCUIElement { app.element(UITestID.Onboarding.subscription) }
var dayTodayButton: XCUIElement { app.element(UITestID.Onboarding.dayToday) }
var dayYesterdayButton: XCUIElement { app.element(UITestID.Onboarding.dayYesterday) }
var subscribeButton: XCUIElement { app.element(UITestID.Onboarding.subscribe) }
var skipButton: XCUIElement { app.element(UITestID.Onboarding.skip) }
// MARK: - Actions
/// Swipe left to advance to the next onboarding page.
func swipeToNext() {
app.swipeLeft()
}
/// Complete the full onboarding flow by swiping through all screens and tapping "Maybe Later".
func completeOnboarding() {
// Welcome -> swipe
if welcomeScreen.waitForExistence(timeout: 5) {
swipeToNext()
}
// Time -> swipe
// Time screen doesn't have a unique identifier, just swipe
swipeToNext()
// Day -> select Today, then swipe
if dayTodayButton.waitForExistence(timeout: 3) {
dayTodayButton.tapWhenReady()
}
swipeToNext()
// Style -> swipe
swipeToNext()
// Subscription -> tap "Maybe Later"
if skipButton.waitForExistence(timeout: 5) {
skipButton.tapWhenReady()
}
}
// MARK: - Assertions
func assertVisible(file: StaticString = #file, line: UInt = #line) {
XCTAssertTrue(
welcomeScreen.waitForExistence(timeout: 5),
"Onboarding welcome screen should be visible",
file: file, line: line
)
}
func assertDismissed(file: StaticString = #file, line: UInt = #line) {
// After onboarding, the tab bar should be visible
let tabBar = app.tabBars.firstMatch
XCTAssertTrue(
tabBar.waitForExistence(timeout: 10),
"Tab bar should be visible after onboarding completes",
file: file, line: line
)
}
}