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

Android移动端App Espresso UI测试时Chrome停止运行解决方案问询

问题根因

Gradle依赖更新后链接跳转默认唤起System WebView Shell而非Chrome,通常是两类原因导致:

  • 测试依赖(尤其是espresso-intents、uiautomator相关组件)版本更新后,Intent匹配优先级发生变化,优先命中了系统自带的WebView Shell
  • CI环境所用的模拟器镜像没有预装Chrome,WebView Shell是系统默认的http链接 fallback 处理程序

恢复Chrome调用的可行方案

方案1:通过模拟器启动参数配置(最符合你的需求)

操作步骤如下:

  • 更换CI环境的模拟器镜像为带Google APIs/Google Play后缀的官方镜像,这类镜像默认预装Chrome应用(包名com.android.chrome),原生AOSP镜像默认不自带Chrome,仅内置WebView Shell
  • 在模拟器启动脚本中追加配置命令,无需人工交互即可将Chrome设为http/https链接的默认处理程序:
emulator -avd <你的AVD名称> -no-snapshot-load -shell "pm set-app-link --user 0 com.android.chrome always allow http https"

如果你的CI环境的模拟器已经处于运行状态,也可以单独通过adb执行配置命令:

adb shell pm set-app-link --user 0 com.android.chrome always allow http https

配置完成后再运行测试,即可恢复原有Chrome启动逻辑,你之前的waitChrome方法可以换回原com.android.chrome包名校验。

方案2:测试代码中强制指定跳转目标为Chrome

如果不想修改CI环境配置,可以直接在触发http链接跳转的测试逻辑中,强制指定Intent的目标包名为Chrome,从根源避免唤起WebView Shell:

val testUri = Uri.parse("你的测试http链接")
val intent = Intent(Intent.ACTION_VIEW, testUri).apply {
    setPackage("com.android.chrome")
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
// 用应用上下文启动Intent,或者通过Espresso的Intent API传递即可

方案3:回退导致行为变更的依赖版本

你可以排查最近更新的测试相关依赖的版本变动,常见的会影响Intent跳转逻辑的依赖包括:

  • androidx.test.espresso:espresso-intents
  • androidx.test:core
  • androidx.test.uiautomator:uiautomator
    找到最近升级的依赖后,在build.gradle中固定为升级前的可用版本,即可直接恢复原有行为。

内容的提问来源于stack exchange,提问作者chiarotto.alessandro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:06:02