https://playwright.dev/docs/api/class-test
Playwright Test
- Playwright Test cung cấp function
test
để khai báo test và functionexpect
để 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.grep
vàtestProject.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 1test.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 1test.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 1test.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 đó
- Function thực thi test, được chạy ngay lập tức khi gọi
Trả lời