量角器不会在詹金斯截屏

Protractor won't take screenshot in Jenkins

当 Protractor 中的测试失败时,我正在使用以下代码截取屏幕截图(在每个之后):

function failScreenshot() {
var fs = require('fs');
var spec = jasmine.getEnv().currentSpec;
var specName = spec.description.split(' ').join('_');

if (spec.results().passed()) {
    return;
} else {
    browser.takeScreenshot().then(
            function(png) {
                var stream = fs.createWriteStream('screenshots/' + specName + '.png');
                stream.write(new Buffer(png, 'base64'));
                stream.end();
            });
}

}

当我 运行 在本地进行测试时,屏幕截图按预期工作。当 运行 通过 Jenkins 进行测试时,测试将在第一次失败时停止并且不会创建屏幕截图。另外,文件夹和路径都是正确的,我反复检查过。我的 Jenkins 版本是 1532.1

有什么办法可以解决这个问题吗?

在进一步的文档之后我找到了答案。这是路径的问题。好像NODE JS没有像我想的那样读取路径

./ returns 当前目录,require() 函数中除外。使用 require() 时,它会读取 ./ 到调用它的文件的目录(显然,错误就在这里)。 __dirname 始终是其中使用的文件的目录。 用于我的路径的代码如下:

__dirname + '/screenshots/' + specName + '.png'

您也可以使用 mocha-proshot 报告器在 jenkins 中截取屏幕截图。

这是一个 npm 包,可以轻松下载并且非常容易安装。