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

