Подтвердить что ты не робот

Тестирование отслеживания экрана с помощью автоматизации пользовательского интерфейса на iOS

Итак, у меня была эта идея, чтобы проверить реализацию моего отслеживания экрана (с помощью Google Analytics) в моем приложении с помощью автоматизации пользовательского интерфейса.

Первоначальная идея состояла в том, чтобы создать пользовательский интерфейс script, чтобы проходить через экраны, проверяя, соответственно отправляются события отслеживания. Мне это нужно, так как иногда я не могу составить все вне контроля контроллеров или события не перенаправляются в ожидаемом порядке. Независимо от этого, я должен проверить этот аспект моего приложения, а также, и я думал, что автоматизация пользовательского интерфейса является ответом.

Я реализовал script для просмотра экранов с помощью инструмента автоматизации пользовательского интерфейса, и это работает правильно. Я даже зашел так далеко, как использовать tuneup js, чтобы сделать код более упорядоченным и более простым в использовании. Я ожидал иметь что-то вроде (в общих чертах, синтаксис является лишь упрощением):

Being on screen X
    Tap button A
Expect screen Y and tracking event for the screen Y

Однако, насколько я мог проверить, тестирование отслеживания экрана - это то, что невозможно с автоматизацией пользовательского интерфейса. Или я что-то упускаю?

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

Что вы предлагаете? Ищите другой инструмент автоматизации пользовательского интерфейса? Делайте это с модульным тестированием?

Заранее благодарим за помощь

4b9b3361

Ответ 1

Вы можете использовать UIAlertView и проверить эти предупреждения. Вместо отправки аналитических событий вы можете вывести предупреждение, чтобы вы могли проверить его в UIAutomation.

Структуры абстракции аналитики, такие как AnalyticsKit, предоставляют простой способ изменить поставщика аналитики. И AnalyticsKit даже имеет пример для этого (ознакомьтесь с классом AnalyticsKitDebugProvider). Таким образом, изменения в вашем производственном коде минимальны.

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

id<AnalyticsKitProvider> provider
#ifdef USE_UI_AUTOMATION_ANALYTICS
provider = [[TestAutomationProvider alloc] init];
#else
provider = [[RealProvider alloc] initWithApiKey:API_KEY];
#endif

[AnalyticsKit initializeLoggers:@[provider]];

В UIAutomation вы можете проверить наличие предупреждения. Вы можете использовать assertions.js из пакета tuneup.js для записи такой функции, как этот

function checkForAlert()
{
    var alert = null;
    retry( function() {
          log("wait until alert appaers");
          alert = UIATarget.localTarget().frontMostApp().alert();
          assertNotNull(alert, "No alert found");
          assertTrue("The name you can choose for the alert" == alert.name()); 
          }, 5, 1.0);
    return alert;
};

Это объединяет ожидание оповещения и тестирования, если оно наконец появится. Если предупреждение не появляется, тест завершится с ошибкой.

В вашем тесте вы используете это следующим образом:

var analyticAlert = checkForAlert() // if alert appears it will be in the var, otherwise the test fails at this point.
analyticAlert.buttons()["OK"].tap(); // dismiss the alert

Для выполнения этой работы вам также необходимо установить обработчик onAlert. В противном случае UIAutomation попытается немедленно отключить ваше предупреждение. Это нужно сделать до вашего кода тестирования. Обработка предупреждений объясняется в документах UIAutomation.

function MyOnAlertHandler(alert)
{
   if("The name you choose"==alert.name()) // filter all alerts created by analytics provider
   {
      return true; // handle alert in your test
   }

   return false // automaticly dismiss all other 
}

UIATarget.onAlert = MyOnAlertHandler; // set the alert handler