UI自动化onAlert方法未在模拟器上调用

时间:2013-01-22 00:24:37

标签: ios ios-simulator instruments ios-ui-automation

首次启动我的应用时,我会收到一条权限提醒,询问我是否允许该应用使用我当前的位置。我的onAlert方法成功解除了我设备上的提醒。当我在模拟器上运行它时,它永远不会被调用。其他内部警报由模拟器上的onAlert方法处理。来自SpringBoard的权限警报未在模拟器上处理。有什么想法吗?

UIATarget.onAlert = function onAlert(alert)
{
    var title = alert.name();
    UIALogger.logMessage(title);
    return false;
}

3 个答案:

答案 0 :(得分:1)

出现此问题是因为您看到的警报来自系统本身 - 之前应用程序实际启动并且您的自动化环境已初始化。

要看到这种情况,请在UIATarget.onAlert的函数定义之前添加一个调试行:

UIALogger.logDebug("Now setting up the alert function");
UIATarget.onAlert = function onAlert(alert) {}

接下来,在您的模拟器上Reset Content and Settings...并重新运行您的自动化。您应该注意到,在之后手动关闭有关使用当前位置的警报时,调试行才会出现。

我看不出这是如何通过javascript代码修复的。您必须延迟提醒,直到应用程序正确启动,或遵循example shown in this answer

答案 1 :(得分:0)

如果默认处理程序不适合你,那么你可以简单地使用'return true'而不是'return false',这样你就可以手动关闭popover。 在'return true'语句之前,您可以编写一些语句来点击您想要的按钮(忽略按钮)。

答案 2 :(得分:0)

我在启动后立即显示警报的应用程序遇到了同样的问题。当我记录元素树时,我可以看到额外的警报窗口,我可以让UIAutomation点击警报中的OK按钮。但从未调用过警报处理程序 原因是在UIAutomation正确设置之前就出现了警报来处理它。如果我延迟了警报的显示,UIAutomation确实抓住了它。