Hãy thử click vào bất kỳ bài "Top 50 câu hỏi phỏng vấn Selenium" nào trên mạng tiếng Việt hiện tại. Bạn sẽ thấy chúng giống nhau đến mức buồn cười:
Q: Selenium là gì? A: Selenium là một bộ công cụ tự động hóa trình duyệt mã nguồn mở do Jason Huggins phát triển năm 2004...
Q: Sự khác nhau giữa
findElementvàfindElements? A:findElementtrả về một WebElement,findElementstrả về danh sách WebElement...
Vấn đề là không interviewer nào hỏi vậy nữa. Họ không cần bạn đọc Wikipedia. Họ đã có ChatGPT cho việc đó. Họ muốn biết:
Đây là câu hỏi của người đang đi tuyển một đồng nghiệp thật sự. Và đây cũng là câu mà người làm 6 tháng với người làm 4 năm trả lời khác nhau một trời một vực.
Một điều cần thẳng thắn: cộng đồng dev front-end đang nói về Playwright và Cypress nhiều hơn Selenium. Có người thậm chí khuyên người mới bỏ qua Selenium.
Đây là lời khuyên sai cho thị trường Việt Nam.
Lý do: phần lớn enterprise và outsourcing tại Việt Nam vẫn chạy trên Java và .NET — hai stack mà Selenium có ecosystem mạnh nhất, được chống lưng lâu năm nhất. Một dự án bảo hiểm, ngân hàng, ERP đã đầu tư hàng nghìn giờ test với Selenium Grid trên CI sẽ không "vứt đi để dùng Playwright". Họ tuyển người bảo trì và mở rộng suite Selenium hiện tại.
Hơn nữa, Selenium 4 đã trưởng thành đáng kể:
Nói cách khác: nếu bạn nhắm vị trí QA Automation ổn định, lương khá, dự án lớn — Selenium vẫn là kỹ năng cốt lõi. Học Playwright thêm là tốt, nhưng đừng bỏ Selenium.
Sau nhiều buổi phỏng vấn thật (cả vai trò ứng viên lẫn người tuyển), mình tổng hợp lại 30 câu hỏi mà mình thấy hay xuất hiện nhất trong các buổi phỏng vấn Selenium tại Việt Nam và quốc tế. Mỗi câu được viết theo công thức 4 lớp:
Mình chia thành 2 phiên bản vì thực tế phỏng vấn có 2 dạng rất khác:
📘 Phiên bản 1 — Phỏng vấn nói miệng (19 trang PDF):
Dành cho vòng HR screen, vòng technical interview qua call, hoặc trao đổi face-to-face không có laptop. Interviewer hỏi miệng, bạn trả lời miệng.
Câu trả lời viết theo nhịp điệu hội thoại — không có code block, không có tên method khô khan như getWindowHandles() hay WebDriverWait. Thay vào đó là "lấy danh sách tab đang mở", "chờ có điều kiện". Mỗi câu kèm phần 💡 Mẹo nói hướng dẫn nhấn ý nào, dùng câu chốt ra sao.
Đọc to 2-3 lần là thuộc nhịp — không phải thuộc lòng từng chữ, mà thuộc cách dẫn dắt câu chuyện.
📗 Phiên bản 2 — Thực chiến có code (66 trang PDF):
Dành cho vòng live coding, take-home assignment, hoặc khi bạn muốn ôn kỹ thuật trước phỏng vấn. Java 100% với Selenium WebDriver 4 + TestNG/JUnit 5 — stack chuẩn enterprise.
Mỗi câu có code thật chạy được, kèm các bẫy thường gặp, anti-pattern cần tránh, và best practice từ kinh nghiệm thực tế. Có thể copy code này dùng thẳng cho dự án.
Để bạn hình dung tone và độ sâu, đây là vài ví dụ ngắn:
Câu hỏi này là một cái bẫy. Đừng trả lời "tuyệt đối không bao giờ" — interviewer sẽ counter bằng tình huống bất khả kháng. Cũng đừng nói "tùy trường hợp" mà không cụ thể.
Cách trả lời tốt: thừa nhận có một vài trường hợp nhỏ (debug local, chờ animation không có hook, reproduce race condition cố ý), nhưng nhấn vào quy tắc chung. Câu chốt trademark:
"Sleep là che bug, không phải fix bug. Nếu test cần sleep để pass, có nghĩa là tôi chưa hiểu vì sao test đang flaky."
Đây là câu phân biệt rõ nhất giữa người làm 3 tháng và người làm 3 năm. Câu trả lời lý thuyết "thì retry thôi" lập tức loại bạn khỏi vị trí mid-senior.
Câu trả lời tốt là kể một case thật theo công thức: triệu chứng → bằng chứng → nguyên nhân gốc → fix → kết quả đo được. Ví dụ: "Test fail 20% trên CI nhưng pass 100% local. Em bật screenshot khi fail, video record, console log. Sau 20 lần chạy có dữ liệu — phát hiện call API trên CI mất 1.8 giây trong khi local chỉ 200ms. Element xuất hiện trong DOM nhưng bị overlay che. Fix bằng đổi điều kiện chờ từ visibilityOf sang elementToBeClickable. Sau fix, fail rate về 0 sau 200 lần chạy."
Câu chốt: "Flaky test không phải để retry, mà để học."
Đây là kỹ thuật tối ưu suite mạnh nhất mà nhiều team chưa biết. Nếu mỗi test bạn đăng nhập qua UI — gõ email, gõ password, chờ chuyển trang — bạn đang lãng phí 5-10 giây mỗi test. Suite 100 test là 10 phút thuần lãng phí.
Bộ tài liệu code mẫu cách inject cookie và session từ một lần login duy nhất, hoặc cao cấp hơn là login qua API và set token vào localStorage — bypass UI hoàn toàn.
Mình đã từng dùng kỹ thuật này giảm thời gian một suite của dự án từ 25 phút xuống 9 phút mà không bỏ test nào.
Cả 2 phiên bản đều có cùng cấu trúc 30 câu chia 3 phần:
Phần 1 — Căn bản (Câu 1-10): Khái niệm cốt lõi, 8 loại locator, wait pattern, Page Object Model, stale element, Actions API, alert/frame/window, upload/download, screenshot khi fail, JavaScript executor.
Phần 2 — Framework và best practices (Câu 11-20): Project structure Maven, parallel execution với JUnit 5, Selenium Grid Docker, test data management, cookie injection và API login, retry mechanism, logging, Allure report, CI/CD GitHub Actions, cross-browser config.
Phần 3 — Nâng cao và kỹ thuật đặc biệt (Câu 21-30): Selenium 4 Relative Locators, Chrome DevTools Protocol network interception, performance metrics, visual regression testing, mobile web testing, database verification, BrowserStack/Sauce Labs integration, custom expected conditions, accessibility testing với axe-core, Page Factory pattern.
Đây là routine 1 tuần mình khuyên ứng viên nghiêm túc:
Ngày 1-2: Đọc lướt cả 2 file để hình dung tổng thể. Đánh dấu các câu mình không tự tin trả lời.
Ngày 3-4: Tập trung vào Phần 1 (10 câu căn bản). Đây là 80% câu hỏi sẽ được hỏi. Đọc to bản nói, gõ thử code của bản thực chiến.
Ngày 5-6: Phần 2 và 3 — đọc kỹ các case thật, các con số. Đây là chỗ tạo khác biệt giữa ứng viên giỏi và ứng viên xuất sắc.
Ngày 7: Tự phỏng vấn — bật ghi âm, lấy random 10 câu trả lời. Nghe lại sẽ phát hiện chỗ nào còn ấp úng. Lặp lại 2-3 lần là tự tin.
Trước buổi phỏng vấn 1-2 giờ: Lướt lại các "câu chốt trademark" trong bản nói. Một câu chốt đắt giá có thể quyết định cả buổi phỏng vấn.
Đừng cố thuộc lòng. Interviewer giỏi sẽ phát hiện ngay trong 30 giây đầu nếu bạn đang đọc thuộc. Họ sẽ đặt câu hỏi xoáy ngược để kiểm tra. Tài liệu này dùng để hiểu, không phải để nhớ.
Có case thật của mình. Mỗi câu trong bộ tài liệu có ví dụ — nhưng đó là ví dụ của mình. Bạn nên có 3 case story của riêng bạn: một về flaky test, một về tối ưu performance, một về xử lý feature khó. Mọi câu hỏi tình huống đều có thể quy về một trong ba case này.
Thành thật khi không biết. Câu "em chưa làm cụ thể cái này nhưng em sẽ tiếp cận theo cách..." mạnh hơn nhiều so với câu trả lời nửa vời. Interviewer trân trọng người biết cách học, không phải người biết tất cả.
Hỏi ngược lại interviewer. Cuối buổi, một câu hỏi tốt thể hiện bạn quan tâm thật sự: "Suite hiện tại của team chạy bao lâu? Tỉ lệ flaky là bao nhiêu?" — Nếu họ ấp úng hoặc nói "rất nhiều", đó là red flag về văn hóa engineering của công ty. Bạn cũng nên có quyền chọn lựa.
Cả 2 file PDF đều miễn phí, có thể tải về dùng offline, in ra hoặc đọc trên iPad. Footer mỗi trang có link Anh Tester để bạn ghi nhớ nguồn gốc và quay lại khi cần thêm tài liệu khác.
📘 30 câu hỏi phỏng vấn Selenium — Phiên bản phỏng vấn nói (19 trang)
📗 30 câu hỏi phỏng vấn Selenium — Phiên bản thực chiến có code (66 trang)
Selenium không phải là tool "hot" trên Twitter, không có người làm content hô hào 24/7 như Playwright hay Cypress. Nhưng nó là kỹ năng thực dụng trả tiền lương ổn định cho hàng nghìn QA Engineer tại Việt Nam và toàn cầu mỗi năm.
Mục tiêu của bộ tài liệu này không phải là biến bạn thành "chuyên gia Selenium". Mục tiêu là giúp bạn tự tin bước vào buổi phỏng vấn tiếp theo với đủ vũ khí để trả lời mọi câu hỏi thường gặp, và biết cách phản ứng khôn ngoan với câu hỏi mới.
Chúc bạn phỏng vấn thành công. Nếu tài liệu giúp ích, hãy chia sẻ cho đồng nghiệp đang cần — đây là cách tốt nhất để cộng đồng QA Việt Nam mạnh lên.
Anh Tester — Chia sẻ kiến thức Test Automation cho cộng đồng QA Việt Nam
Anh Tester
Đườ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