Я разрабатываю решение автоматизации QA, которое может записывать/воспроизводить тесты QA на Android. Ключевым бизнес-требованием является отсутствие зависимости от подключенного ПК при воспроизведении записанного теста. С этой целью я пытаюсь запустить тест Instrumentation без подключенного ПК. (В частности, тест Appium UiAutomator2).
Мой текущий подход пытается запустить тест программно из моего приложения. Если бы я обычно выполнял тест с подключенного ПК, я бы использовал команду adb shell am instrument -w
. Я попытался получить доступ к ADB Shell из своего приложения и запустить am instrument -w
, но это приводит к ошибке, что мне не хватает разрешения INTERACT_ACROSS_USERS_FULL.
Чтобы обойти эту проблему, я пытаюсь запустить тест, используя startInstrumentation. Это успешно запускает тест. Тем не менее, тест сразу же падает. После дальнейшего расследования я проследил крах NPE: тест пытается извлечь InstrumentationRegistry.getInstrumentation.getUiAutomation(0)
, но это возвращает null.
Как я могу запустить тест программно и предоставить ему доступ к нужному экземпляру UiAutomation?
Вот как я начинаю тест:
public void runTest() {
final String pm = getPackageName().replaceFirst(".test$", "");
final InstrumentationInfo info = getInstrumentationInfo(pm);
if (info != null) {
final ComponentName cn = new ComponentName(info.packageName,
info.name);
Bundle arguments = new Bundle();
arguments.putString("class", "io.testim.appiumwrapper.test.AppiumUiAutomator2Server");
//cn = {io.extension.test/android.support.test.runner.AndroidJUnitRunner}
startInstrumentation(cn, null, arguments);
}
}