Espresso Intent匹配器不匹配:URL校验导致测试失败
问题原因及解决方案
你的问题出在hasData的精确匹配逻辑上:
- 你用
hasData(Uri.parse("http://www.ya.ru/"))要求Intent的Data必须和这个Uri完全一致,但从日志里的Intent { act=android.intent.action.VIEW dat=http://www.ya.ru/... }能看出来,实际触发的URL末尾带有省略的内容(可能是路径、参数或者斜杠后的其他字符),和你写的精确Uri不匹配,所以整个allOf条件不成立,测试失败。
要校验URL正确性,同时适配实际的URL格式,可以换成模糊匹配的方式:
用hasDataMatching配合正则表达式,匹配URL的核心前缀部分,示例代码:
intended(allOf( hasAction(Intent.ACTION_VIEW), hasDataMatching(Regex("^http://www\\.ya\\.ru(/.*)?$")), toPackage("com.android.chrome"), ))
这个正则会匹配所有以http://www.ya.ru开头的URL,不管后面有没有额外的路径或参数。
如果之后你能确定完整的目标URL,也可以直接把完整的Uri传入hasData,但用正则的方式更灵活,能适配URL带动态内容的场景。
内容的提问来源于stack exchange,提问作者FrBr
相关产品推荐
相关产品推荐

