Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Chrome中捕获JS错误_Javascript_Google Chrome_Testing_Selenium_Selenium Webdriver - Fatal编程技术网

Javascript 在Chrome中捕获JS错误

Javascript 在Chrome中捕获JS错误,javascript,google-chrome,testing,selenium,selenium-webdriver,Javascript,Google Chrome,Testing,Selenium,Selenium Webdriver,我用window.onerror捕获应用程序中的js错误,但问题是-在Chrome中,如果没有打开开发工具-那么传递给onerror处理程序的url参数始终等于打开的url 如果dev tools已打开,则url指向导致js错误的确切.js文件 你是怎么处理的?有什么解决办法吗 更清楚地说,这里有两个结果: 未捕获引用错误:未定义索引:122-这是在获取页面后收到的 uncaughtreferenceerror:a未定义列表。js:122-这是在获取打开开发工具的同一页面后收到的。这是一个预期的

我用
window.onerror
捕获应用程序中的js错误,但问题是-在Chrome中,如果没有打开开发工具-那么传递给
onerror
处理程序的
url
参数始终等于打开的url

如果dev tools已打开,则
url
指向导致js错误的确切
.js
文件

你是怎么处理的?有什么解决办法吗

更清楚地说,这里有两个结果:

  • 未捕获引用错误:未定义索引:122
    -这是在获取页面后收到的
  • uncaughtreferenceerror:a未定义列表。js:122
    -这是在获取打开开发工具的同一页面后收到的。这是一个预期的结果-我已经把
    a()
    调用
    List.js
    文件进行测试
  • UPD:这是为功能测试而做的(使用selenium webdriver)-我想捕获js错误以供进一步调查。

    这是一个非常值得尝试的答案,但可能会有所帮助

    最近添加的Chrome<代码>chrome://inspect/到方便的URL列表(请参见
    chrome://chrome-urls/
    查看完整列表)。不幸的是,我找不到我读到的关于此事的推特或博客帖子,但我认为这是在上个月。这个URL在Chrome 28上确实有效

    chrome://inspect/
    列出所有打开的选项卡,其中包含检查链接,该链接重定向回现有打开的页面,但也会打开DevTools


    我认为selenium测试可以在一个选项卡中打开被测站点,在第二个选项卡中打开inspect页面,按照
    inspect
    链接返回测试页面,但这次打开的是DevTools,允许
    window.OneError
    捕获更好的错误

    比如:

    document.getElementsByClassName('row')[n].getElementsByTagName('a')[0].click()
    

    让我们提出以下架构:

    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);
    } 
    
    现在任何
    抛出新错误(“说明”)
    将遍历if语句的第一部分,并有一个很好的堆栈供您使用URL进行解析

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

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

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

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


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

    如果您要查找需要修复的异常,我建议打开开发工具的“源”选项卡,然后使用“暂停所有/未捕获异常”在面板的左下角。@Fabricio Matté:这是用于功能测试的-我想捕获js错误以供进一步调查。很抱歉,我没有一开始就提到它。它实际上不是关于应用程序级别的错误处理,而是关于意外的js错误,例如调用非函数或访问未定义变量的属性。是的,它也可以工作。我将在2分钟内添加一个屏幕截图,这很好,因为在我调用不存在的
    a()
    函数的示例中,它不会提供任何新编辑的内容。请注意,您没有看到完整的URL,因为我使用的handleException会截断它。但是您有完整的URI,我相信这是您要求的。是的,对于异步操作,我还制作了一个特定的管理器来处理这种情况。;)“然后在第二个选项卡中打开检查页面”--我不确定,但如果可以-那么这可能是一个解决方案,谢谢:-)
        try {
            oTask.func.apply(oTask.obj, oTask.prms);
        } catch(ex) {
            handleException(ex);
            return false;
        }