•9 min read

TIÊU ĐỀ: Kiểm thử E2E với Playwright: 4 Quy tắc để không còn lỗi kiểm thử không ổn định

TIÊU ĐỀ: Kiểm thử E2E với Playwright: 4 Quy tắc để không còn lỗi kiểm thử không ổn định
Playwright E2E Modern Browser Automation Architecture

Microsoft Playwright về cơ bản đã khắc phục điều này. Bằng cách giao tiếp trực tiếp với các công cụ kết xuất trình duyệt thông qua Chrome DevTools Protocol (CDP) và luồng WebSocket, Playwright loại bỏ sự không ổn định với tính năng tự động chờ tích hợp, cách ly trình duyệt đa ngữ cảnh, và phân chia kiểm thử song song tự nhiên.

Trong hướng dẫn này, bạn sẽ nắm vững các mô hình tư duy, các phương pháp hay nhất về bộ định vị (locator), và các mẫu CI/CD cần thiết để xây dựng các bộ kiểm thử E2E cấp doanh nghiệp.


Audio Briefing
0:00 / 0:00

So sánh các Framework E2E: Playwright vs Cypress vs Selenium

Tính năngPlaywrightCypressSelenium
Giao tiếp với trình duyệt
WebSocket / DevTools Protocol trực tiếp
Thực thi iframe trong trình duyệt
Trình bao bọc HTTP WebDriver REST
Công cụ tự động chờ
Tích hợp sẵn: Kiểm tra khả năng hiển thị, độ ổn định và các sự kiện trước khi thực hiện hành động
Một phần (thường yêu cầu cy.wait hoặc thử lại)
Thủ công (Thread.sleep hoặc Explicit Waits)
Đa tab & Đa miền
Hỗ trợ tự nhiên trên các nguồn gốc & nhiều tab/cửa sổ
Hạn chế ràng buộc nguồn gốc một miền
Được hỗ trợ với việc chuyển đổi cửa sổ phức tạp
Tốc độ thực thi & Workers
BrowserContexts cô lập không tốn chi phí trong song song
Một kiểm thử trên mỗi tiến trình runner
Các phiên bản trình duyệt đầy đủ nặng nề

Advertisement

Quy trình khả năng thực thi tự động chờ

Tại sao Playwright không bao giờ cần sleep()? Trước khi thực hiện bất kỳ hành động nào (ví dụ: click, fill, hover), Playwright chạy một quá trình xác minh khả năng thực thi tự động gồm 6 bước:


3 Chế độ để tăng tốc quy trình làm việc của bạn

Chế độ UI của Playwright cung cấp cho bạn khả năng gỡ lỗi theo thời gian, chế độ xem, và chọn bộ định vị DOM trực quan theo thời gian thực:

# Launch interactive graphical test runner
npx playwright test --ui

Điểm nổi bật: Quay ngược qua các ảnh chụp DOM, kiểm tra các yêu cầu mạng theo từng bước, và kiểm thử các bộ định vị trực tiếp trong cây DOM.


Mẫu kiểm thử sản xuất: Luồng xác thực & giỏ hàng mạnh mẽ

import { test, expect } from "@playwright/test";

test.describe("E-Commerce Checkout Workflow", () => {
  test.beforeEach(async ({ page }) => {
    await page.goto("/store");
  });

  test("User can search, add item to cart, and reach payment screen", async ({ page }) => {
    // 1. Resilient Locator: Target user-facing semantic role
    const searchInput = page.getByRole("searchbox", { name: "Search products" });
    await searchInput.fill("Mechanical Keyboard");
    await page.keyboard.press("Enter");

    // 2. Locate product card and click Add to Cart
    const productCard = page.getByTestId("product-card").filter({ hasText: "Keychron K2" });
    await expect(productCard).toBeVisible();

    const addToCartButton = productCard.getByRole("button", { name: "Add to Cart" });
    await addToCartButton.click();

    // 3. Verify badge updates without manual wait
    const cartBadge = page.getByRole("status", { name: "Cart items" });
    await expect(cartBadge).toHaveText("1");

    // 4. Navigate to checkout and confirm form presence
    await page.getByRole("link", { name: "Proceed to Checkout" }).click();
    await expect(page).toHaveURL(/.*\/checkout/);

    const emailInput = page.getByLabel("Email address");
    await expect(emailInput).toBeFocused();
  });
});

Advertisement

4 Quy tắc cho các bộ E2E hoàn hảo

1. Ưu tiên các bộ định vị vai trò hướng người dùng

Tránh các bộ chọn CSS dễ vỡ như .btn-primary-2 hoặc #item > div:nth-child(3). Luôn sử dụng page.getByRole(), page.getByLabel(), hoặc page.getByText() phản ánh cách người dùng thực và trình đọc màn hình tương tác với trang.

2. Tận dụng chia sẻ xác thực BrowserContext

Đừng đăng nhập qua UI trong mỗi kiểm thử! Đăng nhập một lần trong thiết lập toàn cục, lưu trạng thái lưu trữ đã ký vào auth.json, và tái sử dụng trạng thái lưu trữ đã xác thực trên các worker kiểm thử song song.

3. Không bao giờ mã hóa cứng các lệnh Sleep

Thay thế mọi page.waitForTimeout(3000) bằng các xác nhận ưu tiên web như await expect(locator).toBeVisible() hoặc await page.waitForResponse().

4. Đính kèm Trace Viewer khi CI thất bại

Cấu hình trace: 'on-first-retry' trong playwright.config.ts. Khi một kiểm thử thất bại trong GitHub Actions, bạn sẽ nhận được một video đầy đủ, dòng thời gian hành động và gói ảnh chụp DOM để gỡ lỗi cục bộ.


Thẻ ghi nhớ thuật ngữ thiết yếu

Architecture

BrowserContext

Click to reveal
Architecture
Một phiên trình duyệt cô lập tương đương với chế độ ẩn danh trong một phiên bản trình duyệt duy nhất. Các ngữ cảnh được tạo ra trong mili giây, giúp các kiểm thử song song gần như không tốn chi phí.

BrowserContext

Best Practices

Web-First Assertions

Click to reveal
Best Practices
Các xác nhận như expect(locator).toBeVisible() tự động thử lại và thăm dò DOM cho đến khi kỳ vọng được đáp ứng hoặc hết thời gian chờ.

Web-First Assertions

Optimization

Storage State

Click to reveal
Optimization
Các cookie xác thực đã lưu, localStorage và dữ liệu phiên cho phép các kiểm thử bỏ qua các luồng đăng nhập lặp lại.

Storage State


Kiểm tra kiến thức tương tác


Các câu hỏi thường gặp

Có! Playwright hỗ trợ phân chia kiểm thử tự nhiên trong các nền tảng CI như GitHub Actions, cho phép bạn chia một bộ kiểm thử 30 phút thành 4 runner song song trong vòng chưa đầy 8 phút.

Playwright cho phép bạn chặn và giả lập bất kỳ yêu cầu HTTP/WebSocket nào trực tiếp bằng cách sử dụng các trình xử lý page.route() mà không cần máy chủ proxy bên ngoài.

Playwright cung cấp khả năng mô phỏng trình duyệt di động độ trung thực cao, mô phỏng kích thước khung nhìn thiết bị, cử chỉ chạm, tác nhân người dùng và tọa độ định vị GPS.


Bạn cũng có thể thích

Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement