{AutoQA/UiAutomator/Espresso} Вызов всплывающего окна/активити происходит после того, как автотест был провален

В автотесте участвуют три приложения:

  1. приложение родителя (запрещает приложение)
  2. запрещенное приложение (в нашем случае YouTube)
  3. приложение ребёнка (вызывает GuardActivity, которое не дает пользоваться запрещенным приложением)

Тезисно, автотест заходит в приложение родителя ставит YouTube в блок, выходит из приложения родителя, заходит в YouTube затем,

Фактический результат: GuardScreen Activity появляется только после того как автотест был завален.

Ожидаемый результат: GuardScreen Activity появляется в течение 2-3 сек.

  1. Пробовал писать автотест единым кейсом, метод за методом
  2. Пробовал разделять аннотациями @Test, разбивая весь тест на 3 теста (блок, вход в ютб, проверка гарда)
  3. Создавал отдельный класс под проверку гарда
  4. в коде ниже используется только 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)

Ответы (0 шт):