微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Espresso测试中使用Firebase ScreenShotter时,如何更好地控制屏幕快照名称?

如何解决在Espresso测试中使用Firebase ScreenShotter时,如何更好地控制屏幕快照名称?

我有一个帮助器类,可以在使用Espresso时生成屏幕截图。屏幕截图是使用Firebase ScreenShotter生成的。我的代码如下:

    private static   ActivityScenario activityScenario;

    public static void setup(){
        activityScenario = ActivityScenario.launch(MainActivity.class);
       
    }
    public static void screenshot(String name){
        activityScenario.onActivity(activity->{
            ScreenShotter.takeScreenshot(name,activity /* activity */);

        });
    }

所以另一个类会这样称呼它:

    @Before
    public void setup(){
        SetupHelper.setup();
       
    }



    @Test
    public void loginAfterReset() {
         SetupHelper.screenshot("Home");
    }

屏幕截图确实保存到设备的SD卡中。但是,SD卡上的屏幕截图的名称为:

UnkNownTestClass-unkNownTestMethod-Home-1.jpg

为什么将其显示为UnkNowntestClass-unkNownTestMethod?如何更好地控制命名?

解决方法

ScreenShotter使用堆栈跟踪来根据其可以在堆栈跟踪中找到的测试类和测试方法来找出文件名。

ActivityScenario.onActivity()在当前Activity的主线程上运行传递的动作。测试在不同的线程上执行。因此,您传递的操作将具有一个堆栈跟踪,其中不包含测试方法或测试类。这就是为什么您看到UnknownTestClass-unknownTestMethod的原因。当执行匿名函数时,它不会在测试类的上下文中运行。

解决此问题的一种方法是不使用onActivity()ActivityScenario.launch()应该已经使您的活动进入“恢复”状态,即使其可见。将您的SetupHelper.screenshot()更改为以下内容:

    public static void screenshot(String name){
        ScreenShotter.takeScreenshot(name,activity /* activity */);
    }

这将更改屏幕快照文件名,以包括实际的测试类和测试方法名称。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。