Tổng hợp đầy đủ các Assertions trong Playwright - Hướng dẫn chi tiết từ cơ bản đến nâng cao
Giới thiệu
Trong bài viết trước về Playwright Assertions và Wait, chúng ta đã tìm hiểu về các khái niệm cơ bản và cách sử dụng assertions trong Playwright. Bài viết này sẽ mở rộng và đi sâu hơn vào tất cả các loại assertions có sẵn trong Playwright, cùng với các ví dụ thực tế và best practices.
Tại sao cần hiểu rõ về Assertions?
Assertions là một phần không thể thiếu trong test automation, giúp chúng ta:
- Verify rằng ứng dụng hoạt động đúng như mong đợi
- Phát hiện lỗi và regression sớm
- Tạo ra test cases chắc chắn và đáng tin cậy
- Giảm thiểu false positives trong test results
Các loại Assertions trong Playwright
Playwright cung cấp nhiều loại assertions khác nhau để phục vụ các mục đích testing khác nhau:
- Page Assertions: Kiểm tra các thuộc tính của trang web như title, URL
- Element Assertions: Verify trạng thái và thuộc tính của các elements
- Count Assertions: Kiểm tra số lượng elements
- Screenshot Assertions: So sánh visual để phát hiện regression
- Custom Assertions: Tạo assertions riêng cho business logic cụ thể
- Soft Assertions: Cho phép test tiếp tục dù có assertion fail
Trong bài viết này, chúng ta sẽ đi qua từng loại assertion với các ví dụ cụ thể và best practices.
Page Assertions
Page assertions dùng để verify các thuộc tính của trang web:
1. Title Assertions
test('Page title assertions', async ({ page }) => {
await page.goto('https://dummy-demo-njndx.web.app');
// Kiểm tra title chính xác
await expect(page).toHaveTitle('Home | IT Demo Dummy');
// Kiểm tra title chứa substring
await expect(page).toHaveTitle(/Demo Dummy/);
// Kiểm tra title không chứa text nào đó
await expect(page).not.toHaveTitle(/Error/);
});
2. URL Assertions
test('Page URL assertions', async ({ page }) => {
await page.goto('https://dummy-demo-njndx.web.app');
// Kiểm tra URL chính xác
await expect(page).toHaveURL('https://dummy-demo-njndx.web.app/');
// Kiểm tra URL với regex
await expect(page).toHaveURL(/dummy-demo-njndx\.web\.app/);
// Navigate và kiểm tra URL thay đổi
await page.getByTestId('feature-link-todo_list').click();
await expect(page).toHaveURL(/todo-list/);
// Kiểm tra URL không chứa parameter nào đó
await expect(page).not.toHaveURL(/debug=true/);
});
3. Network và Response Assertions
test('Network response assertions', async ({ page }) => {
// Listen for API responses
const responsePromise = page.waitForResponse('**/api/todos');
await page.goto('https://dummy-demo-njndx.web.app/todo-list');
const response = await responsePromise;
// Kiểm tra response status
expect(response.status()).toBe(200);
expect(response.ok()).toBeTruthy();
// Kiểm tra response headers
expect(response.headers()['content-type']).toContain('application/json');
// Kiểm tra response body
const responseBody = await response.json();
expect(responseBody).toHaveProperty('todos');
expect(responseBody.todos).toBeInstanceOf(Array);
});
Yêu cầu đăng nhập
Vui lòng đăng nhập để truy cập nội dung này
Additional Resources
Course Guide
Comprehensive PDF guide with examples
GitHub Repository
Example code for all lessons
Discussion
Have a question about this lesson? Post it here and get answers from instructors and peers.