使用浓缩咖啡拍摄屏幕截图

时间:2016-06-08 04:22:43

标签: android android-espresso google-cloud-test-lab

我在项目中使用Espresso进行UI测试。我想拍摄每个活动(屏幕)的屏幕截图。我正在使用GoogleCloudTestLab中的ScreenShooter进行截屏。

   ScreenShotter.takeScreenshot("main_screen_2", getActivity());

但它只拍摄了我在ActivityTestRule中定义的第一个活动的屏幕截图。如何在同一个测试用例中使用其他活动屏幕截图。

2 个答案:

答案 0 :(得分:2)

我的理解是ActivityTestRule旨在测试测试用例中的一个Activity,因此getActivity()只返回您在ActivityTestRule中指定的活动。

要捕获屏幕截图,库目前使用:

View screenView = activity.getWindow().getDecorView().getRootView(); screenView.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache()); screenView.setDrawingCacheEnabled(false);

(活动是用户传递给我们的活动。)

因为同样的活动被赋予了截屏,我们当时只能捕获该活动的视图层次结构。您是否能够将测试分开以仅测试每个测试用例的一个活动?

此外,我们目前正在探索捕获屏幕的其他方法,如果我们更改此方法,则会添加到此主题。

注意:如果您使用此库在Firebase测试实验室中运行测试,并且您有一种优先捕获屏幕截图(而不是使用库)的方法,只要它们最终位于/ sdcard / screenshots目录中,那么它们将在测试结束时拉出并上传到仪表板。

答案 1 :(得分:1)

我遇到了同样的问题,因为我的测试涵盖了涵盖多个活动的流程。诸如此类的辅助方法可用于获取对当前活动(在顶部)活动的引用:

/**
 * A helper method to get the currently running activity under test when a test run spans across multiple
 * activities. The {@link android.support.test.rule.ActivityTestRule} only returns the initial activity that
 * was started.
 */
public static final Activity getCurrentActivity(Instrumentation instrumentation)
{
    final Activity[] currentActivity = new Activity[1];
    instrumentation.runOnMainSync(new Runnable()
    {
        public void run()
        {
            Collection<Activity> resumedActivities =
                ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(RESUMED);
            if (resumedActivities.iterator().hasNext())
            {
                currentActivity[0] = resumedActivities.iterator().next();
            }
        }
    });
    return currentActivity[0];
}

从测试中传递getInstrumentation(),你应该好好去。