报告附件

可以在步骤中将文本、图像或者JSON对象使用this.attach()方法以附件的形式添加到运行报告中,根据需求可以将附件内嵌在报告的HTML文件中或作为外部文件链接使用,详情查看设置-报告
this.attach()方法的用法如下:

this.attach(target, MIMEType?)

  • target: stringBuffer类型,要作为附件的变量。
  • 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');
});

添加图像附件

图像支持以Bufferbase64编码字符串作为附件到运行报告中,通常图像附件都是截图或者图片文件,这里提供了几种图像来源的附件方式:

屏幕截图并附件

在每个场景结束后对截屏并附件到运行报告中:

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)
}

results matching ""

    No results matching ""