Выбор учетной записи в Firebase Robo Test

В нашем приложении есть функция выбора учетной записи Google (без аутентификации, просто привязка).

Вот как выглядит намерение выбора учетной записи Google

Intent intent = AccountPicker.newChooseAccountIntent(null,
                null,
                new String[]{"com.google"},
                true,
                null,
                null,
                null,
                null);
        startActivityForResult(intent, REQUEST_CODE_PICK_ACCOUNT)

Когда я тестирую приложение в своем эмуляторе, я выбираю фиктивную учетную запись Google. Я делаю то же самое при захвате тестовой записи Robo.

И мой Robo json выглядит так, прежде чем показывать приглашение выбора учетной записи

{
    "eventType": "VIEW_CLICKED",
    "timestamp": 1567317991869,
    "replacementText": "Choose a Google Account",
    "actionCode": -1,
    "delayTime": 0,
    "canScrollTo": false,
    "elementDescriptors": [
      {
        "className": "android.support.v7.widget.AppCompatButton",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 2,
        "resourceId": "com.app.xyz:id/btn_main_propic",
        "contentDescription": "",
        "text": "Choose a Google Account"
      },
      {
        "className": "android.widget.RelativeLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "com.app.xyz:id/id_main_rlyt",
        "contentDescription": "",
        "text": ""
      },
      {
        "className": "android.support.v7.widget.ContentFrameLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "android:id/content",
        "contentDescription": "",
        "text": ""
      }
    ]
  }

И после выбора учетной записи мой робоскрипт имеет это.

{
    "eventType": "VIEW_CLICKED",
    "timestamp": 1567318000894,
    "replacementText": "I Agree, Proceed",
    "actionCode": -1,
    "delayTime": 0,
    "canScrollTo": false,
    "elementDescriptors": [
      {
        "className": "android.support.v7.widget.AppCompatButton",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 5,
        "resourceId": "com.app.xyz:id/btn_first_proceed",
        "contentDescription": "",
        "text": "I Agree, Proceed"
      },
      {
        "className": "android.widget.RelativeLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "com.app.xyz:id/id_main_rlyt",
        "contentDescription": "",
        "text": ""
      },
      {
        "className": "android.support.v7.widget.ContentFrameLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "android:id/content",
        "contentDescription": "",
        "text": ""
      }
    ]
  }

Как вы можете заметить выше, нет записи для выбора учетной записи. т. е. нажав на имя учетной записи.
Вот здесь и возникает проблема, когда я тестирую ее в облаке. Вместо того, чтобы использовать существующую учетную запись Google, робот создает новую учетную запись и терпит неудачу.

Подсказка в облачном тесте выглядит так.

Подсказка о выборе учетной записи Google в облачном тесте

Тест должен выбрать первый вариант. Вместо этого он выбирает опцию «Добавить учетную запись», начинает создавать учетную запись и терпит неудачу.

Вопросы есть.

  1. Почему robo json не фиксирует шаг выбора учетной записи?
  2. Что нужно сделать, чтобы использовать существующую учетную запись Google на облачном устройстве?

Обратите внимание, что это не аутентификация, как описано на этой странице. Это только привязка существующей учетной записи (подойдет любая учетная запись).


person Raman Srinivasan    schedule 01.09.2019    source источник


Ответы (1)


  1. Рекордер Roboscript не фиксирует шаг выбора учетной записи, поскольку диалоговое окно выбора не является частью записываемого приложения. Вы можете подтвердить это с помощью Run | Запишите тест эспрессо в Android Studio. Espresso Test Recorder также не будет фиксировать ваши действия в диалоговом окне выбора учетной записи. Поскольку действие по выбору учетной записи не является частью записанного Roboscript, когда диалоговое окно выбора учетной записи появляется во время сканирования Robo, Robo попытается выполнить «Я согласен, продолжить» из Roboscript. Поскольку это действие не удается, поскольку соответствующий элемент пользовательского интерфейса не найден на экране, Robo отказывается от выполнения Roboscript и запускает обычное сканирование, по какой-то причине выбирая второй вариант («Добавить учетную запись») (обратите внимание, что даже если Robo выбрал первый вариант, в этот момент Roboscript больше не выполняется, поэтому на последующих экранах действия Roboscript все равно выполняться не будут).

  2. При обычном сканировании Robo, как объяснено на странице справки пользователя, на которую вы ссылаетесь, Robo автоматически выполнит вход в Google. В вашем случае этот вход в систему (который не является входом в систему, а выбором учетной записи) происходит в рамках шагов Roboscript, поэтому единственный способ убедиться, что Roboscript полностью выполнен, — это внедрить в него отсутствующее действие. Вы можете вручную отредактировать записанный Roboscript, добавив следующее действие между двумя перечисленными выше действиями Roboscript. Замените заполнители фактическими значениями элемента, по которому вы хотите, чтобы Robo щелкнул, хотя имя класса не обязательно должно быть точным. Кроме того, вы можете дополнительно настроить это действие, используя приведенный ниже код и примеры записанных выше действий Roboscript в качестве отправной точки.


  {
    "eventType": "VIEW_CLICKED",
    "elementDescriptors": [
      {
        "className": "some_class_name",
        "text": "text_of_the_option_to_pick"
      }
    ]
  },

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

person Stanislav Negara    schedule 04.09.2019
comment
Помогите, как определить, робот это или реальный пользователь? Необходимо внедрить некоторую пользовательскую логику для менее навязчивого скрипта робота. - person Raman Srinivasan; 07.03.2021
comment
Робо действует максимально близко к тому, как мог бы действовать реальный пользователь приложения. Если вы хотите изменить поведение своего приложения для Robo, я бы порекомендовал подготовить собственный APK для сканирования Robo, а не внедрять пользовательскую логику для обработки сканирования Robo в общедоступный APK. - person Stanislav Negara; 09.03.2021