Espresso inRoot 弹窗、吐司匹配

739 阅读1分钟

android 弹窗和吐司有很两种:一种基于activity 的window 的弹窗;一种不基于activity window 而基于其他的window 的弹窗。

第一种基于actiivity 的弹窗,他的window 是默认的不需要使用inRoot 方法进行匹配。

第二种就需要使用inRoot 单独进行匹配了:

(打印window type,通常有弹窗有界面的情况下会有两种type)

这里有一个问题,如果吐司的话,是一闪而过,如果没有在正确的时间执行,这段代码可能会报错?(担心是多于的,root 是有一个超时等待机制,在一段的时间内,matchesSafely 没有匹配到window type,也就是返回true 他会一直循环执行匹配逻辑)

完整写法:

还有一个问题,如果吐司是:

先弹的“欢迎你”——>然后再弹“登录成功”。

这时候的代码执行的逻辑:

匹配到了弹窗window ——>匹配控件text 不是“登录成功”——>然后报错了(no matcher)

为了解决一这问题,我写了一个超时等待Utils "TimeoutEspressoUtils",工具类的用处就是,在规定时间内循环匹配我的条件,直到超时结束(里面报错会被crash 掉)。(关于espresso 超时工具,因为运用于腾讯内部项目,不方便公开了,可以私聊我聊聊实现思路)

工具类写法: