Thiết lập Môi trường Windows để Playwright Vận hành Ổn Định
Hạ tầng kiểm thử tự động trong doanh nghiệp thường sử dụng máy chủ Windows hoặc Jenkins agent chạy trên nền tảng này. Mặc dù Playwright hỗ trợ đầy đủ cho Windows, nhưng để tránh các sự cố tiềm ẩn liên quan đến thư viện hệ thống, chế độ không giao diện (headless), tài khoản dịch vụ và độ dài đường dẫn, người dùng cần thực hiện một số bước cấu hình đặc thù. Nội dung dưới đây tập trung vào các giải pháp kỹ thuật cho môi trường Windows.
1. Điều kiện Tiên quyết về Hệ thống
Đảm bảo máy chủ đáp ứng các thông số kỹ thuật tối thiểu trước khi cài đặt:
| Thành phần | Yêu cầu Cấu hình |
|---|---|
| Hệ điều hành | Windows 10/11 (64-bit) hoặc Windows Server 2016 trở lên |
| Python | Phiên bản 3.8 đến 3.12 (Khuyến nghị dùng 3.10+ |
| RAM | Tối thiểu 4 GB (Tăng cường nếu chạy song song nhiều browser) |
| Dung lượng ổ cứng | Còn trống ít nhất 2 GB (Dành cho engine trình duyệt) |
2. Quy trình Cài đặt
Thực hiện tuần tự các bước sau để thiết lập môi trường thực thi:
:: 1. Cài đặt Python (Nhớ tích chọn Add to PATH)
:: Tải từ https://www.python.org/downloads/windows/
:: 2. Cài đặt các gói thư viện cần thiết
python -m pip install playwright pytest pytest-playwright
:: 3. Tải browser kèm theo các phụ thuộc hệ thống (Cần quyền Admin)
playwright install --with-deps chromium
:: Lưu ý: Nếu chỉ cần engine mà không cài deps hệ thống:
:: playwright install chromium firefox webkit
Lệnh --with-deps yêu cầu quyền quản trị viên để cài đặt các runtime thiếu hụt thông qua winget (ví dụ: VC++ Redistributable). Trong trường hợp máy bị hạn chế mạng, việc cài thủ công Microsoft Visual C++ Redistributable có thể khắc phục hầu hết lỗi khởi động.
3. Xử lý các Lỗi Khởi động Thường gặp
| Thông báo Lỗi | Nguyên nhân | Phương án Khắc phục |
|---|---|---|
Microsoft Visual C++ Runtime error |
Thiếu thư viện chạy VC++ | Cài đặt VC++ Redistributable hoặc chạy lại lệnh --with-deps |
The system cannot find the file specified |
Trình duyệt chưa được tải về | Thực thi lại lệnh playwright install |
Target page, context or browser has been closed |
Vấn đề handle cửa sổ ở chế độ headless | Sử dụng channel="msedge" hoặc nâng cấp version Playwright |
Executable doesn't exist |
Biến môi trường PATH không trỏ đúng | Kiểm tra sự tồn tại của thư mục %USERPROFILE%\AppData\Local\ms-playwright |
| Lỗi đường dẫn tiếng Việt/độ dài | Giới hạn ký tự đường dẫn Windows | Di chuyển project vào đường dẫn ngắn (ví dụ: C:\tests), bật hỗ trợ long path |
4. Cấu hình Chế độ Headless
Trong các kịch bản CI/CD hoặc lên lịch chạy tự động, chế độ không giao diện là bắt buộc. Dưới đây là ví dụ về cách khởi tạo browser an toàn:
from playwright.sync_api import sync_playwright
def execute_audit():
with sync_playwright() as playwright:
# Khởi chạy browser ẩn giao diện
browser_instance = playwright.chromium.launch(headless=True)
# Tạo context với viewport cụ thể để đảm bảo ảnh chụp chuẩn
context = browser_instance.new_context(viewport={"width": 1920, "height": 1080})
tab = context.new_page()
tab.goto("https://example.com")
tab.emulate_media(media="screen")
tab.screenshot(path="capture.png")
browser_instance.close()
Lưu ý quan trọng:
- Trên Windows Server bản rút gọn, chế độ headless vẫn có thể yêu cầu cài đặt gói "Desktop Experience" hoặc bổ sung font chữ để tránh lỗi ký tự tiếng Việt bị vỡ khi chụp ảnh màn hình.
- Nếu ảnh chụp bị trắng, hãy thiết lập rõ ràng
viewportvà thêm các bước chờ (wait strategy) phù hợp.
5. Vấn đề khi Chạy qua Jenkins hoặc Task Scheduler
5.1. Tài khoản Dịch vụ thiếu Session Desktop
Khi Jenkins chạy dưới dạng Windows Service, nó không có phiên làm việc tương tác (interactive desktop), dẫn đến việc chế độ headed bị lỗi. Có hai hướng xử lý:
- Phương án tối ưu: Sử dụng chế độ
headlesscho toàn bộ test UI. - Phương án thay thế: Cấu hình Jenkins agent chạy dưới dạng process đăng nhập tương tác (không phải service) hoặc khởi động qua
javawsđể có session desktop.
5.2. Thiết lập Task Scheduler
Để lên lịch chạy script vào ban đêm, sử dụng lệnh sau (yêu cầu tích chọn "Run whether user is logged on or not" và lưu mật khẩu):
:: Tạo task chạy lúc 3:30 sáng hàng ngày
schtasks /create /tn "AutoTestJob" ^
/tr "D:\automation_project\run.bat" ^
/sc daily /st 03:30 ^
/ru "ADMIN\svc_account" /rp "password"
Nội dung file run.bat:
@echo off
cd /d D:\automation_project
.\venv\Scripts\activate.bat
python -m pytest --browser chromium --junitxml=report.xml -v
5.3. Quản lý Môi trường Ảo (venv)
Nên sử dụng venv để cô lập các thư viện, tránh xung đột với Python hệ thống:
python -m venv venv
.\venv\Scripts\activate
pip install playwright pytest pytest-playwright
playwright install chromium
6. Cấu hình Proxy và Tường lửa
Mạng nội bộ doanh nghiệp thường yêu cầu proxy để truy cập internet, khiến việc tải browser thất bại. Hãy thiết lập biến môi trường trước khi cài đặt:
:: Cấu hình proxy trước khi tải browser
set HTTPS_PROXY=http://proxy.company.com:8080
set HTTP_PROXY=http://proxy.company.com:8080
playwright install chromium
Nếu hệ thống cần test nằm trong mạng nội bộ, đảm bảo process Playwright có quyền truy cập đến địa chỉ đích (có thể cấu hình whitelist trong file .env).
7. Khắc phục Lỗi Font chữ Tiếng Việt
Các phiên bản Windows Server tối giản thường thiếu font chữ hiển thị, khiến nội dung tiếng Việt trên ảnh chụp bị ô vuông. Giải pháp:
- Vào Control Panel → Region → Administrative → Change system locale → Tích chọn "Beta: Use Unicode UTF-8".
- Cài đặt bổ sung các font phổ biến như Microsoft YaHei hoặc Source Han Sans.
- Khởi động lại máy để áp dụng thay đổi.
8. Danh sách Kiểm tra Cấu hình (Checklist)
| Trạng thái | Hạng mục Kiểm tra |
|---|---|
| □ | Python đã được thêm vào PATH, lệnh python --version hoạt động |
| □ | Lệnh playwright install --with-deps chromium hoàn tất thành công |
| □ | Chế độ headless chụp ảnh màn hình bình thường (đã test cục bộ) |
| □ | Nếu chạy bằng service account, đã chuyển sang headless hoặc agent tương tác |
| □ | Biến môi trường HTTPS_PROXY đã được thiết lập đúng |
| □ | Font chữ hiển thị tiếng Việt chính xác trên ảnh chụp |
| □ | Đường dẫn project ngắn, không chứa ký tự đặc biệt hoặc tiếng Việt |
Các vấn đề trên Windows thường xoay quanh bốn yếu tố: thư viện hệ thống, phiên làm việc desktop, font chữ và độ dài đường dẫn. Xử lý dứt điểm các điểm này sẽ giúp Playwright hoạt động ổn định tương đương trên Linux.