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، سجّل نفس المُبلِّغ والخدمة. فضّل وسوم السيناريو @tracera.id:‹id› (واختياريًا @tracera.name:…)، أو استدعِ tracera.testCase من خطاف Before / خطوة.

مع إعادة المحاولة يُبلَّغ عن محاولة WebdriverIO النهائية فقط. إن كانت إعادة محاولة (retry > 0) تظهر WEBDRIVERIO_RETRY في تبويب Env (1 تعني التشغيل الثاني).

متغيرات البيئة ووضع التشغيل: محوّلات الاختبار الآلي.

ربط testCaseId و autotestName

حمّل @tracera/webdriverio/setup عبر mochaOpts.require (يرقّع عامّات 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 — وسوم السيناريو (المفضّل):

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

احذف @tracera.name:… لاستخدام عنوان السيناريو كـ autotestName. للربط دون وسوم السيناريو، استدعِ tracera.testCase من خطاف Before أو من خطوة.

الخطوات

استخدم 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'),
    });
  });
});