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

Android Compose 仪器化测试中无法检测Toast的问题求助

Android Compose 仪器化测试中无法检测Toast的问题求助

大家好,我最近在做Android Compose的仪器化测试,想要验证Toast是否正确弹出,但遇到了个头疼的问题——明明Toast已经在屏幕上显示出来了,我的测试代码却死活检测不到,最后直接超时失败。我猜大概率是我自定义的Toast Matcher出了问题,想请各位大佬帮忙排查下问题所在。

先说明下我的开发环境:使用Kotlin语言,基于API 36,采用Compose UI进行开发。

下面是我自定义的SimpleToastMatcher代码:

class SimpleToastMatcher : TypeSafeMatcher<Root>() {
    override fun matchesSafely(root: Root): Boolean {
        val type = root.windowLayoutParams.get().type
        if (type == WindowManager.LayoutParams.TYPE_TOAST) {
            return true
        }
        // 针对API 30+可能采用应用层叠窗口的Toast做兼容
        if (type == WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY) {
            return !root.decorView.isFocusable && !root.decorView.isFocusableInTouchMode
        }
        return false
    }

    override fun describeTo(description: Description?) {
        description?.appendText("is toast")
    }
}

对应的测试代码如下:

onView(withText(toastText))
    .inRoot(SimpleToastMatcher())
    .check(matches(isDisplayed()))

我本来期望这个测试能准确验证Toast是否成功显示,但实际情况是,Toast明明在屏幕上正常弹出了,测试却因为无法检测到它而超时失败。有没有朋友遇到过类似的问题?或者能帮我看看我的Matcher逻辑哪里有疏漏吗?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:13:05