Espresso测试中如何重写ScreenCaptureProcessor的截图保存路径?
修改Espresso截图保存路径的解决方案
嘿,我刚好解决过类似的问题!你说得没错,默认的BasicScreenCaptureProcessor确实会固定截图路径,要改路径的话,我们只需要自定义一个ScreenCapture处理器来替换它就好了,步骤很清晰:
1. 自定义ScreenCaptureProcessor
直接继承默认的BasicScreenCaptureProcessor,重写它的getDestinationDirectory()方法,返回你想要的自定义目录就行。这样既复用了原有逻辑,又能自定义路径:
import android.graphics.Bitmap; import android.os.Environment; import androidx.test.runner.screenshot.BasicScreenCaptureProcessor; import androidx.test.runner.screenshot.ScreenCapture; import java.io.File; import java.io.IOException; public class CustomScreenshotProcessor extends BasicScreenCaptureProcessor { private final File customSaveDir; // 构造方法传入自定义目录 public CustomScreenshotProcessor(File targetDir) { this.customSaveDir = targetDir; // 确保目录存在,不存在就创建 if (!customSaveDir.exists()) { customSaveDir.mkdirs(); } } @Override protected File getDestinationDirectory() throws IOException { // 重写这个方法,返回我们的自定义目录 return customSaveDir; } }
2. 修改你的截图方法,使用自定义处理器
在你原来的captureScreenshot方法里,给ScreenCapture设置我们刚写的自定义处理器就行。比如我这里把截图存到外部存储的MyEspressoScreenshots文件夹里:
private void captureScreenshot(String name) { // 定义自定义保存路径,这里可以改成你想要的任意路径 File customScreenshotDir = new File( Environment.getExternalStorageDirectory(), "MyEspressoScreenshots" ); ScreenCapture capture = Screenshot.capture(); capture.setFormat(Bitmap.CompressFormat.PNG); capture.setName(name); // 关键:设置自定义处理器 capture.setProcessor(new CustomScreenshotProcessor(customScreenshotDir)); try { capture.process(); } catch (IOException ex) { throw new IllegalStateException(ex); } }
3. 注意权限问题
如果你的测试设备是Android 6.0(API 23)及以上,别忘了申请写入外部存储的权限。在测试类里可以用Espresso的权限规则来处理:
@Rule public GrantPermissionRule permissionRule = GrantPermissionRule.grant( Manifest.permission.WRITE_EXTERNAL_STORAGE );
这样一来,你的截图就会乖乖存到你指定的路径里啦!
内容的提问来源于stack exchange,提问作者wpj
相关产品推荐
相关产品推荐

