Как получить больший контроль над именем скриншота при использовании Firebase ScreenShotter в тесте Espresso?

#android #android-espresso #firebase-test-lab

#Android #android-espresso #firebase-test-lab

Вопрос:

У меня есть вспомогательный класс для создания скриншотов при использовании 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? Как мне получить больший контроль над наименованием?

Ответ №1:

ScreenShotter использует трассировку стека для определения имени файла на основе тестового класса и метода тестирования, которые он может найти в трассировке стека.

ActivityScenario.onActivity() запускает переданное действие в основном потоке текущего действия. Тесты выполняются в другом потоке. Итак, действие, которое вы передаете, будет иметь трассировку стека, которая не включает в себя метод тестирования или тестовый класс. Вот причина, по которой вы видите UnknownTestClass-unknownTestMethod . Когда выполняется анонимная функция, она не выполняется «в контексте» тестового класса.

Один из способов исправить это — не использовать onActivity() . ActivityScenario.launch() ваша активность уже должна быть переведена в состояние «возобновлено», то есть сделать ее видимой. Измените свой SetupHelper.screenshot() на следующий:

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

Это изменит имя файла скриншота, включив в него фактический тестовый класс и имя метода тестирования.