【问题标题】:UI Automation onAlert method not being called on simulator模拟器上未调用 UI 自动化 onAlert 方法
【发布时间】:2013-01-05 03:41:26
【问题描述】:

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

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

【问题讨论】:

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


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 问题是我似乎无法访问警报。 UIATarget.localTarget().frontMostApp().alert() 无效,因为警报不是来自我的应用程序。它来自 SpringBoard。
      猜你喜欢
      • 2017-03-24
      • 2016-04-15
      • 2016-01-20
      • 2017-11-11
      • 2016-05-20
      • 2014-10-23
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多