捕获Chrome中的JS错误

zer*_*kms 5 javascript testing selenium google-chrome selenium-webdriver

我在应用程序中捕获js错误window.onerror,但事情是 - 如果没有打开dev工具,则在Chrome中 - 那么url传递给onerrorhandler 的参数总是等于打开的url.

如果开启了dev工具 - 那么url指向确切.js文件会导致js错误.

你如何解决?有没有解决方法?

更清楚 - 这里有2个结果:

  1. Uncaught ReferenceError: a is not defined index:122 - 这是在获取页面后收到的
  2. Uncaught ReferenceError: a is not defined List.js:122 - 在打开dev工具获取同一页面后收到此消息.这是预期的结果 - 我已经a();调用该List.js文件进行测试.

UPD:这是为功能测试(使用selenium webdriver)完成的 - 我想捕获js错误以供进一步调查.

Seb*_*bas 1

让我们提出以下架构:

window.addEventListener("error", handleException, false);

function handleException(I_sMsg) {

    if (I_sMsg.stack) {
            sMsg = I_sMsg.stack.replaceAll(getBaseURL(), "");
        alert(sMsg);
    } else if (I_sMsg.message) {
        alert(I_sMsg.message);
    }   

    return cancelEvent(I_sMsg);
} 
Run Code Online (Sandbox Code Playgroud)

现在,anythrow new Error("description");将执行 if 语句的第一部分,并有一个很好的堆栈供您使用 url 进行解析。

它也适用于意外异常,因此出现以下消息(在本例中是在调用不存在的bibi()函数之后)

意外异常的屏幕截图

经过进一步调查,我的框架正在使用某种自制的作业管理(实际上如堆栈所示),其中每个操作都属于一个作业。

作业执行方法如下(简化)

    try {
        oTask.func.apply(oTask.obj, oTask.prms);
    } catch(ex) {
        handleException(ex);
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

因此,这意味着每个单独的执行都封装在这个单独的 try catch 块中。如您所见,异常被捕获并传递给处理程序。不是错误

我虽然它在另一个文件中工作,但这是因为调用是封装的,而直接在 api.js 文件中,它是一个不受框架管理的免费调用。