使用selenium webdriver for JavaScript在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)
堆栈由本地mocha
目录的selenium
和node_modules
库中的一系列深层嵌套函数组成,实际测试脚本test.js
甚至不是堆栈。
我想知道,如果这是我从这个设置中获得的最佳信息,如果我做错了什么?
答案 0 :(得分:1)
是的,这对于所有无意义的async traceback cruft来说实在是太多了,而且没有真正有用的信息,但是最重要的部分,webdriver错误本身,是最重要的,并且非常自我描述:
NoSuchElementError:无法找到元素: { “方法”: “ID”, “选择器”: “doesnotexit”}
您可以尝试在mocha-clean
包的帮助下清理输出。应用时,它应该真正留下错误消息本身,只有堆栈跟踪的相关部分消除所有mocha
- 和selenium-webdriver
- 具体:
Mocha堆栈跟踪中充斥着您不想看到的帧, 喜欢来自模块和Mocha内部的代码。它去除摩卡 内部,node_modules,绝对路径(基于cwd)等 完全不必要的。