Javascript 在使用selenium webdriverjs运行mocha测试时,调用堆栈不是很有用

Javascript 在使用selenium webdriverjs运行mocha测试时,调用堆栈不是很有用,javascript,node.js,selenium,selenium-webdriver,mocha.js,Javascript,Node.js,Selenium,Selenium Webdriver,Mocha.js,当使用SeleniumWebDriverforJavaScript调用堆栈在mocha中运行测试时,它并没有真正的帮助 作为一个简单的例子,我使用了以下简单的测试脚本test.js: var webdriver = require('selenium-webdriver'), test = require('selenium-webdriver/testing'); const TIMEOUT = 30000; test.describe('selenium webdriverjs'

当使用SeleniumWebDriverforJavaScript调用堆栈在mocha中运行测试时,它并没有真正的帮助

作为一个简单的例子,我使用了以下简单的测试脚本
test.js

var webdriver = require('selenium-webdriver'),
    test = require('selenium-webdriver/testing');

const TIMEOUT = 30000;

test.describe('selenium webdriverjs', function () {
    var driver;

    this.timeout(TIMEOUT);

    test.before(function () {
        driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.firefox()).build();
        driver.manage().timeouts().pageLoadTimeout(TIMEOUT);
    });

    test.after(function () {
        driver.quit();
    });

    test.it('error stack', function () {
        driver.get('http://www.google.com');
        driver.findElement(webdriver.By.id('doesnotexit'));
    });
});
当(例如)从Gulp运行时,会生成以下错误堆栈:

  selenium webdriverjs
    1) error stack


  0 passing (4s)
  1 failing

  1) selenium webdriverjs error stack:
     NoSuchElementError: Unable to locate element: {"method":"id","selector":"doesnotexit"}
      at new bot.Error (...\node_modules\selenium-webdriver\lib\atoms\error.js:108:18)
      at Object.bot.response.checkResponse (...\node_modules\selenium-webdriver\lib\atoms\response.js:109:9)
      at ...\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:379:20
      at promise.Promise.goog.defineClass.invokeCallback_ (.../node_modules/selenium-webdriver/lib/goog/../webdriver/promise.
js:1337:14)
      at promise.ControlFlow.goog.defineClass.goog.defineClass.abort_.error.executeNext_.execute_ (.../node_modules/selenium-
webdriver/lib/goog/../webdriver/promise.js:2776:14)
      at promise.ControlFlow.goog.defineClass.goog.defineClass.abort_.error.executeNext_ (.../node_modules/selenium-webdriver
/lib/goog/../webdriver/promise.js:2758:21)
      at goog.async.run.processWorkQueue (...\node_modules\selenium-webdriver\lib\goog\async\run.js:124:15)
  From: Task: selenium webdriverjs error stack
      at Context.ret (...\node_modules\selenium-webdriver\testing\index.js:128:10)
      at callFnAsync (...\node_modules\mocha\lib\runnable.js:306:8)
      at Test.Runnable.run (...\node_modules\mocha\lib\runnable.js:261:7)
      at Runner.runTest (...\node_modules\mocha\lib\runner.js:421:10)
      at ...\node_modules\mocha\lib\runner.js:528:12
      at next (...\node_modules\mocha\lib\runner.js:341:14)
      at ...\node_modules\mocha\lib\runner.js:351:7
      at next (...\node_modules\mocha\lib\runner.js:283:14)
      at Immediate._onImmediate (...\node_modules\mocha\lib\runner.js:319:5)
堆栈由本地
node_modules
目录的
mocha
selenium
库中的一系列深度嵌套函数组成,实际测试脚本
test.js
甚至不是堆栈的一部分


我想知道,如果我只是做错了什么,这是否真的是我能从这个设置中获得的最好信息?

是的,对于所有毫无意义的异步回溯来说,这确实是太多不必要的信息,也不是很有帮助的信息,但最重要的是,webdriver错误本身,位于顶部,非常自我描述:

NoSuchElementError:无法定位元素: {“方法”:“id”,“选择器”:“doesnotexit”}

您可以尝试在软件包的帮助下清理输出。应用时,它应该真正保留错误消息本身,并且只保留堆栈跟踪的相关部分,消除所有特定于
mocha
-和
selenium webdriver
-的内容:

摩卡咖啡栈的痕迹布满了你不想看到的框架, 就像来自模块和摩卡内部的代码。它会剥去摩卡咖啡 内部、节点模块、绝对路径(基于cwd)和其他 不必要的原油


在这个示例文件中,这很容易,但在实际的生产脚本中,要找到错误的来源可能需要非常长的时间。这真的是这个环境能够帮助我调试脚本的最好方法吗?@materialStreams更新了答案,请尝试
mocha clean
,看看它对您是否足够好。我并不真正关心mocha clean可以删除的堆栈帧,而是真正忽略了任何错误源于我自己代码的指示。