Playwright

Duy Văn | 06/02/2025


Playwright là một framework mã nguồn mở dành cho kiểm thử tự động trên trình duyệt web, nó được back bởi Microsoft.

Điểm mạnh mà Playwright mang lại so với framework tiên phong - Selenium là:

  • tương tác nhiều trình duyệt thông qua một API (còn Selenium thì cần WebDriver riêng cho mỗi trình duyệt) - kể cả Safari cũng hỗ trợ với WebKit chứ không cần phải có con Mac bên cạnh
  • tốc độ nhanh hơn cùng hiệu năng tốt hơn
  • Built-in autowaiting, tức là không cần phải viết thêm code để chờ cho element xuất hiện, Playwright tự động chờ cho đến khi element xuất hiện (Selenium cần explicit wait)
  • Headless mode của Playwright nhanh và được tối ưu
  • Multi-context, tức là có thể mở nhiều trang web cùng lúc trong một trình duyệt (Selenium chỉ mở một trang web trong một trình duyệt)
  • Điểm rất mạnh ứng dụng cho API Testing là khả năng chặn request và response, thay đổi header, giúp cho việc kiểm thử API trở nên dễ dàng hơn.
  • Với web testing, nó hỗ trợ lưu lại cache, cookies, local storage, session storage, hữu dụng khi test sử dụng tính năng login

Ở phần blog này mình sẽ cố gắng bám sát mảng API Testing với Playwright, trình duyệt thì về cơ bản sẽ giống Selenium thôi, không có gì đặc biệt lắm.

Cài đặt Playwright

Ở đây chúng ta sẽ dùng Playwright Python, tức là pytest với Playwright

pip install pytest-playwright
playwright install

Ở đây, chúng ta nên tạo một virtual environment để cài đặt Playwright, vì nó sẽ cài thêm một số thứ khá nặng

python -m venv venv
source venv/Scripts/activate

Sau đó mới chạy pip install pytest-playwright và playwright install

Nếu ở bước activate gặp lỗi cannot be loaded because running scripts is disabled on this system, thì là do cài đặt Policy trên máy windows chặn chạy script powershell, mở powershell ở chế độ quyền admin và chạy lệnh sau: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

Sử dụng Playwright

Đầu tiên, mình quyết định dùng VSCode, vì rõ ràng Python trên VSCode rất ổn, thứ hai, Playwright là do nhà Microsoft phát triển, nên chắc chắn sẽ tương thích tốt với VSCode, cũng do nhà Microsoft phát triển.

Đầu tiên, khi vào mục Testing trên VSCode

Test VSCode

Bạn sẽ được config để playwright hoạt động với library nào, các lựa chọn bao gồm: unittest, pytest

Mình sẽ chọn Pytest

Sau đấy, chúng ta có thể viết một bài test đầu tiên, sau đây là bài test ví dụ trên doc của Playwright

import re
from playwright.sync_api import Page, expect

def test_has_title(page: Page):
    page.goto("https://playwright.dev/")

    # Expect a title "to contain" a substring.
    expect(page).to_have_title(re.compile("Playwright"))

def test_get_started_link(page: Page):
    page.goto("https://playwright.dev/")

    # Click the get started link.
    page.get_by_role("link", name="Get started").click()

    # Expects page to have a heading with the name of Installation.
    expect(page.get_by_role("heading", name="Installation")).to_be_visible()

Thứ nhất, khi config pytest, chúng ta chọn đâu làm nơi đặt folder test thì pytest sẽ tìm file .py trong folder đó, thứ hai, file phải có tên bắt đầu bằng test_ để pytest nhận diện.

Sau đó ,để chạy tất cả bài test, chúng ta chỉ cần chạy lệnh pytest, để chạy một bài test cụ thể, chúng ta chỉ cần chạy pytest test_file.py, hoặc nếu đặt theo folder cụ thể, chúng ta chạy pytest folder_name\test_file.py

Cấu trúc thư mục

Tất cả mọi file python test đều phải bắt đầu bằng test_, và chúng ta nên tạo một folder riêng để chứa các file test, cấu trúc thư mục sẽ như sau:

project
│   README.md
│   requirements.txt
│   .gitignore
|   test
│   └── test_file.py

Đồng thời, các function test cũng nên bắt đầu bằng test_, để pytest nhận diện làm test case

Trên đây là cấu trúc đơn giản nhất, lưu ý là đã config folder chứa test là test thì khi đấy thích cấu trúc file trong folder thế nào thì làm, miễn là chúng nó ở trong folder test là được. Vậy nên nếu đang làm browser auto, việc code theo POM hay sắp xếp folder theo POM đều khả thi