Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как с помощью Robotium-тестов запустить приложение, из которого был совершен выход во время теста?


(Игорь Кожин) #1

Имеется тест, написанный на Robotium:

//ниже идет стандартный заголовок для тестов Robotium, работающих с .apk-файлом;

package <АДРЕС КАТАЛОГА>;
import com.robotium.solo.*;
import android.test.ActivityInstrumentationTestCase2;
public class StartTest extends ActivityInstrumentationTestCase2 {
private Solo solo;
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "<АДРЕС VIEW>.<ИМЯ VIEW>";
private static Class<?> launcherActivityClass;
static{
    try {
        launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }
}
@SuppressWarnings("unchecked")
public CAStartTest() throws ClassNotFoundException {
    super(launcherActivityClass);
}
public void setUp() throws Exception {
    super.setUp();
    solo = new Solo(getInstrumentation());
    getActivity();
}
@Override
public void tearDown() throws Exception {
    solo.finishOpenedActivities();
    super.tearDown();
}

//заголовок закончился, ниже идут тесты

//    Тест №1
public void test01() {
    solo.waitForActivity("<ИМЯ VIEW>", 2000); //тест начинается с ожидания необходимой View 
  <ТЕЛО ТЕСТА>
  solo.sendKey(KeyEvent.KEYCODE_BACK); //в какой-то момент в ходе теста нужно закрыть тестируемое приложение и открыть его заного
  ???? - как правильно запустить приложение с помщью Robotium?
}

Как альтернатива подойдет вариант с запуском теста №2 из теста №3. Все тесты находятся в одном классе и представляют собой методы “public void test№№()”. Но как это сделать???


(Игорь Кожин) #2

Переформулирую вопрос: в середине теста необходимо принудительно закрыть приложение (как если бы пользователь свернул его, потом зашел в андройде в настройки -> приложения и нажал кнопку “Остановить принудительно”). Возможно ли это сделать с помощью Robotium или с помощью Java?
Из манула по Robotium я понял, что “finalize” и “finishOpenedActivities” срабатывают только в “tearDown()”, т.е. только по окончании теста.

Вторая часть вопроса, можно ли потом данное приложение корректно запустить заново? Я пробовал следующим способом:
1 - создал вспомогательный класс

public void restartApplication(){
    Intent restApp = new Intent(getActivity(), CASplashScreen.class);
    getActivity().startActivity(restApp);
}

2 - В ходе прохождения теста, после закрытия приложения по

“solo.sendKey(KeyEvent.KEYCODE_BACK);”

запускал с помощью

    restartApplication();

Однако, данный код открывает приложение на том же месте, как если бы оно было свернуто, а мне это к сожалению не подходит.


(Dmitry Cheremushkin) #3

Попробуйте перед вызовом startActivity добавить следующее:

restApp.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

(Игорь Кожин) #4

К сожалению не помогло, эффект тот же.