Site logo

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

5:00 read

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:

  1. Page Assertions: Kiểm tra các thuộc tính của trang web như title, URL
  2. Element Assertions: Verify trạng thái và thuộc tính của các elements
  3. Count Assertions: Kiểm tra số lượng elements
  4. Screenshot Assertions: So sánh visual để phát hiện regression
  5. Custom Assertions: Tạo assertions riêng cho business logic cụ thể
  6. 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.