Метод делегата 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?

Другие вопросы по тегам