Đang tải...

Các loại Wait trong Playwright – Cách xử lý đồng bộ hiệu quả trong kiểm thử tự động

08/05/2026
4 phút đọc
Các loại Wait trong Playwright – Cách xử lý đồng bộ hiệu quả trong kiểm thử tự động
Trong kiểm thử tự động với web, một trong những vấn đề phổ biến nhất là **đồng bộ (synchronization)** giữa test script và trạng thái thực tế của ứng dụn...

Trong kiểm thử tự động với web, một trong những vấn đề phổ biến nhất là đồng bộ (synchronization) giữa test script và trạng thái thực tế của ứng dụng. Nếu không xử lý đúng, test có thể bị flaky (lúc pass lúc fail).

Playwright giải quyết vấn đề này rất tốt nhờ cơ chế auto-waiting kết hợp với nhiều loại wait linh hoạt giúp bạn kiểm soát chính xác thời điểm thực thi.

1. Auto-waiting (Cơ chế mặc định)

Playwright có cơ chế tự động chờ trước khi thực hiện hành động. Điều này giúp giảm rất nhiều lỗi timing trong test.

Khi bạn thực hiện một action như click, Playwright sẽ tự động đảm bảo element:

  • Đã có trong DOM
  • Hiển thị (visible)
  • Không bị animation
  • Đang ở trạng thái sẵn sàng tương tác
  • Có thể nhận sự kiện
await page.locator('#button').click();

👉 Bạn không cần thêm wait thủ công trong hầu hết các trường hợp.

2. Wait theo trạng thái (Selector States)

Trong một số tình huống đặc biệt, bạn cần chờ element đạt một trạng thái cụ thể.

Chờ hiển thị (visible)

await page.locator('.modal').waitFor({ state: 'visible' });

Chờ ẩn (hidden)

await page.locator('.spinner').waitFor({ state: 'hidden' });

Chờ attach/detach DOM

await page.locator('#dynamic').waitFor({ state: 'attached' });

👉 Cách này hữu ích khi làm việc với modal, loading spinner hoặc DOM động.

3. Wait cho Navigation (Điều hướng trang)

Khi làm việc với chuyển trang, Playwright hỗ trợ chờ URL hoặc trạng thái load.

Chờ URL thay đổi

await page.goto('https://example.com');
await page.waitForURL('**/success');

Chờ trạng thái load của trang

await page.waitForLoadState('load');
await page.waitForLoadState('domcontentloaded');
await page.waitForLoadState('networkidle');

👉 Rất hữu ích khi test SPA hoặc trang có nhiều request API.

4. Custom Wait Function (Chờ theo điều kiện tùy chỉnh)

Khi logic phức tạp hơn, bạn có thể tự định nghĩa điều kiện chờ.

await page.waitForFunction(() => {
 return document.querySelector('.counter').innerText === '10';
});

Chờ với polling interval

await page.waitForFunction(
 () => window.someVariable === true,
 { polling: 100 }
);

👉 Dùng khi bạn cần kiểm tra state của UI hoặc biến JS trong page.

5. Wait với Timeout

Bạn có thể kiểm soát thời gian chờ tối đa cho từng tình huống.

Timeout cho element

await page.locator('.slow-element').waitFor({
 timeout: 60000
});

Timeout cho toàn bộ test

test.setTimeout(120000);

👉 Tránh test bị fail sớm khi hệ thống chậm.

6. Conditional Wait (Chờ điều kiện song song)

Trong một số case, bạn cần chờ nhiều khả năng xảy ra và lấy kết quả đầu tiên.

const result = await Promise.race([
 page.waitForSelector('.success'),
 page.waitForSelector('.error')
]);

👉 Hữu ích trong flow xử lý kết quả API hoặc trạng thái hệ thống không xác định trước.

Kết luận

Việc hiểu và sử dụng đúng các loại wait trong Playwright giúp bạn:

  • Giảm flaky test
  • Tăng độ ổn định test suite
  • Viết test ngắn gọn hơn nhờ auto-waiting
  • Xử lý tốt các tình huống UI phức tạp

Playwright đã thiết kế hệ thống wait rất thông minh, vì vậy thay vì lạm dụng sleep, bạn nên ưu tiên các cơ chế wait có sẵn để test trở nên đáng tin cậy hơn.

📚 Nguồn: Viblo

Bình luận

0 bình luận

Email không hiển thị công khai.

Chưa có bình luận nào. Hãy là người đầu tiên bình luận.

Chia sẻ bài viết

Cần tư vấn?

Liên hệ với chúng tôi để được hỗ trợ

Liên hệ ngay

Bài viết liên quan

How Can Algo Trading Bot Development Skyrocket Your Trading Success?
22/06/2026

How Can Algo Trading Bot Development Skyrocket Your Trading Success?

Why Businessmen and Startups Are Paying Attention Across boardrooms and small startup offices alike, a quiet shift is taking place. Business owners who once relied purely on instinct or hired analysts...

Đọc thêm
Mẹo giúp wifi FPT phủ sóng tốt hơn trong nhà rộng
22/06/2026

Mẹo giúp wifi FPT phủ sóng tốt hơn trong nhà rộng

Sở hữu một ngôi nhà rộng rãi, nhiều tầng là một trải nghiệm sống tuyệt vời. Tuy nhiên, điều này đôi khi lại mang đến một bài toán đau đầu về công ngh...

Đọc thêm
Xu Hướng Hạ Tầng Dữ Liệu Doanh Nghiệp 2026: Đám Mây (Cloud) Và Xử Lý Thời Gian Thực
22/06/2026

Xu Hướng Hạ Tầng Dữ Liệu Doanh Nghiệp 2026: Đám Mây (Cloud) Và Xử Lý Thời Gian Thực

Trong suốt thập kỷ qua, các doanh nghiệp thường dựa vào các hệ thống Cơ sở dữ liệu quan hệ (Relational Database) truyền thống xử lý theo lô (Batch Processing) vào...

Đọc thêm

Bắt đầu dự án của bạn

Hãy để Flash Dev đồng hành cùng bạn

Liên hệ ngay