2016-06-08 1 views
4

Я использую Espresso для тестирования своего интерфейса в своем проекте. Я хочу сделать снимок экрана для каждой операции (Экран). Я использую ScreenShooter из GoogleCloudTestLab для снятия снимков экрана.Съемка с помощью эспрессо

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

Но это только снимает снимок экрана 1-й деятельности, которую я определил в своем ActivityTestRule. Как я могу снимать другой экран активности в том же тестовом файле.

ответ

2

Мое понимание ActivityTestRule предназначено для проверки только одного действия в тестовой папке, поэтому getActivity() будет возвращать только активность, указанную вами в ActivityTestRule.

Для захвата экрана, библиотека в настоящее время использует:

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

(., Где деятельность является деятельность пользователь проходит мимо нас)

Итак, потому что тот же вид деятельности уделяется takescreenshot, мы можем только захватить иерархию представлений этой деятельности в то время. Могли бы вы разделить свои тесты, чтобы проверить только одно действие на тест?

Кроме того, мы в настоящее время изучаем другие способы захвата экрана и добавим эту тему, если мы изменим этот метод.

Примечание. Если вы используете эту библиотеку для запуска тестов в Firebase Test Lab, и у вас есть предпочтительный способ захвата скриншотов (вместо использования библиотеки), если они попадают в каталог/sdcard/screenshots, тогда они будут вытащены и загружены на приборную панель в конце теста.

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() из вашего теста, и вы должны быть хорошо идти.

 Смежные вопросы

  • Нет связанных вопросов^_^