在iOS'中处理自定义javascript异常;UIS自动化UIATarget.onAlert

在iOS'中处理自定义javascript异常;UIS自动化UIATarget.onAlert,javascript,ios,scope,integration-testing,ios-ui-automation,Javascript,Ios,Scope,Integration Testing,Ios Ui Automation,我已经建立了一些UIAutomation脚本,最终将成为jenkins测试。UIAutomation脚本不会以jenkins友好的格式输出,所以我使用,特别是这个 当测试失败时,我可以抛出一个自定义的FailureException。异常被正常捕获,故障输出被正确记录。输出为错误:FailureException:“hello world” 当我试图在onAlert处理程序中抛出相同的FailureException时,就会出现问题,UIATarget.onAlert=函数onAlert(ale

我已经建立了一些UIAutomation脚本,最终将成为jenkins测试。UIAutomation脚本不会以jenkins友好的格式输出,所以我使用,特别是这个

当测试失败时,我可以抛出一个自定义的
FailureException
。异常被正常捕获,故障输出被正确记录。输出为
错误:FailureException:“hello world”

当我试图在
onAlert
处理程序中抛出相同的
FailureException
时,就会出现问题,
UIATarget.onAlert=函数onAlert(alert){…}
。在我的
onAlert
函数中,如果标题与某个正则表达式匹配,我会抛出一个
FailureException
,但是
FailureException
永远不会被捕获,测试会崩溃,输出如下:

Script threw an uncaught JavaScript error: hello world on line 18 of assertions.js

你知道如何在
onAlert
处理程序中抛出这个
FailureException
并正确处理它吗?看起来好像是在与其他测试不同的范围内处理
onAlert
,但我不确定如何纠正这一点。

这里的核心问题是,js异常并不像事件循环那样与异步代码一起工作(这就是为什么在“现代javascript”中很少看到抛出异常的原因)代码和用户使用错误回调)

如果查看tuneup_js中的
test
函数,它会捕获由
fail
引发的异常,然后调用
UIALogger.logFail
UIATarget.onAlert
将响应一些顶级警报事件,并在测试函数之外的该上下文中运行,因此触发异常意味着它不会被
test
中的try/catch块捕获

一个有效的方法是使用闭包将数据返回给调用者,例如:

test("My UI Test", function(app, target) {
    var failureName = null;
    setupOnAlert(function(name) {
        failureName = name;
    });
    // do something that might trigger a UIAlert
    if (failureName) {
        fail(failureName);
    }
});

function setupOnAlert(fail_callback) {
UITarget.onAlert = function(alert) {
    // do something that may fail, if it fails:
    fail_callback("Some kind of error");
}
}
希望有帮助