我设置了selenium测试以获取屏幕截图,但它们没有保存到我指定的目录中。任何人都能告诉我我错过了什么吗?
以下是我在测试中配置屏幕截图的方法:
function writeScreenshot(data, name) {
var fs = require('fs');
name = name || 'ss.png';
var screenshotPath = mkdirp(configuration.readSettings('screenshotDirectory') + fileNameURL + "/", function(err){});
fs.writeFileSync(screenshotPath + name, data, 'base64');
};
然后我截取屏幕截图:
driver.takeScreenshot().then(function(data) {
var screenshotFile = os + '_' + osVersion + '_' + browser + '_' + browserVersion + '.png';
writeScreenshot(data, screenshotFile);
});
屏幕截图最终会保存在项目根目录中,文件名前面带有' undefined'。 (例如undefinedWindows_8_chrome_46.png
)
但是,它会创建此处显示的文件夹:var screenshotPath = mkdirp(configuration.readSettings('screenshotDirectory') + fileNameURL + "/", function(err){});
为什么会发生这种情况?
答案 0 :(得分:2)
mkdirp()
function是异步的 - 它创建一个目录而不返回任何内容 - 这就是你在文件名中有前导undefined
的原因。
将文件保存在回调中:
var screenshotPath = configuration.readSettings('screenshotDirectory') + fileNameURL + "/";
mkdirp(screenshotPath, function (err) {
if (!err) {
fs.writeFileSync(screenshotPath + name, data, 'base64');
} else {
// handle error
}
});
或者,synchronously创建目录并以这种方式写入:
var screenshotPath = configuration.readSettings('screenshotDirectory') + fileNameURL + "/";
if (mkdirp.sync(screenshotPath)) {
fs.writeFileSync(screenshotPath + name, data, 'base64');
}
答案 1 :(得分:2)
mkdirp()
是一种异步方法。这就是你传递callback
的原因。您需要将代码更改为以下内容:
function writeScreenshot(data, name) {
var fs = require('fs');
name = name || 'ss.png';
var screenshotPath = configuration.readSettings('screenshotDirectory') + fileNameURL + "/";
mkdirp(screenshotPath, function(err){
if (err) {
// something else happened while creating the dir. You decide what to do
return;
}
// Otherwise (if dir was created)
fs.writeFileSync(screenshotPath + name, data, 'base64');
});
};