我在我的項目中使用Espresso進行UI測試。我想拍攝每個活動(屏幕)的截圖。我正在使用GoogleCloudTestLab的ScreenShooter進行屏幕截圖。使用濃咖啡拍攝屏幕截圖
ScreenShotter.takeScreenshot("main_screen_2", getActivity());
但它只是在我的ActivityTestRule中定義的第一個活動的屏幕截圖。我如何在同一個測試用例中進行其他活動的屏幕截圖。
我在我的項目中使用Espresso進行UI測試。我想拍攝每個活動(屏幕)的截圖。我正在使用GoogleCloudTestLab的ScreenShooter進行屏幕截圖。使用濃咖啡拍攝屏幕截圖
ScreenShotter.takeScreenshot("main_screen_2", getActivity());
但它只是在我的ActivityTestRule中定義的第一個活動的屏幕截圖。我如何在同一個測試用例中進行其他活動的屏幕截圖。
我的理解是ActivityTestRule被設計爲只測試testcase中的一個Activity,因此getActivity()將只返回ActivityTestRule中指定的活動。
要捕獲的屏幕截圖,該庫目前使用:
View screenView = activity.getWindow().getDecorView().getRootView(); screenView.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache()); screenView.setDrawingCacheEnabled(false);
(其中活動用戶通過我們的活動)
,是因爲被給予相同的活動takescreenshot,我們當時只能捕獲該活動的視圖層次結構。你能分解你的測試來測試每個測試用例只有一個活動嗎?
此外,我們正在探索其他方法來捕獲屏幕,如果我們改變這種方法,將會添加到這個線程中。
注意:如果您正在使用此庫在Firebase測試實驗室中運行測試,並且您有一種捕獲屏幕截圖的優先方式(而不是使用該庫),只要它們最終位於/ sdcard/screenshots目錄中即可他們將在測試結束時被拉出並上傳到儀表板。
自從我的測試涵蓋跨越多個活動的流程以來,我遇到了同樣的問題。的helper方法,如這一個可以用來獲得參考當前活動(頂部)活動:
/**
* 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(),你應該是好去。