报告附件
可以在步骤中将文本、图像或者JSON对象使用this.attach()
方法以附件的形式添加到运行报告中,根据需求可以将附件内嵌在报告的HTML文件中或作为外部文件链接使用,详情查看设置-报告。this.attach()
方法的用法如下:
this.attach(target, MIMEType?)
- target:
string
或Buffer
类型,要作为附件的变量。 - MIMEType: (可选)
string
类型。变量的MIME类型,默认为text/plain
,即普通文本,如果要添加图片,使用image/png
,要添加JSON,使用application/json
。 - 返回值: 没有任何返回值。
无需记忆所有的MIMEType类型,可以通过从代码工具箱中拖拽attach()
工具生成代码。
在一个步骤中多次的调用this.attach()
方法会将多个附件添加到同一个步骤中,并同时显示在报告中。
下面介绍了添加不同类型附件的方式介绍:
添加文本附件
默认情况下,文本以MIME类型 text/plain
来保存. 您也可以指定不同的MIME类型:
JavaScript
let { After } = require('cucumber');
After(function () {
this.attach('Some text');
});
添加图像附件
图像支持以Buffer
或base64
编码字符串作为附件到运行报告中,通常图像附件都是截图或者图片文件,这里提供了几种图像来源的附件方式:
屏幕截图并附件
在每个场景结束后对截屏并附件到运行报告中:
JavaScript
const { After } = require('cucumber');
const { Screen } = require('leanpro.common');
After(async function () {
let screenshot = Screen.capture();
this.attach(screenshot,'image/png');
})
控件截图并附件
在桌面应用自动化中,每个控件对象都提供了.takeScreenshot()
方法用于目标控件的截图,附件到运行报告中便于观察控件运行情况:
JavaScript
const { Given } = require('cucumber');
const { WinAuto } = require('leanpro.win');
let model = WinAuto.loadModel(__dirname + "/model1.tmodel");
Given("单击按钮并截图", async function () {
let btnScreenshot = await model.getButton("Button").takeScreenshot();
this.attach(btnScreenshot,'image/png');
});
Web截图并附件
在Web自动化中提供了页面截图和元素截图的方法(都叫screenshot()
),因此可用于Web截图并附件:
JavaScript
Given("浏览到搜索网站 {string}", async function (url) {
// 打开新页面
const page = await context.newPage();
await page.goto(url);
// 页面截图
let pageScreenshot = await page.screenshot();
this.attach(pageScreenshot, 'image/png');
// 元素截图
let header = await page.$('.carousel-inner');
let elementScreenshot = await header.screenshot();
this.attach(elementScreenshot, 'image/png');
});
添加对象附件
在运行报告中的对象附件,为了便于观察,通常是使用JSON.stringify()
方法格式化为字符串后作为附件添加到报告中。
JavaScript
Given("添加对象到报告中", async function () {
let object = {a:'foo', b:'bar', c: {d:'foo', e:'bar'}};
// 常规格式化
let objectString = JSON.stringify(object);
this.attach(objectString)
// 带制表符缩进的格式化
let objectStringWithIndent = JSON.stringify(object, null, '\t');
this.attach(objectStringWithIndent)
}