Học Playwright tiếng Việt, Cộng đồng Playwright cho người Việt

Vọc Vạch Playwright

[Vọc Playwright] – Class test

https://playwright.dev/docs/api/class-test

Playwright Test

  • Playwright Test cung cấp function test để khai báo test và function expect để viết các assertion
import { test, expect } from '@playwright/test';

test('basic test', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  const name = await page.innerText('.navbar__title');
  expect(name).toBe('Playwright');
});

Methods

test

  • Khai báo 1 test
    • test(title, body)
    • test(title, details, body)
import { test, expect } from '@playwright/test';

test('basic test', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  // ...
});

Tags

  • Bạn có thể gán tag cho test bằng cách cung cấp thông tin chi tiết bổ sung cho test. Hoặc bạn có thể thêm tag vào title của test. Lưu ý rằng, mỗi tag phải bắt đầu bằng ký hiẹuw @
import { test, expect } from '@playwright/test';

test('basic test', {
  tag: '@smoke',
}, async ({ page }) => {
  await page.goto('https://playwright.dev/');
  // ...
});

test('another test @smoke', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  // ...
});
  • Test tag được hiển thị trong test report và có sẵn cho custom reporter thông qua TestCase.tags property
  • Bạn cũng có thể filter test theo tag của chúng trong quá trình thực thi test
    • Trong command line
    • Trong file config với testConfig.greptestProject.grep
  • Tìm hiểu thêm: https://playwright.dev/docs/test-annotations#tag-tests

Annotations

  • Bạn có thể thêm annotate cho test bằng cách cung cấp thông tin chi tiết bổ sung cho test
import { test, expect } from '@playwright/test';

test('basic test', {
  annotation: {
    type: 'issue',
    description: 'https://github.com/microsoft/playwright/issues/23180',
  },
}, async ({ page }) => {
  await page.goto('https://playwright.dev/');
  // ...
});
  • Test annotations được hiển thị trong test report và có sẵn cho custom reporter thông qua TestCase.annotations
  • Bạn cũng có thể thêm annotations trong thời gian chạy bằng cách thao tác với testInfo.annotations

Arguments

  • title string# : Tiêu đề test
  • details Object (optional) Added in: v1.42#
    • tag string | Array<string> (optional)
    • annotation Object | Array<Object> (optional)
      • type string
      • Annotation type, for example ‘issue’.
    • description string (optional)
    • Mô tả annotation optional, ví dụ: issue url
  • Additional test details.
  • body function(Fixtures, TestInfo)#
    • Test body nhận 1 hoặc 2 arguments: 1 object chứa các fixture và TestInfo (optional)

test.afterAll

  • test.afterAll là 1 function đặc biệt, được thực thi 1 lần cho mỗi worker sau khi tất cả test hoàn thành
  • Nếu bạn gọi test.afterAll trong phạm vi 1 file test, nó sẽ chạy sau tất cả các test trong file đó hoàn thành
  • Nếu bạn gọi test.afterAll bên trong 1 test.describe() group, nó sẽ chạy sau khi tất cả các test trong group đó hoàn thành
test.afterAll(async () => {
  console.log('Done with tests');
  // ...
});
  • Hoặc bạn co thể khai báo một hook với title
test.afterAll('Teardown', async () => {
  console.log('Done with tests');
  // ...
});

Arguments

  • title string (optional) Added in: v1.38#
    • Title của hook (optional)
  • hookFunction function(Fixtures, TestInfo)#
    • Function thực thi hook, nhận 1 hoặc 2 agrument: 1 object chứa các fixture của worker và TestInfo (optional)

Details

  • Khi có nhiều hook afterAll được thêm vào, chúng sẽ chạy theo thứ tự đăng ky
  • Lưu ý rằng tiến trình worker sẽ được restarted khi test bị lỗi và hook afterAll sẽ chạy lại trong worker mới
  • Playwright sẽ tiếp tục chạy tất cả các hook có liên quan ngay cả khi 1 sô hook bị lỗi
    • test.afterAll(hookFunction)
    • test.afterAll(title, hookFunction)

test.afterEach

  • test.afterEach là 1 function đặc biệt, được thực thi sau mỗi test
  • Nếu bạn gọi test.afterEach trong phạm vi 1 file test, nó sẽ chạy sau mỗi test trong file đó
  • Nếu bạn gọi test.afterEach bên trong 1 test.describe() group, nó sẽ chạy sau mỗi test trong group đó
import { test, expect } from '@playwright/test';

test.afterEach(async ({ page }) => {
  console.log(`Finished ${test.info().title} with status ${test.info().status}`);

  if (test.info().status !== test.info().expectedStatus)
    console.log(`Did not run as expected, ended up at ${page.url()}`);
});

test('my test', async ({ page }) => {
  // ...
});
  • Hoặc bạn cũng có thể khai báo với 1 hook với title
test.afterEach('Status check', async ({ page }) => {
  if (test.info().status !== test.info().expectedStatus)
    console.log(`Did not run as expected, ended up at ${page.url()}`);
});

Arguments

  • title: Tiêu đề của hook (optional)
  • hookFunction: Function thực thi hook, nhận 1 hoặc 2 tham số: 1 object chứa các fixture và TestInfo (optional)

Details

  • Khi có nhiều hook afterEach được thêm vào, chúng sẽ chạy theo thứ tự đăng ký
  • Playwright sẽ tiếp tục chạy tất cả các hook có liên quan ngay cả khi 1 số hook bị lỗi

test.beforeAll

  • test.beforeAll được thực thi một lần cho mỗi worker trước khi tất cả các test bắt đầu
  • Nếu gọi test.beforeAll trong phạm vi 1 file test, nó sẽ chạy trước khi tất cả các test trong file đó bắt đầu
  • Nếu gọi test.beforeAll bên trong 1 test.describe() group, nó sẽ chạy trước khi tất cả các test trong group đó bắt đầu
import { test, expect } from '@playwright/test';

test.beforeEach(async ({ page }) => {
  console.log(`Running ${test.info().title}`);
  await page.goto('https://my.start.url/');
});

test('my test', async ({ page }) => {
  expect(page.url()).toBe('https://my.start.url/');
});
  • Hoặc cũng có thể khai báo 1 hook với title
test.beforeEach('Open start URL', async ({ page }) => {
  console.log(`Running ${test.info().title}`);
  await page.goto('https://my.start.url/');
});

Arguments

  • title: Tiêu đề của hook (optional)
  • hookFunction: Function thực thi hook, nhận 1 hoặc 2 tham số: 1 object chứa các fixture của worker và TestInfo (optional)

Details

  • Khi có nhiều hook beforeAll được thêm vào, chúng sẽ chạy theo thứ tự đăng ký
  • Lưu ý rằng tiến trình worker sẽ được khởi động lại khi test bị lỗi và hook beforeAll sẽ chạy lại trong worker mới
  • Playwright sẽ tiếp tục chạy tất cả các hook có liên quan ngay cả khi 1 số hook bị lỗi

test.describe

  • test.describe cho phép group các test lại với nhau
    • test.describe(title, callback)
    • test.describe(callback)
    • test.describe(title, details, callback)
  • Bạn có thể khai báo 1 group test với title. Title sẽ hiển thị trong test report như 1 phần của title của mỗi test
test.describe('two tests', () => {
  test('one', async ({ page }) => {
    // ...
  });

  test('two', async ({ page }) => {
    // ...
  });
});

Anonymous group

  • Bạn cũng có thể khai báo 1 anonymous group test(không có title). Điều này rất tiện lợi để cung cấp 1 option chung cho 1 group test với test.use()
test.describe(() => {
  test.use({ colorScheme: 'dark' });

  test('one', async ({ page }) => {
    // ...
  });

  test('two', async ({ page }) => {
    // ...
  });
});

Tags

  • Bạn có thể gán tag cho tất cả các test trong 1 group bằng cách cung cấp addtional details. Lưu ý rằng mỗi thẻ phải bắt đầu bằng @
import { test, expect } from '@playwright/test';

test.describe('two tagged tests', {
  tag: '@smoke',
}, () => {
  test('one', async ({ page }) => {
    // ...
  });

  test('two', async ({ page }) => {
    // ...
  });
});

Annotations

  • Bạn có thể thêm annotations cho tất cả các test trong 1 group bằng cách cung cấp addtional details
import { test, expect } from '@playwright/test';

test.describe('two annotated tests', {
  annotation: {
    type: 'issue',
    description: 'https://github.com/microsoft/playwright/issues/23180',
  },
}, () => {
  test('one', async ({ page }) => {
    // ...
  });

  test('two', async ({ page }) => {
    // ...
  });
});

Arguments

  • title string (optional)
  • details Object (optional)
    • tag string | Array<string> (optional)
    • annotation Object | Array<Object> (optional)
      • type string
      • description string (optional)
    • Additional details for all tests in the group.
  • callback function
    • Function thực thi test, được chạy ngay lập tức khi gọi test.describe(). Bất kỳ test nào được khai báo trong function này sẽ thuộc về group test đó

Trả lời