From af6275fd70b1eea248008511b27977d0d7ab8d10 Mon Sep 17 00:00:00 2001 From: Dan Fabulich Date: Sun, 29 Mar 2026 18:21:51 -0700 Subject: [PATCH 1/2] Add test tag to TabView --- Sources/SkipUI/SkipUI/Containers/TabView.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Sources/SkipUI/SkipUI/Containers/TabView.swift b/Sources/SkipUI/SkipUI/Containers/TabView.swift index 52b3d6c0..09826cda 100644 --- a/Sources/SkipUI/SkipUI/Containers/TabView.swift +++ b/Sources/SkipUI/SkipUI/Containers/TabView.swift @@ -55,6 +55,9 @@ import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.geometry.Rect import androidx.compose.ui.layout.boundsInWindow import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.navigation.NavHostController @@ -257,6 +260,7 @@ public struct TabView : View, Renderable { bottomBarTopPx.value = bounds.top bottomBarHeightPx.value = bounds.bottom - bounds.top } + .semantics { testTagsAsResourceId = true }.testTag("skip_ui_automation_tab_bar") let tint = EnvironmentValues.shared._tint let hasColorScheme = reducedTabBarPreferences.colorScheme != nil let isSystemBackground = reducedTabBarPreferences.isSystemBackground == true @@ -336,7 +340,7 @@ public struct TabView : View, Renderable { if let updateOptions = EnvironmentValues.shared._material3NavigationBar { options = updateOptions(options) } - NavigationBar(modifier: options.modifier, containerColor: options.containerColor, contentColor: options.contentColor, tonalElevation: options.tonalElevation) { + NavigationBar(modifier: options.modifier.semantics { testTagsAsResourceId = true }.testTag("skip_ui_automation_tab_bar"), containerColor: options.containerColor, contentColor: options.contentColor, tonalElevation: options.tonalElevation) { for tabIndex in 0.. Date: Sat, 28 Mar 2026 21:24:39 -0700 Subject: [PATCH 2/2] Add test tag to SearchField --- Sources/SkipUI/SkipUI/Commands/Search.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Sources/SkipUI/SkipUI/Commands/Search.swift b/Sources/SkipUI/SkipUI/Commands/Search.swift index bb238111..cfab3cce 100644 --- a/Sources/SkipUI/SkipUI/Commands/Search.swift +++ b/Sources/SkipUI/SkipUI/Commands/Search.swift @@ -29,7 +29,10 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch @@ -130,7 +133,7 @@ let searchFieldHeight = 56.0 let isFocused = remember { mutableStateOf(false) } OutlinedTextField(value: state.text.wrappedValue, onValueChange: { state.text.wrappedValue = $0 - }, modifier: Modifier.weight(Float(1.0)).focusRequester(focusRequester).onFocusChanged { + }, modifier: Modifier.weight(Float(1.0)).semantics { testTagsAsResourceId = true }.testTag("skip_ui_automation_search_field").focusRequester(focusRequester).onFocusChanged { if $0.isFocused { state.isSearching.value = true }