使用UIAutomation处理警报

vda*_*bry 14 iphone ios-ui-automation

我正在尝试使用UIAutomation测试UIAlertView的存在,但我的处理程序永远不会被调用.

在我的javascript开头我写道:

UIATarget.onAlert = function onAlert(alert) {
    UIALogger.logMessage("alertShown");
    return false;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,只要我指定了我的onAlert函数,就应该在我的测试期间出现alertView时调用它.所以我运行一个显示alertView的测试,这是显示警报的代码:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:message message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
alertView.accessibilityLabel = @"alerte d'avertissement";
[alertView show];
Run Code Online (Sandbox Code Playgroud)

我在仪器中运行我的测试,警报显示但我的处理程序从未被调用.有没有人能够使用UIAutomation的事件处理程序?

谢谢,文森特.

Dre*_*ord 19

文档似乎是错误的.事实证明,警报是在脚本尝试运行的同一个线程上处理的.所以如果你想要调用警报处理程序,你需要睡觉,例如,

UIATarget.onAlert = { ... }
window.buttons().triggerAlertButton.tap();
UIATarget.localTarget().delay(4);
Run Code Online (Sandbox Code Playgroud)

此外,警报的名称和值似乎始终设置为null.但是,我能够访问包含警报标题的第一个静态文本.

  • 嗨,我也有同样的问题.你可以告诉我你如何从alertview获取静态文本?提前致谢 (2认同)

ma1*_*w28 6

确保UI自动化脚本在UIAlertView节目时仍在运行.

例如,将以下行添加到脚本末尾将使其保持运行,直到可以访问警报或对象解析的宽限期到期为止.

// Wait for UIAlert to appear so that UIATarget.onAlert gets called.
target.frontMostApp().alert();
Run Code Online (Sandbox Code Playgroud)

我通过彻底阅读和理解仪器用户指南:自动化UI测试来解决这个问题,我强烈建议将其作为UI自动化的介绍.

这也可能是有帮助的审查UIATarget类参考,具体方法popTimeout,pushTimeout,setTimeout,timeout,和delay.