使用selenium webdriverjs运行摩卡testing时不太有用的callstack

在使用JavaScript的selenium webdriver在mocha中运行testing时,调用堆栈并不是很有帮助。

作为一个简单的例子,我使用了以下简单的testing脚本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目录的mochaselenium库中的一系列深层嵌套函数组成,实际的testing脚本test.js甚至不是堆栈的一部分。

我想知道,如果这真的是我可以从这个设置得到的最好的信息,如果我只是做错了什么?

是的,这是太多的不必要的,并没有真正有用的信息与所有的毫无意义的asynchronous追溯cruft,但其中最重要的部分,webdriver错误本身,是最重要的,很自我描述

NoSuchElementError:找不到元素:{“method”:“id”,“selector”:“doesnotexit”}

你可以尝试清理输出与mocha-clean包的帮助。 应用时,应该真的留下错误信息本身,只有相关的堆栈跟踪部分消除了selenium-webdriver – 和selenium-webdriver – 具体:

摩卡堆栈的痕迹充满了你不想看到的框架,如模块和摩卡内部的代码。 它剥离掉摩卡内部,node_modules,绝对path(基于cwd)以及其他不必要的东西。