You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose UI测试中如何校验单选按钮的选中状态?

Jetpack Compose 单选按钮组选中状态UI测试方案

核心实现逻辑

selectableGroup修饰符仅用于标记组内互斥的可选状态,没有直接返回整组选中项的测试API,你可以通过官方提供的状态匹配器,对单个选项做选中状态校验,也可以遍历组内元素定位当前选中项。

具体操作步骤

  • 首先给单选组内的每个选项绑定唯一的testTag,方便测试时定位元素,生产代码示例:
Column(Modifier.selectableGroup()) {
    val options = listOf("选项A", "选项B", "选项C")
    var selectedOption by remember { mutableStateOf(options[0]) }
    options.forEach { option ->
        Row(
            Modifier
                .fillMaxWidth()
                .selectable(
                    selected = (option == selectedOption),
                    onClick = { selectedOption = option },
                    role = Role.RadioButton
                )
                // 给每个单选选项绑定唯一测试标签
                .testTag("radio_opt_$option")
                .padding(16.dp)
        ) {
            RadioButton(
                selected = (option == selectedOption),
                onClick = null
            )
            Text(text = option, modifier = Modifier.padding(start = 16.dp))
        }
    }
}
  • 如果要校验某一个选项是否为选中状态,直接调用官方断言方法即可:
// 校验选项B处于选中状态
composeTestRule
    .onNodeWithTag("radio_opt_选项B")
    .assertIsSelected()

// 校验选项A处于未选中状态
composeTestRule
    .onNodeWithTag("radio_opt_选项A")
    .assertIsNotSelected()
  • 如果需要直接获取当前选中的选项值,可以遍历所有选项匹配状态:
val optionList = listOf("选项A", "选项B", "选项C")
val currentSelected = optionList.firstOrNull { opt ->
    try {
        composeTestRule.onNodeWithTag("radio_opt_$opt").assertIsSelected()
        true
    } catch (e: AssertionError) {
        false
    }
}
// currentSelected即为当前选中的选项,单选组规则下不会为空

注意事项

  • 无需给外层selectableGroup绑定测试标签,选中状态是绑定在每个可选子项上的,针对子项做校验即可
  • 如果你的单选点击事件直接绑定在RadioButton组件上,直接给RadioButton绑定testTag做校验即可,不需要修改父布局属性

内容的提问来源于stack exchange,提问作者AName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:39:03