0

我有一个控制器,当用户单击按钮 ["Delete"] 时,它会创建并显示警报。警报视图提示用户确认,或者取消删除,或者完成操作。

当我在我的 iPhone 甚至 iPhone 模拟器中运行代码时,它运行良好 - 如果/当用户单击 UIAlertView 上的“是”按钮时,该项目将被删除。

但是,我正在尝试使用 Instruments 创建 UI 自动化测试。当我运行以下脚本时,警报按预期显示,并且日志显示实际上在模拟过程中点击了“是”按钮。但是,即使警报被解除并点击“是”按钮,委托方法“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(); 
}
4

2 回答 2

0

您可以尝试按照以下任何方式给予延迟 -

[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."
于 2014-03-20T05:37:41.943 回答
0

您是否分配了警报视图的控制器委托并实现了 UIAlertViewDelegate 协议?

于 2014-03-20T21:52:18.990 回答