Метод делегата UIAlertView "clickedButtonAtIndex" не вызывается, когда предупреждение отклоняется в тесте автоматизации пользовательского интерфейса
У меня есть контроллер, который создает и отображает предупреждение, когда пользователь нажимает кнопку ["Удалить"]. Представление предупреждения запрашивает у пользователя подтверждение и либо отменяет удаление, либо завершает операцию.
Когда я запускаю код на своем iPhone или даже в симуляторе iPhone, он работает нормально - элемент удаляется, если / когда пользователь нажимает кнопку "Да" в UIAlertView.
Однако я пытаюсь создать тесты автоматизации пользовательского интерфейса с помощью инструментов. Когда я запускаю следующий скрипт, предупреждение показывается, как и ожидалось, и журнал показывает, что на самом деле кнопка "Да" была нажата во время симуляции. Однако, несмотря на то, что предупреждение отклонено и нажата кнопка "Да", метод делегата "clickedButtonAtIndex" не вызывается в контроллере моего приложения, поэтому удаление никогда не происходит.
Думая, что это проблема с синхронизацией, я попытался добавить задержку после нажатия кнопки "Да" (поверх ожидания, когда кнопка "Да" станет недействительной), но это не имело никакого значения.
ПРИМЕЧАНИЕ. - Представление предупреждений должно оставаться в памяти до тех пор, пока контроллер не будет освобожден, так как представление предупреждений является сильным свойством класса контроллера. - Контроллер устанавливает себя как делегат оповещения - о чем свидетельствует приложение, работающее должным образом, когда НЕ имитируется.
Есть идеи?
Вот сценарий:
UIATarget.onAlert = function onAlert(alert) {
var title = alert.name();
if (title == expectedAlertMessage) {
expectedAlertMessage = "";
return true;
}
return false;
}
function testDeleteMyFavoriteStore(target, app) {
var mainWindow = new MainWindow(target, app); //MainWindow is defined in a separate js file
var storeNameToDelete = "My Favorite Grocery Store"
mainWindow.StorePicker().wheels()[0].selectValue(storeNameToDelete);
mainWindow.EditStoreButton().tap();
mainWindow.EditStoreButton().waitForInvalid();
var editStoreWindow = new EditStoreWindow(target, app); //EditStoreWindow is defined in a separate js file
expectedAlertMessage = "Delete Store";
editStoreWindow.DeleteStoreButton().tap();
editStoreWindow.DeleteStoreButton().waitForInvalid();
var yesButton = app.alert().buttons()["Yes"];
yesButton.tap();
yesButton.waitForInvalid();
}
2 ответа
Можете ли вы попробовать дать задержки, как любой из следующих:
[1] target.delay(5); //delay for 5 sec - can use this after your alert appears
[2] Use pushTimeout and popTimeout -
UIATarget.localTarget().pushTimeout(20);
window.navigationBar().name()["Welcome"];
UIATarget.localTarget().popTimeout();
[3] Use isVisible check -
UIATarget.localTarget().pushTimeout(20);
window.navigationBar().name()["Welcome"].withValueForKey(1, "isVisible");
UIATarget.localTarget().popTimeout();
Note : [2] and [3] will make instruments wait up to 20 seconds until the name of the navigation bar has changed to "Welcome."
Вы назначили делегата контроллера для представления оповещений и внедрили протокол UIAlertViewDelegate?