{AutoQA/UiAutomator/Espresso} Вызов всплывающего окна/активити происходит после того, как автотест был провален
В автотесте участвуют три приложения:
- приложение родителя (запрещает приложение)
- запрещенное приложение (в нашем случае YouTube)
- приложение ребёнка (вызывает GuardActivity, которое не дает пользоваться запрещенным приложением)
Тезисно, автотест заходит в приложение родителя ставит YouTube в блок, выходит из приложения родителя, заходит в YouTube затем,
Фактический результат: GuardScreen Activity появляется только после того как автотест был завален.
Ожидаемый результат: GuardScreen Activity появляется в течение 2-3 сек.
- Пробовал писать автотест единым кейсом, метод за методом
- Пробовал разделять аннотациями @Test, разбивая весь тест на 3 теста (блок, вход в ютб, проверка гарда)
- Создавал отдельный класс под проверку гарда
- в коде ниже используется только UiAutomator, ранее была помесь Espresso/UiAutomator, работа кода была идентичная.
@RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest {
UiDevice Device =
UiDevice.getInstance(getInstrumentation());
@Test
public void launchDenyMode() throws Exception {
UiObject launchParentApp =
Device.findObject(new UiSelector()
.description("Kids360 для родителей"));
launchParentApp.click();
UiObject enterPolicySection =
Device.findObject(new UiSelector()
.resourceId("app.kids360.parent:id/policiesFragment"));
enterPolicySection.click();
UiObject tapSearchIcon =
Device.findObject(new UiSelector()
.resourceId("app.kids360.parent:id/action_search"));
tapSearchIcon.click();
UiObject inputAppName =
Device.findObject(new UiSelector()
.resourceId("app.kids360.parent:id/search_src_text"));
inputAppName.click();
inputAppName.setText("you");
UiObject tapChosenApp =
Device.findObject(new UiSelector()
.textContains("YouTube"));
tapChosenApp.click();
UiObject chooseDenyMode =
Device.findObject(new UiSelector()
.resourceId("app.kids360.parent:id/radioButtonPolicyDeny"));
chooseDenyMode.click();
Device.pressHome();
UiObject launchRestrictedApp =
Device.findObject(new UiSelector()
.textContains("YouTube"));
launchRestrictedApp.click();
Thread.sleep(5000);
UiObject2 GuardScreen = Device.findObject(By.clazz("android.widget.FrameLayout"));
String result = GuardScreen.getText();
assertTrue(result.equals("Опасное приложение"));
}
}
Ошибка после автотеста
07-08 19:08:30.514 10050 1740 1876 E HwModemCapability: isCapabilitySupport java.lang.StringIndexOutOfBoundsException: length=7; index=7
07-08 19:08:30.515 10050 1740 1740 E HwModemCapability: isCapabilitySupport java.lang.StringIndexOutOfBoundsException: length=7; index=7
07-08 19:08:30.518 1000 1892 2025 I HidataAppQoeP: handleStateChanged reason=6
07-08 19:08:30.523 1000 1892 2025 I PreDnsQuery: handleStateChanged reason=6
07-08 19:08:30.527 1000 1892 2025 I BrowserChrP: handleStateChanged
07-08 19:08:30.554 11183 12422 17526 D EsApi : <-- 200 OK https://elk.kids360.app:9201/playground-android-kid/_bulk (113ms)
07-08 19:08:30.555 11183 12422 17526 D EsApi : Server: nginx/1.14.0 (Ubuntu)
07-08 19:08:30.555 11183 12422 17526 D EsApi : Date: Thu, 08 Jul 2021 14:08:31 GMT
07-08 19:08:30.555 11183 12422 17526 D EsApi : Content-Type: application/json; charset=UTF-8
07-08 19:08:30.556 11183 12422 17526 D EsApi : Content-Length: 734
07-08 19:08:30.556 11183 12422 17526 D EsApi : Connection: keep-alive
07-08 19:08:30.557 11183 12422 17526 D EsApi
androidx.test.uiautomator.UiObjectNotFoundException: UiSelector[RESOURCE_ID=app.kids360.kid:id/guardUnlock]
at androidx.test.uiautomator.UiObject.click(UiObject.java:416)
at app.kids360.parent.ExampleInstrumentedTest.launchDenyMode(ExampleInstrumentedTest.java:81)