Можно ли использовать Espresso для тестирования приложения с рабочим профилем AndroidForWork

Я хочу протестировать MyApp от Espresso. MyApp может выполнять регистрацию AndroidForWork. После регистрации на устройстве будет 2 приложения MyApp: одно с личным профилем, а другое с рабочим профилем, как показано ниже: (в качестве примера я использую приложение для загрузки.) приложение с личным и рабочим профилями

введите здесь описание изображения

Мой вопрос: можно ли использовать эспрессо для тестирования как личных, так и рабочих приложений? Если да, то как это сделать?

Что я хочу протестировать:

  1. Запустите MyApp (с личным профилем, рабочего профиля для MyApp пока нет). -- Эспрессо работает нормально.
  2. Выполните регистрацию AndroidForWork — Espresso работает нормально, затем создается MyApp с рабочим профилем.
  3. Запустите MyApp с рабочим профилем и протестируйте его. -- Я не знаю, как это сделать. My Espresso запустил MyApp только с личным профилем. Оба приложения MyApp (с личным или рабочим профилем) имеют одинаковое имя пакета.

Кстати, я попробовал UIAutomator протестировать MyApp с рабочим профилем, но у MyApp есть веб-страница, и UIAutomator не может распознавать в ней веб-элементы. Вот почему я все еще хочу использовать Espresso для тестирования MyApp с рабочим профилем.


person MxJ    schedule 07.06.2018    source источник
comment
Пробовали ли вы либо использовать пользовательское тестовое правило для переключения на профиль перед запуском MyApp, либо комбинировать эспрессо с UIAutomator, чтобы для параметра ActivityTestRule launchActivity было установлено значение false, что позволяло UIAutomator переключать профиль перед запуском?   -  person randomuser    schedule 07.06.2018
comment
Как переключиться на рабочий профиль по пользовательскому тестовому правилу? Или как использовать UIAutomator для переключения профиля? Я пытался открыть MyApp с рабочим профилем вручную, но Espresso не может распознать какой-либо пользовательский интерфейс в MyApp с рабочим профилем.   -  person MxJ    schedule 08.06.2018


Ответы (1)


Вот некоторые возможные варианты (блокировка запуска активности):

Используйте InstrumentationRegistry для запуска намерения, нацеленного на профиль:

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("am start --user <USER_ID> -n <appId>/<activity>")

(Например, получение информации о пользователе с помощью pm list users)

Используйте UIAutomator для запуска целевого приложения:

String appDrawer = "Apps";
String appTitle = "<App title>";

UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
device.pressHome();

if (device.hasObject(By.descStartsWith(appDrawer))) {
    device.findObject(By.descStartsWith(appDrawer)).click();
}

UiScrollable apps = new UiScrollable(new UiSelector().scrollable(true));
apps.scrollForward();
apps.scrollTextIntoView(appTitle);
List<UiObject2> items = device.findObjects(By.text(appTitle));

//TODO validate items content and identify the correct index
items.get(index).click();
person randomuser    schedule 09.06.2018
comment
Я попытался использовать InstrumentationRegistry для запуска намерения, нацеленного на профиль, и запускается MyApp с рабочим профилем. Но Espresso по-прежнему не может распознать на нем пользовательский интерфейс. Но если я использую тот же способ для запуска MyApp с личным профилем, Espresso может распознать пользовательский интерфейс. Я все еще не могу использовать Espresso для тестирования MyApp с рабочим профилем. Кажется, Эспрессо всегда привязан к приложению с личным профилем. - person MxJ; 11.06.2018
comment
Тогда, что касается вашей предпосылки UIAutomator cannot recognize web elements within it., не доступен ли какой-либо элемент на этом экране? Через uiautomatorviewer ничего не отображается? Если это так, я бы рекомендовал снова изучить проверку UIAutomator. - person randomuser; 11.06.2018
comment
Самый низкий (конечный) уровень того, что отображал uiautomatorviewer, — это android.webkit.WebView. Текстовое поле и кнопка, к которым мне нужно получить доступ, находятся в этом веб-просмотре, который не отображается uiautomatorviewer. - person MxJ; 11.06.2018
comment
У вас есть активный setWebContentsDebuggingEnabled в вашем веб-просмотре? какую версию SDK вы тестируете? - person randomuser; 14.06.2018
comment
да, setWebContentsDebuggingEnabled активен, а версия SDK — 24. - person MxJ; 15.06.2018