🚀 Giới Thiệu

Khi nói đến test tự động hóa trên trình duyệt, hai công cụ phổ biến nhất hiện nay là SeleniumPlaywright. Trong khi Selenium đã tồn tại từ lâu và được sử dụng rộng rãi, Playwright đang dần trở thành lựa chọn tối ưu hơn nhờ hiệu suất nhanh hơn, API thân thiện hơn và hỗ trợ nhiều tính năng nâng cao.

Vậy Playwright có những hàm nào tối ưu hơn Selenium? Bài viết này sẽ liệt kê các trường hợp mà Playwright giúp bạn viết code gọn hơn, dễ bảo trì hơn và hoạt động hiệu quả hơn.


🔥 1. check() & uncheck() – Kiểm Soát Checkbox Dễ Dàng

📌 Vấn đề với Selenium: Selenium không có hàm kiểm tra checkbox trực tiếp. Bạn phải dùng .is_selected().click() để đảm bảo trạng thái checkbox đúng.

✅ Playwright đơn giản hơn:

await page.getByRole('checkbox').check();   // Đảm bảo checkbox được chọn
await page.getByRole('checkbox').uncheck(); // Đảm bảo checkbox bị bỏ chọn

🚀 Selenium cần xử lý thủ công:

if not checkbox.is_selected():
    checkbox.click()  # Chỉ chọn nếu chưa chọn

if checkbox.is_selected():
    checkbox.click()  # Chỉ bỏ chọn nếu đang được chọn

👉 Lợi ích của Playwright: Không cần kiểm tra trạng thái trước, API đơn giản hơn.


🎯 2. hover() – Di Chuột Đơn Giản

📌 Selenium phức tạp hơn: Để hover, Selenium phải dùng ActionChains.

✅ Playwright:

await page.getByRole('button').hover();

🚀 Selenium:

from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(driver)
actions.move_to_element(button).perform()

👉 Lợi ích của Playwright: Gọn hơn, không cần gọi nhiều class phụ trợ.


💡 3. fill() – Nhập Văn Bản Không Cần clear()

📌 Vấn đề với Selenium: Nếu input đã có sẵn dữ liệu, bạn cần .clear() trước khi nhập.

✅ Playwright:

await page.getByRole('textbox').fill('Hello Playwright');

🚀 Selenium:

input_box.clear()
input_box.send_keys("Hello Selenium")

👉 Lợi ích của Playwright: Tự động ghi đè nội dung cũ, không cần clear() thủ công.


📌 4. selectOption() – Chọn Giá Trị Dropdown Dễ Dàng

📌 Selenium phải dùng Select class:

✅ Playwright:

await page.getByRole('combobox').selectOption('option_value');

🚀 Selenium:

from selenium.webdriver.support.ui import Select
select = Select(driver.find_element(By.TAG_NAME, "select"))
select.select_by_value("option_value")

👉 Lợi ích của Playwright: Không cần import thêm thư viện, API trực quan hơn.


5. waitForSelector() – Chờ Phần Tử Tối Ưu Hơn

📌 Selenium phải dùng WebDriverWait:

✅ Playwright:

await page.waitForSelector('#my-element', { state: 'visible' });

🚀 Selenium:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'my-element')))

👉 Lợi ích của Playwright: Ngắn gọn hơn, dễ hiểu hơn.


🎯 Khi Nào Nên Chọn Playwright Thay Vì Selenium?

Khi cần tốc độ cao hơn: Playwright nhanh hơn do không phụ thuộc vào WebDriver.
Khi cần test trên nhiều trình duyệt đồng thời: Playwright hỗ trợ chạy song song trên Chromium, Firefox, WebKit.
Khi muốn code gọn gàng, dễ bảo trì hơn: API của Playwright được thiết kế trực quan, ít cần import thêm thư viện phụ trợ.
Khi làm việc với JavaScript/TypeScript: Playwright hỗ trợ tốt hơn vì được xây dựng dành cho Node.js.


🎯 Khi Nào Nên Chọn Selenium?

✅ Khi bạn đã có dự án Selenium cũ và không muốn chuyển đổi.
✅ Khi cần test trên trình duyệt Internet Explorer (Playwright không hỗ trợ IE).
✅ Khi làm việc với Java, Python, C# thay vì JavaScript/TypeScript.


🚀 Kết Luận

Playwright là lựa chọn tối ưu hơn nếu bạn muốn tốc độ nhanh hơn, code ngắn gọn hơn và hỗ trợ nhiều tính năng mạnh mẽ. Tuy nhiên, Selenium vẫn có lợi thế nếu bạn đã có dự án cũ hoặc cần hỗ trợ cho một số trình duyệt đặc biệt.

Nếu bạn mới bắt đầu với test automation, hãy thử Playwright trước! Bạn sẽ thấy sự khác biệt ngay lập tức. 🚀