Ответ 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