Trong quy trình kiểm thử tự động hóa ứng dụng web, việc lặp lại thao tác đăng nhập ở mỗi lần chạy kịch bản thường gây lãng phí thời gian và tài nguyên hệ thống. Playwright hỗ trợ cơ chế lưu trữ trạng thái phiên làm việc (storage state), bao gồm cookies và local storage, cho phép tái sử dụng phiên đã xác thực mà không cần thực hiện lại quy trình đăng nhập thủ công.
Nguyên lý hoạt động của Storage State
Khác với việc chỉ trích xuất cookie riêng lẻ, phương thức storage_state trong Playwright cho phép lưu trữ toàn bộ ngữ cảnh duyệt web hiện tại. Dữ liệu này được mã hóa vào file JSON và có thể được nạp lại khi khởi tạo trình duyệt mới, giúp duy trì trạng thái đăng nhập xuyên suốt các lần thực thi script khác nhau.
Quy trình lưu trữ trạng thái sau khi xác thực
Bước đầu tiên là thực hiện đăng nhập bình thường trên ứng dụng mục tiêu. Ngay sau khi xác thực thành công, gọi phương thức lưu trữ để ghi lại thông tin phiên làm việc vào tệp tin cục bộ.
from playwright.sync_api import sync_playwright
def thuc_hien_dang_nhap_va_luu():
with sync_playwright() as p:
# Khởi tạo trình duyệt ở chế độ hiển thị để quan sát thao tác
trinh_duyet = p.chromium.launch(headless=False)
nguoc_canh = trinh_duyet.new_context()
trang = nguoc_canh.new_page()
# Truy cập vào trang quản trị yêu cầu xác thực
trang.goto("https://example-automation-target.com/dashboard")
# Điền thông tin xác thực vào form
trang.fill("#field-username", "admin_account")
trang.fill("#field-password", "secure_pass_123")
trang.click("#button-login-submit")
# Đợi trang tải hoàn tất các yêu cầu mạng
trang.wait_for_load_state("networkidle")
# Lưu trữ toàn bộ trạng thái bao gồm cookie vào file JSON
nguoc_canh.storage_state(path="trang_thai_phien.json")
trinh_duyet.close()
if __name__ == "__main__":
thuc_hien_dang_nhap_va_luu()
Đoạn mã trên sẽ sinh ra file trang_thai_phien.json chứa dữ liệu phiên làm việc. Lưu ý rằng các selector như #field-username cần được điều chỉnh phù hợp với cấu trúc DOM của ứng dụng thực tế mà bạn đang kiểm thử.
Tái sử dụng trạng thái để truy cập nhanh
Ở các lần chạy script tiếp theo, thay vì thực hiện lại các thao tác điền form, ta chỉ cần nạp file trạng thái đã lưu vào ngữ cảnh trình duyệt ngay khi khởi tạo. Điều này giúp trang web tự động nhận diện người dùng đã đăng nhập mà không cần tương tác thêm.
from playwright.sync_api import sync_playwright
def xac_thuc_truy_cap_nhanh():
with sync_playwright() as p:
# Khởi tạo trình duyệt và nạp trạng thái lưu trữ trước đó
trinh_duyet = p.chromium.launch(headless=False)
nguoc_canh = trinh_duyet.new_context(storage_state="trang_thai_phien.json")
trang = nguoc_canh.new_page()
# Truy cập thẳng vào trang yêu cầu quyền hạn
trang.goto("https://example-automation-target.com/dashboard")
# Chụp ảnh màn hình để xác minh giao diện đã đăng nhập
trang.screenshot(path="anh_man_hinh_kiem_tra.png")
trinh_duyet.close()
if __name__ == "__main__":
xac_thuc_truy_cap_nhanh()
Việc xác minh thành công có thể thực hiện thông qua kiểm tra URL hiện tại, sự hiện diện của các phần tử dành riêng cho user đã đăng nhập, hoặc chụp ảnh màn hình như ví dụ trên. Phương pháp này đặc biệt hữu ích khi chạy hàng loạt test case yêu cầu quyền truy cập đã xác thực mà không muốn duy trì session quá lâu gây rủi ro bảo mật.