WebdriverIO

npm install @tracera/webdriverio

需要 Node.js ≥ 22.19 和 WebdriverIO ≥ 9(见 自动化测试适配器)。@tracera/webdriverio。

在 wdio.conf.ts(Mocha)中:

export const config = {
  reporters: ['spec', ['@tracera/webdriverio/reporter', {}]],
  services: [['@tracera/webdriverio/service', {}]],
  mochaOpts: {
    require: ['@tracera/webdriverio/setup'],
  },
};

对于 Cucumber,注册相同的 reporter 与 service。优先使用 Scenario 标签 @tracera.id:‹id›(可选 @tracera.name:…),或在 Before hook / step 中调用 tracera.testCase。

启用重试时只上报 最终 一次 WebdriverIO 尝试。若该次是重试(retry > 0),结果 Env 页会包含 WEBDRIVERIO_RETRY(1 表示第二次运行)。

环境变量与运行模式见 自动化测试适配器。

绑定 testCaseId 与 autotestName

通过 mochaOpts.require 加载 @tracera/webdriverio/setup(修补 Mocha 全局变量),并导入 tracera / annotations。若未设置 autotestName,适配器使用 Mocha / Scenario 标题。

Mocha — 在声明时(推荐):

import { annotations } from '@tracera/webdriverio';

it(
  'login',
  annotations(42, 'e2e/login', async () => {
    await browser.url('https://example.com');
  }),
);

若 Mocha 接受第二个参数为 options 对象,也可写成 it("login", annotations(42, "e2e/login"), async () => { … })。

Mocha — 在测试体内(若 annotations 已绑定用例则可省略):

import { tracera } from '@tracera/webdriverio';

it('login', async () => {
  tracera.testCase(42, 'e2e/login');
  await browser.url('https://example.com');
});

Cucumber — Scenario 标签(推荐):

@tracera.id:42
@tracera.name:e2e%2Flogin
Scenario: login
  Given I open the login page

省略 @tracera.name:… 时,以 Scenario 标题作为 autotestName。若不用 Scenario 标签绑定,则在 Before hook / step 中调用 tracera.testCase。

步骤

使用 tracera.step。加载 @tracera/webdriverio/setup 后,标准 Mocha beforeEach / afterEach 已仪器化 — 其中的步骤进入 准备 / 清理。

import { tracera } from '@tracera/webdriverio';

beforeEach(async () => {
  await tracera.step('open shop', async () => {
    await browser.url('/shop');
  });
});

it('checkout', async () => {
  tracera.testCase(10, 'e2e/checkout');
  await tracera.step('add to cart', async () => {
    await $('[data-testid=add]').click();
  });
});

afterEach(async () => {
  await tracera.step('cleanup', async () => {
    await browser.url('/cart/clear');
  });
});

注释、错误与附件

在步骤内是该步骤的字段。在步骤外是结果上的字段。文件请使用 tracera.attachment(结果最多 10 个附件,每个步骤最多 10 个)。

import { tracera } from '@tracera/webdriverio';

it('login', async () => {
  tracera.testCase(42, 'e2e/login');
  tracera.comment('result-level note');
  tracera.error('result-level error text');

  await tracera.step('open login', async () => {
    await browser.url('/login');
    tracera.comment('landed on login');
    tracera.attachment({
      fileName: 'suite-log.txt',
      mimeType: 'text/plain',
      data: new TextEncoder().encode('finished login flow'),
    });
  });
});