Protractor 使用量角器保存屏幕截图
我正试图在量角器中使用通用方法保存一个屏幕截图。有两个功能,它在文件夹不存在时创建文件夹,并保存文件(在特定条件下) 这可以通过调用Protractor 使用量角器保存屏幕截图,protractor,Protractor,我正试图在量角器中使用通用方法保存一个屏幕截图。有两个功能,它在文件夹不存在时创建文件夹,并保存文件(在特定条件下) 这可以通过调用browser.takeScreenshot().then(png=>WriteScreenShot(png,'login/login page'))来使用使用这个示例调用,我假设将在WriteScreenShot方法的文件所在的相对路径中创建一个文件。但情况似乎并非如此 例如,当我在spec文件夹中运行spec测试时,图像会保存在正确的位置。但是如果我在项目根目录
browser.takeScreenshot().then(png=>WriteScreenShot(png,'login/login page'))来使用代码>使用这个示例调用,我假设将在WriteScreenShot方法的文件所在的相对路径中创建一个文件。但情况似乎并非如此
例如,当我在spec文件夹中运行spec测试时,图像会保存在正确的位置。但是如果我在项目根目录下运行它,就会出现一个错误。显然,这与我的相对路径引用有关。如何捕获项目的根目录并从中构建,以便可以从任何目录运行测试?这是一个典型的目录访问错误。让我解释一下你的代码发生了什么-
let path =filename.substring(0, filename.lastIndexOf('/'));
上述行输出到。/../../../test reports
fs.existsSync
检查此路径是否存在-
案例1:(正向流)您的spec文件夹与您尝试创建报告文件夹的当前工作目录相同。当您运行测试时,路径存在,它生成测试报告
目录和屏幕截图,您的代码运行正常
案例2:(负流)当您尝试从根目录(当前工作目录)运行它时,fs.existsSync
尝试检查其中的路径和报告文件夹。如果它不存在,fs.mkdirSync
尝试创建目录,但会失败,因为它无法创建多个目录
import * as path from 'path';
let {mkdirp} = require('mkdirp'); // npm i -D mkdirp
export function WriteScreenShot(data: string, filename: string) {
let datetime = moment().format('YYYYMMDD-hhmmss');
filename = `../../../test-reports/${filename}.${datetime}.png`;
let filePath = path.dirname(filename); // output: '../../..' (relative path)
// or
let filePath = path.resolve(__dirname); // output: 'your_root_dir_path' (absolute path)
// or
let filePath = path.resolve('.'); // output: 'your_root_dir_path' (absolute path)
if (!fs.existsSync(filePath )) {
mkdirp.sync(filePath); // creates multiple folders if they don't exist
}
let stream = fs.createWriteStream(filename);
stream.write(new Buffer(data, 'base64'));
stream.end();
}
您应该使用nodejs的本机path模块来提取路径,而不是使用文件子字符串和mkdirp外部模块来创建多个目录
import * as path from 'path';
let {mkdirp} = require('mkdirp'); // npm i -D mkdirp
export function WriteScreenShot(data: string, filename: string) {
let datetime = moment().format('YYYYMMDD-hhmmss');
filename = `../../../test-reports/${filename}.${datetime}.png`;
let filePath = path.dirname(filename); // output: '../../..' (relative path)
// or
let filePath = path.resolve(__dirname); // output: 'your_root_dir_path' (absolute path)
// or
let filePath = path.resolve('.'); // output: 'your_root_dir_path' (absolute path)
if (!fs.existsSync(filePath )) {
mkdirp.sync(filePath); // creates multiple folders if they don't exist
}
let stream = fs.createWriteStream(filename);
stream.write(new Buffer(data, 'base64'));
stream.end();
}
如果您想知道这两者之间的区别,请阅读此文。您能给出一个如何运行配置以及从何处运行配置的示例吗?有几种方法可以做到这一点,但是运行脚本的位置对于确定最佳解决方案非常有用。我还找到了应用程序根路径模块。