Selenium là gì?
Selenium là bộ công cụ mã nguồn mở (Open Source) dùng để tự động hóa trình duyệt web (Browser Automation). Nó được sử dụng rộng rãi nhất trong lĩnh vực Automation Testing cho ứng dụng web.
Đặc điểm nổi bật:
- Miễn phí, cộng đồng sử dụng rất lớn trên toàn thế giới.
- Hỗ trợ đa trình duyệt: Chrome, Firefox, Edge, Safari.
- Hỗ trợ đa hệ điều hành: Windows, macOS, Linux.
- Hỗ trợ đa ngôn ngữ lập trình: Java, Python, C#, JavaScript, Ruby, Kotlin.
- Tích hợp dễ dàng với các framework: TestNG, JUnit, pytest, NUnit, Mocha...
Các thành phần của Selenium (2026)
Tính đến thời điểm hiện tại, Selenium gồm 4 thành phần chính:
1. Selenium WebDriver
Đây là thành phần cốt lõi và quan trọng nhất. WebDriver cho phép bạn viết code để điều khiển trình duyệt theo lập trình (programmatically).
Những thay đổi quan trọng trong Selenium 4:
- W3C WebDriver Protocol: Selenium 4 sử dụng chuẩn W3C thay vì JSON Wire Protocol cũ. Điều này giúp giao tiếp giữa code và trình duyệt ổn định, nhất quán hơn rất nhiều.
- Options thay cho DesiredCapabilities: Không còn dùng
DesiredCapabilities, thay vào đó sử dụngChromeOptions,FirefoxOptions,EdgeOptions... để cấu hình trình duyệt. - ChromeDriver kế thừa ChromiumDriver: Kiến trúc class rõ ràng hơn, ChromeDriver và
EdgeDriver giờ cùng kế thừa từ
ChromiumDriver.
// Selenium 3 (CŨ - không nên dùng nữa)
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
WebDriver driver = new RemoteWebDriver(caps);
// Selenium 4 (MỚI - cách chuẩn hiện tại)
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(options);
2. Selenium IDE
Selenium IDE là công cụ Record & Playback cho phép ghi lại thao tác trên trình duyệt mà không cần viết code.
Có gì mới?
- Selenium IDE đã được viết lại hoàn toàn, hiện là extension cho Chrome, Firefox và Edge.
- Hỗ trợ control flow:
if,else,while,times. - Có thể export test script sang nhiều ngôn ngữ (Java, Python, C#, JavaScript...).
- Chạy test từ command line với
selenium-side-runner(cần Node.js).
3. Selenium Grid
Selenium Grid cho phép bạn chạy test song song (parallel) trên nhiều máy, nhiều trình duyệt cùng lúc, giúp giảm đáng kể thời gian thực thi.
Grid trong Selenium 4 đã được thiết kế lại hoàn toàn:
- Kiến trúc mới: Gộp Hub và Node vào một file JAR duy nhất; có thể chạy Standalone hoặc Distributed mode.
- Hỗ trợ Docker & Kubernetes: Tích hợp native với Docker/K8s, dễ dàng deploy lên cloud.
- Giao diện quản lý mới: UI trực quan hơn, xem được trạng thái node, session đang chạy, live preview.
- Tối ưu parallel testing: Load balancing tốt hơn, phân phối test hiệu quả hơn.
# Chạy Grid Standalone (cách đơn giản nhất)
java -jar selenium-server-4.x.x.jar standalone
# Mở Grid UI tại: http://localhost:4444/ui
4. Selenium Manager
Đây là thành phần mới hoàn toàn trong Selenium 4 (không có trong bài viết cũ năm 2017).
- Selenium Manager tự động tải và quản lý browser driver (chromedriver, geckodriver, msedgedriver...) phù hợp với version trình duyệt đang cài trên máy.
- Bạn không cần tải driver thủ công hay sử dụng thư viện bên thứ 3 như WebDriverManager nữa.
- Chỉ cần viết code và chạy — Selenium Manager sẽ lo phần còn lại.
Tính năng nổi bật của Selenium 4
Ngoài các thay đổi ở từng thành phần, Selenium 4 còn mang đến nhiều tính năng mạnh mẽ:
Relative Locators (Locator tương đối)
Cho phép tìm element dựa trên vị trí tương đối so với element khác, rất trực quan:
above()— phía trênbelow()— phía dướitoLeftOf()— bên tráitoRightOf()— bên phảinear()— gần
// Tìm element nằm bên dưới element có id="email"
WebElement password = driver.findElement(
RelativeLocator.with(By.tagName("input")).below(By.id("email"))
);
Chrome DevTools Protocol (CDP)
Selenium 4 tích hợp native với CDP, mở ra nhiều khả năng nâng cao:
- Giả lập mạng (Network emulation): test trên 3G, offline...
- Giả lập vị trí địa lý (Geolocation)
- Bắt console log, network request
- Phân tích hiệu năng trang web (Performance metrics)
Quản lý Window/Tab mới
Mở tab hoặc window mới dễ dàng mà không cần tạo WebDriver object mới:
// Mở tab mới
driver.switchTo().newWindow(WindowType.TAB);
// Mở window mới
driver.switchTo().newWindow(WindowType.WINDOW);
So sánh nhanh: Selenium 3 vs Selenium 4
| Tiêu chí | Selenium 3 | Selenium 4 |
|---|---|---|
| Giao thức | JSON Wire Protocol | W3C WebDriver Protocol |
| Cấu hình browser | DesiredCapabilities | Browser Options (ChromeOptions...) |
| Driver management | Thủ công hoặc WebDriverManager | Selenium Manager (tự động) |
| Relative Locators | Không có | above(), below(), near()... |
| CDP Support | Không có | Tích hợp native |
| Selenium Grid | Cấu hình phức tạp (Hub/Node riêng) | Đơn giản, hỗ trợ Docker/K8s |
| Window/Tab management | Phức tạp | API newWindow(), newTab() đơn giản |
| Selenium IDE | Chỉ Firefox, bị ngưng phát triển một thời gian | Chrome, Firefox, Edge; viết lại hoàn toàn |
Bắt đầu nhanh với Selenium 4 (Java)
Dưới đây là ví dụ đơn giản để bạn chạy thử ngay:
Bước 1: Thêm dependency (Maven)
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.33.0</version>
</dependency>
Bước 2: Viết test đầu tiên
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.By;
public class FirstTest {
public static void main(String[] args) {
// Selenium Manager tự động tải chromedriver - không cần setup thủ công!
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(options);
// Mở trang web
driver.get("https://www.google.com");
// Tìm ô search và nhập text
driver.findElement(By.name("q")).sendKeys("Selenium WebDriver tutorial");
// In ra title
System.out.println("Page title: " + driver.getTitle());
// Đóng trình duyệt
driver.quit();
}
}
Tài liệu tham khảo chính thức
- Selenium Official Documentation — tài liệu chính thức, luôn cập nhật nhất.
- Selenium Blog — tin tức và thông báo mới.
- Selenium GitHub — mã nguồn và release notes.
Bài viết được cập nhật tháng 02/2026. Nếu bạn thấy thông tin nào đã lỗi thời, hãy để lại comment bên dưới nhé!
0 comments:
Post a Comment