Học Playwright tiếng Việt, Cộng đồng Playwright cho người Việt

Vọc Vạch Playwright

[Vọc Playwright] Auto waiting

https://playwright.dev/docs/actionability

Giới thiệu

  • Playwright tự động chờ (auto waiting) cho tới khi element được load xong trước khi thực hiện hành động được yêu cầu (VD: click, tab,…) trong 1 khoảng thời gian nhất định (timeout).
  • Nếu element không được load xong trong timeout, test sẽ fail với lỗi TimeoutError. Bạn có thể đọc thêm về timeout tại Playwright timeout

  • VD: Với action locator.click(), trước khi click vào element, Playwright sẽ:

    • Kiểm tra locator này trỏ đến 1 element duy nhất
    • Đợi element visible
    • Đợi element stable
    • Element không bị disabled hoặc che bởi 1 element khác
  • Bảng dưới đây nêu đầy đủ các bước Playwwight đợi các states của element trước khi thực hiện hành động được yêu cầu:

    Action Visible Stable Receives Events Enabled Editable
    locator.check() Yes Yes Yes Yes –
    locator.click() Yes Yes Yes Yes –
    locator.dblclick() Yes Yes Yes Yes –
    locator.setChecked() Yes Yes Yes Yes –
    locator.tap() Yes Yes Yes Yes –
    locator.uncheck() Yes Yes Yes Yes –
    locator.hover() Yes Yes Yes – –
    locator.dragTo() Yes Yes Yes – –
    locator.screenshot() Yes Yes – – –
    locator.fill() Yes – – Yes Yes
    locator.clear() Yes – – Yes Yes
    locator.selectOption() Yes – – Yes –
    locator.selectText() Yes – – – –
    locator.scrollIntoViewIfNeeded() – Yes – – –
    locator.blur() – – – – –
    locator.dispatchEvent() – – – – –
    locator.focus() – – – – –
    locator.press() – – – – –
    locator.pressSequentially() – – – – –
    locator.setInputFiles() – – – – –
  • Với 1 vài action nhất định, bạn có thể force Playwright không check 1 số states không cần thiết. Ví dụ, khi thêm param { force: true } vào hàm gọi action locator.click(), Playwright sẽ không kiểm tra xem element đó có nhận được sự kiện click() hay không:

await page.locator("#submit-button").click({ force: true });

Assertions

  • Tương tự với auto waiting, Playwright sẽ tự động chờ và kiểm tra liên tục các điều kiện mong muốn (VD: element đã enable chưa, checkbox đã được check chưa, …) thay vì báo fail test ngay lần kiểm tra đầu tiên.
  • Lưu ý là bạn cần sử dụng await khi gọi các phương thức assertion để chờ điều kiện được thực thi:
await expect(page.getByTestId("status")).toHaveText("Submitted");

Visible

  • Element được coi là visible khi có bounding box khác không và và không có thuộc tính CSS visibility:hidden, nên:
    • Element có width hoặc height bằng 0 không được coi là visible
    • Element có thuộc tính CSS display:none không được coi là visible
    • Element có opacity:0 được coi là visible

Stable

  • Element stable khi có bounding box giống nhau trong ít nhất 2 khung hình động liên tiếp

Enabled

  • Element sẽ được coi là enabled khi nó không phải button, select, input hoặc textarea có thuộc tính disabled.

Editable

  • Element có thể chỉnh sửa được khi nó enabled và không chứa thuộc tính readonly

Receives Events

  • Khi có 1 action, ví dụ là click() vào 1 button tại vị trí (10, 10), Playwright sẽ kiểm tra xem có 1 element nào khác tại vị trí (10, 10) (chẳng hạn là poup hay overlay) có nhận được sự kiện click() hay không.

Trả lời