WebdriverIO
npm install @tracera/webdriverio
Нужны Node.js ≥ 22.19 и WebdriverIO ≥ 9 (см. Адаптеры автотестов). @tracera/webdriverio на npm.
В 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:…), либо вызов tracera.testCase из хука Before или из step.
При повторах WebdriverIO в отчёт уходит только финальная попытка. Если это повтор (retry > 0), во вкладке Env будет WEBDRIVERIO_RETRY (1 — второй запуск).
Переменные окружения и режим прогона: Адаптеры автотестов.
Привязка testCaseId и autotestName
Подключите @tracera/webdriverio/setup через mochaOpts.require (оборачивает глобальные API 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:… в autotestName попадёт название Scenario. Чтобы привязать кейс без тегов Scenario, вызовите tracera.testCase из хука Before или из step.
Шаги
Используйте 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 вложений у результата и у каждого шага).
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'),
});
});
});