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

Espresso Android测试截图存储问题:无法在设备文件管理器找到截图

问题分析与解决方案

一、定位当前代码生成的截图

你代码里调用的writeToTestStorage如果是基于Android应用私有存储实现的,截图不会直接显示在系统文件管理器的公共目录中,可通过以下方式查找:

  1. 通过Android Studio设备文件管理器查找
    打开Android Studio,依次点击View > Tool Windows > Device File Explorer,导航到应用私有存储路径:

    • 核心私有目录:/data/data/[你的应用包名]/files/ 或 /data/data/[你的应用包名]/cache/
    • 外部私有目录(若代码用到):/sdcard/Android/data/[你的应用包名]/files/
  2. 通过adb命令导出截图
    先确认存储路径后,用adb拉取到本地:

    adb pull /data/data/com.your.package/files/[截图文件名].png ./本地目录/
    

    不确定具体路径时,可先列出应用文件:

    adb shell run-as com.your.package ls -l files/
    

二、修改存储路径到公共目录(直接在文件管理器可见)

如果想让截图直接出现在系统相册或公共文件目录,修改writeToTestStorage方法,将Bitmap保存到公共Pictures目录,示例代码如下:

private void writeToTestStorage(Bitmap bitmap, String fileName) throws IOException {
    // 获取公共图片目录
    File publicPicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File screenshotDir = new File(publicPicDir, "EspressoTestScreenshots");
    if (!screenshotDir.exists()) {
        screenshotDir.mkdirs();
    }
    File outputFile = new File(screenshotDir, fileName + ".png");
    try (FileOutputStream fos = new FileOutputStream(outputFile)) {
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        // 通知系统媒体库更新,确保相册能识别到截图
        MediaScannerConnection.scanFile(
            InstrumentationRegistry.getInstrumentation().getContext(),
            new String[]{outputFile.getAbsolutePath()},
            new String[]{"image/png"},
            null
        );
    }
}

注意权限配置:

  • Android 10及以下,在AndroidManifest.xml添加:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
    
  • Android 11+无需额外权限,公共目录媒体存储API已默认支持。

三、其他自动化测试截图方案

1. 官方AndroidX Test Screenshot库

Google官方提供的截图工具,集成更简洁,支持多场景截图:

  • 添加依赖到模块级build.gradle:
    androidTestImplementation "androidx.test.espresso:espresso-core:3.5.1"
    androidTestImplementation "androidx.test:core:1.5.0"
    androidTestImplementation "androidx.test.ext:junit:1.1.5"
    androidTestImplementation "androidx.test.espresso:espresso-contrib:3.5.1"
    
  • 使用示例:
    @Test
    public void captureScreenWithOfficialLib() throws IOException {
        // 捕获整个屏幕
        ScreenCapture screenCapture = Screenshot.capture();
        // 设置文件名并保存,默认路径为/data/data/[包名]/files/screenshots/
        screenCapture.setName("test_screen_" + nameRule.getMethodName());
        screenCapture.process();
    }
    

2. adb命令直接截图(适合脚本/CI场景)

无需代码集成,直接通过adb命令完成截图与导出:

# 截图保存到设备SD卡
adb shell screencap /sdcard/espresso_test_screenshot.png
# 拉取到本地电脑
adb pull /sdcard/espresso_test_screenshot.png ./本地存储目录/

内容的提问来源于stack exchange,提问作者Malav Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:30:48