Nội dung bài học
🔹 1. Ngôn ngữ hỗ trợ
-
Selenium
-
Hỗ trợ nhiều ngôn ngữ: Java, Python, C#, Ruby, JavaScript, Kotlin.
-
Cộng đồng lớn, lâu đời (ra mắt từ 2004).
-
-
Playwright
-
Ban đầu chỉ hỗ trợ JavaScript/TypeScript, sau đó mở rộng thêm Python, Java, .NET.
-
Số lượng ngôn ngữ ít hơn Selenium, nhưng hiện đã đủ phổ biến để dùng trong hầu hết dự án.
-
👉 Kết luận: Selenium đa dạng hơn, nhưng Playwright đang bắt kịp nhanh chóng.
🔹 2. Kiến trúc & Cách hoạt động
-
Selenium
-
Dựa trên WebDriver Protocol (JSON Wire Protocol/W3C).
-
Cần driver riêng cho từng browser (ChromeDriver, GeckoDriver, EdgeDriver...).
-
Nhiều khi lỗi version mismatch giữa browser và driver.
-
-
Playwright
-
Giao tiếp trực tiếp với browser thông qua DevTools Protocol (không qua middle driver).
-
Hỗ trợ headless, automation nhanh và ổn định hơn.
-
Cài đặt dễ: chỉ cần
npm install playwrightlà tải luôn cả browser (Chromium, Firefox, WebKit).
-
👉 Kết luận: Playwright hiện đại, ổn định hơn, Selenium phụ thuộc driver nhiều.
🔹 3. Hỗ trợ đa trình duyệt & nền tảng
-
Selenium
-
Chrome, Firefox, Edge, Safari, IE (legacy).
-
Hỗ trợ tốt cross-platform (Windows, Linux, macOS).
-
Mobile: Selenium Grid + Appium.
-
-
Playwright
-
Chromium (Chrome, Edge), Firefox, WebKit (Safari engine).
-
Hỗ trợ mobile emulation (device viewport, geolocation, permissions...) mà không cần Appium.
-
Tuy nhiên, test native mobile app thì vẫn cần Appium.
-
👉 Kết luận: Selenium mạnh khi đi cùng Appium (native + web app), Playwright tiện cho mobile web & emulation.
🔹 4. Tốc độ & Hiệu năng
-
Selenium
-
Chậm hơn do đi qua WebDriver protocol.
-
Nhiều thao tác cần
wait, dễ gặp flaky test.
-
-
Playwright
-
Nhanh hơn nhiều vì dùng DevTools Protocol.
-
Có auto-waiting (tự chờ element xuất hiện, load xong mới thao tác).
-
Ít flaky test hơn.
-
👉 Kết luận: Playwright nhanh và ổn định hơn rõ rệt.
🔹 5. API & Cách viết test
-
Selenium
-
API lâu đời, cú pháp dài hơn.
-
Nhiều khi phải kết hợp thêm thư viện ngoài cho wait/handling advanced cases.
-
-
Playwright
-
API hiện đại, ngắn gọn.
-
Hỗ trợ built-in cho nhiều thao tác khó:
-
Auto-wait
-
Network interception
-
Multi-tab, multi-page
-
File upload/download
-
Mouse, keyboard, touchscreen events.
-
-
👉 Kết luận: Playwright dễ dùng và code nhanh hơn Selenium.
🔹 6. Hỗ trợ song song & CI/CD
-
Selenium
-
Có Selenium Grid để chạy song song, cross-browser.
-
Tuy nhiên, cấu hình Grid phức tạp.
-
-
Playwright
-
Built-in parallel execution.
-
Có Playwright Test Runner đi kèm, dễ tích hợp CI/CD.
-
👉 Kết luận: Playwright dễ setup hơn, Selenium mạnh khi scale lớn nhờ Grid.
🔹 7. Báo cáo & Debug
-
Selenium
-
Không có sẵn test runner/reporter.
-
Thường kết hợp với TestNG, JUnit, PyTest, Mocha, Allure, Extent Report…
-
-
Playwright
-
Đi kèm Playwright Test Runner với HTML reports, trace viewer, video recording.
-
Debug dễ hơn (snapshot DOM, replay step by step).
-
👉 Kết luận: Playwright tích hợp sẵn, Selenium phải ghép thêm nhiều công cụ.
🔹 8. Cộng đồng & Hệ sinh thái
-
Selenium
-
Lâu đời, cộng đồng lớn, nhiều tài liệu, nhiều integration.
-
Được dùng nhiều trong doanh nghiệp lớn, lâu năm.
-
-
Playwright
-
Cộng đồng nhỏ hơn, nhưng đang phát triển rất nhanh.
-
Được hỗ trợ bởi Microsoft.
-
Nhiều framework hiện đại (như QA Wolf, Checkly) đang chọn Playwright thay vì Selenium.
-
👉 Kết luận: Selenium “cổ điển nhưng vững chắc”, Playwright “trẻ nhưng bùng nổ nhanh”.
🔹 9. So sánh nhanh
| Tiêu chí | Selenium | Playwright |
|---|---|---|
| Ngôn ngữ | Java, Python, C#, JS, Ruby... | JS/TS, Python, Java, .NET |
| Kiến trúc | WebDriver Protocol | DevTools Protocol |
| Cài đặt | Cần driver cho từng browser | Tự tải browser đi kèm |
| Trình duyệt | Chrome, Firefox, Edge, Safari, IE | Chromium, Firefox, WebKit |
| Mobile | Appium (native/web) | Mobile emulation (chưa native) |
| Hiệu năng | Chậm hơn, flaky | Nhanh, auto-wait, ổn định |
| Test Runner | Không có sẵn | Có sẵn (Playwright Test) |
| Parallel | Selenium Grid (khó config) | Built-in |
| Báo cáo | Cần thư viện ngoài | Có sẵn (HTML, trace, video) |
| Cộng đồng | Lớn, lâu đời | Mới, phát triển nhanh |
✅ Kết luận tổng quan:
-
Dùng Selenium nếu bạn cần:
-
Hệ sinh thái cũ, nhiều ngôn ngữ lạ (Ruby, Kotlin…).
-
Kết hợp Appium để test native mobile app.
-
Tích hợp vào framework doanh nghiệp lâu năm.
-
-
Dùng Playwright nếu bạn muốn:
-
Bắt đầu mới, ưu tiên tốc độ & độ ổn định.
-
Hỗ trợ tốt web hiện đại (SPA, Angular, React, Vue).
-
Debug trực quan, báo cáo đẹp, CI/CD dễ dàng.
-
Mình sẽ làm demo Code với Selenium Java và Playwright JavaScript.
Cùng kịch bản: mở Google → nhập "Anh Tester" → nhấn Enter → in ra tiêu đề trang.
🔹 Demo với Selenium Java
👉 File: GoogleSearchTest.java
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class GoogleSearchTest {
public static void main(String[] args) {
// Khởi tạo ChromeDriver (cần driver phù hợp với version Chrome)
WebDriver driver = new ChromeDriver();
// Mở Google
driver.get("https://www.google.com");
// Tìm ô input và nhập từ khóa
WebElement searchBox = driver.findElement(By.name("q"));
searchBox.sendKeys("Anh Tester");
searchBox.sendKeys(Keys.ENTER);
// In tiêu đề
System.out.println("Page title: " + driver.getTitle());
// Đóng browser
driver.quit();
}
}
✅ Nhận xét:
-
API hơi dài dòng. Cần phải chỉ định rõ ràng loại XPath hay CSS, ID,...
-
Không có auto-wait, phải cần dùng
WebDriverWait.
🔹 Demo với Playwright JavaScript
👉 File: google-search.js
const { chromium } = require('playwright');
(async () => {
// Khởi tạo browser
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
// Mở Google
await page.goto('https://www.google.com');
// Nhập từ khóa
await page.fill('input[name="q"]', 'Anh Tester');
await page.keyboard.press('Enter');
// Playwright tự động wait, chỉ cần chờ kết quả xuất hiện
await page.waitForSelector('h3');
// In tiêu đề
console.log('Page title:', await page.title());
// Đóng browser
await browser.close();
})();
✅ Nhận xét:
-
API ngắn gọn và nhiều hàm hỗ trợ xử lí hơn Selenium, rất tiện lợi.
-
Có auto-wait, code gọn hơn.
-
Debug dễ hơn (
headless: false), có cái TraceViewer hỗ trợ khá mạnh.
📌 Tổng kết:
-
Selenium Java: vẫn phù hợp để làm auto web, tuy nhiên cần học và am hiểu sâu để custom, kết hợp Appium để auto Mobile ngon.
-
Playwright JS: code hiện đại, dễ viết, chạy nhanh, hợp với dự án web dạng UI mới (React, Angular, Vue…). Chưa hỗ trợ auto mobile native.
🔹 Nếu bạn chọn Selenium
✅ Ưu điểm cho người mới:
-
Tài liệu, tutorial nhiều nhất (Google, StackOverflow, YouTube, Chat AI đều có).
-
Nhiều ngôn ngữ hỗ trợ: Java, Python, C#, JS, PHP,… bạn học ngôn ngữ nào cũng có Selenium.
-
Làm quen với khái niệm cơ bản trong automation test: WebDriver, Locator, Wait, Assertion…
-
Được dùng rộng rãi trong các công ty lâu năm → dễ xin việc.
❌ Nhược điểm với người mới:
-
Cài đặt hơi phức tạp (phải setup driver, version phù hợp với trình duyệt).
-
Dễ gặp flaky test nếu chưa hiểu sâu về wait.
-
API dài dòng, đôi khi hơi khó nhớ.
Flaky Test = test case automation mà kết quả không ổn định:
-
Có lúc chạy pass, có lúc chạy fail mặc dù code của ứng dụng không thay đổi.
Nói cách khác:
-
-
Test không phản ánh đúng trạng thái thật sự của ứng dụng.
-
Gây mất niềm tin vào bộ code test automation. (chứ nó lúc chạy ngon lúc chết ngang thì ai chịu nổi 😝)
-
Nói vậy thôi chứ nếu học tại Anh Tester dạy bạn phần này rất kỹ và sâu nên không xảy ra chuyện này được đâu 😋
🔹 Nếu bạn chọn Playwright
✅ Ưu điểm cho người mới:
-
Cài đặt siêu nhanh (chỉ cần
npm install playwrighthoặcpip install playwright). -
Không cần lo driver, browser đã tích hợp.
-
API hiện đại, gọn, dễ nhớ → học nhanh hơn.
-
Có sẵn auto-wait, test runner, báo cáo HTML, video, trace → ít phải ghép nhiều tool.
-
Debug trực quan (có trace viewer, chụp ảnh DOM theo step).
❌ Nhược điểm với người mới:
-
Cộng đồng chưa lớn bằng Selenium.
-
Hỗ trợ ít ngôn ngữ hơn, mạnh nhất vẫn là JavaScript/TypeScript.
-
Ít được dạy trong các khóa học cũ/truyền thống.
🔹 Lời khuyên cho người mới
👉 Nếu mục tiêu của bạn là:
-
Xin việc nhanh, học nền tảng căn bản, dễ tìm tài liệu → bắt đầu với Selenium (Java hoặc Python).
-
Học nhanh, làm dự án web hiện đại, muốn thấy kết quả đẹp & trực quan → bắt đầu với Playwright (JS/TS hoặc Python).
📌 Kinh nghiệm thực tế:
-
Rất nhiều tester học Selenium trước để hiểu cơ bản.
-
Sau đó học thêm Playwright để nắm công cụ mới, code gọn và debug dễ hơn.
👉 Tóm gọn:
-
Người mới học để đi làm → Selenium (Java/Python).
-
Người mới học để thử automation nhanh, hiện đại → Playwright (JS/Python).

Anh Tester
facebook.com/anhtester
Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu