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
相关产品推荐
相关产品推荐

