Как мне получить активность в тесте эспрессо?

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

#Android #android-espresso #android-тестирование #firebase-test-lab

Вопрос:

Я пытаюсь использовать firebase ScreenShotter, который принимает форму:

 ScreenShotter.takeScreenshot("main_screen_2", this /* activity */);
  

Я не совсем уверен, как я должен получать активность из теста эспрессо. На данный момент мой тестовый класс выглядит примерно так:

 @RunWith(AndroidJUnit4.class)
@LargeTest
public class OtherTests {
    @Rule
    // Replace 'MainActivity' with the value of android:name entry in
    // <activity> in AndroidManifest.xml
    public ActivityScenarioRule <MainActivity> mActivityRule = new ActivityScenarioRule<>(MainActivity.class);




    @Test
    public void getDeviceInfo() {

        try {
            Thread.sleep(7000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        TestHelper.tap("APP_HEADER");
        TestHelper.expect("TRUE_HOME_BUTTON",5000);
        ScreenShotter.takeScreenshot("main_screen_2", this /* activity */);
    }


}
  

Ответ №1:

Вы должны получить scenario , а затем запустить свой код в обратном вызове, переданном onActivity

     @Test
    public void getDeviceInfo() {
        ...
        mActivityRule.getScenario()
             .onActivity(activity -> ScreenShotter.takeScreenshot("main_screen_2", activity));
         
    }
  

Ответ №2:

Согласно образцу приложения, предоставленного Google (внизу), вы можете наследовать от ActivityInstrumentationTestCase2 и использовать getActivity() метод.

Однако, как объяснено здесь, этот класс устарел в пользу ActivityTestRule который также имеет getActivity() метод.

 public void testExample() {
    // Take a screenshot when app becomes visible.
    onView(isRoot());
    ScreenShotter.takeScreenshot("main_screen_1", getActivity());
}
  

Комментарии:

1. Для скриншота мне нужно передать ссылку на активность. Итак, в вашем примере, как вы получаете ссылку на экземпляр MainActivity?

2. Спасибо за разъяснение вопроса, смотрите Мой обновленный ответ.

3. ActivityTestRule также не рекомендуется. developer.android.com/reference/androidx/test/rule /…

4.Следует использовать ActivityScenarioRule developer.android.com/reference/androidx/test/ext/junit/rules /…