我试着在我的组件上测试一个Text,我可以用不同的 colored颜色 打印它,所以在我的测试中,我验证它是否得到了预期的 colored颜色 .我正在寻找返回 colored颜色 的方法,但没有找到任何方法.

从现在起,我断言文本是正确的,可见性是正确的,但当试图找到获得 colored颜色 的方法时,我变得太深了,我正在寻找一个更简单的解决方案.

composeTestRule.onNode(hasTestTag("testTagForButton"), true)
            .assertExists()
            .assertTextEquals("Testing")

我已经判断过,我可以做大约.fetchSemanticsNode().layoutInfo.getModifierInfo()次才能进入Modifier米,也许从那里我可以得到 colored颜色 ,但可能太多了.我也发现了这个.captureToImage(),也许我可以把 colored颜色 放在上面,但是因为我必须把像素放进go ,所以我决定它不是这个方法.

有什么简单的方法可以做到吗?

推荐答案

我绝对不是编写专家,但只要看一下编写源代码,您就可以利用它们的GetTextLayoutResult个可访问性语义操作.这将包含用于在画布上呈现Text的所有属性.

为了方便起见,我提供了一些快速而肮脏的扩展功能:

fun SemanticsNodeInteraction.assertTextColor(
    color: Color
): SemanticsNodeInteraction = assert(isOfColor(color))

private fun isOfColor(color: Color): SemanticsMatcher = SemanticsMatcher(
    "${SemanticsProperties.Text.name} is of color '$color'"
) {
    val textLayoutResults = mutableListOf<TextLayoutResult>()
    it.config.getOrNull(SemanticsActions.GetTextLayoutResult)
        ?.action
        ?.invoke(textLayoutResults)
    return@SemanticsMatcher if (textLayoutResults.isEmpty()) {
        false
    } else {
        textLayoutResults.first().layoutInput.style.color == color
    }
}

然后可以这样使用:

composeTestRule.onNode(hasTestTag("testTagForButton"), true)
            .assertExists()
            .assertTextEquals("Testing")
            .assertTextColor(Color.Black)

Android相关问答推荐

Android Bundle getSerializable(String?):'可序列化?&# 39、被抛弃了在Java中被弃用

如何使用Jetpack Compose使水平pager 显示离屏页面?

Android 14无法删除已配置的文件

原因平滑滚动的滞后懒惰列在android jetpack compose

我想使用代码自动重命名我的Android存储中的文件夹

Play Google上发布的一款应用的房间数据库迁移

使用lazyColumn迁移paging3的旧代码

当我想使用例如 material3 时,为什么我需要添加对 material 的依赖?底部导航?

我可以从 Android 中的选定文本中获取周围的文本吗?

通过 setIntentScanningStrategyEnabled(true) 未检测到信标的 Android Beacon 库后台扫描

在一个函数中组合相同的流 struct

从 Jetpack Compose 中的 IconButton 中删除黑色色调

compose 导航参数字符串包含花括号?

在 Jetpack Compose 的无状态 Compose 中管理条件逻辑

从活动共享视图模型以使用 hilt 组合函数

Android Studio xml 预览问题无法初始化编辑器

如何在 Jetpack Compose 中更改 ModalNavigationDrawer 的抽屉容器 colored颜色 ?

0dp 大小的可组合文件是否可以组合?

如何从构建的流对象中发出值

如何使 BasicTextField 上的光标以 jetpack compose 为中心?