在iOS'中处理自定义javascript异常;UIS自动化UIATarget.onAlert
我已经建立了一些UIAutomation脚本,最终将成为jenkins测试。UIAutomation脚本不会以jenkins友好的格式输出,所以我使用,特别是这个 当测试失败时,我可以抛出一个自定义的在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
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");
}
}
希望有帮助