我有一个控制器,当用户单击按钮 ["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();
}