1. WebDriver là gì và giải quyết bài toán nào
Selenium WebDriver là bộ thư viện điều khiển trình duyệt thật (Chrome, Firefox, Edge, Safari) bằng code, giúp mô phỏng chính xác hành vi người dùng: mở trang, gõ chữ, click, submit form và đọc kết quả trên DOM. Khác với việc kiểm thử thủ công lặp đi lặp lại, WebDriver cho phép một QA viết kịch bản một lần rồi chạy hàng trăm lần trên nhiều trình duyệt. Trong một dự án SaaS quản lý hợp đồng có hơn 300 màn hình, đội kiểm thử không thể click tay mỗi lần release; họ cần một bộ test hồi quy tự động chạy sau mỗi lần merge. WebDriver chính là công cụ nền tảng cho lớp end-to-end đó. Bài viết này đi sâu vào kiến trúc, cách cài đặt, cách định vị phần tử và cách viết test ổn định thay vì test hay đỏ.
- Điều khiển trình duyệt thật, không phải trình duyệt giả lập
- Chuẩn hoá qua giao thức W3C nên đa nền tảng
- Hỗ trợ nhiều ngôn ngữ: Java, Python, C#, JavaScript, Ruby
- Nền tảng cho hồi quy end-to-end và cross-browser
2. Cơ chế bên trong: giao thức W3C WebDriver
Khi bạn gọi driver.findElement(By.id("user")).click() trong code, thực chất binding ngôn ngữ không trực tiếp chạm vào trình duyệt. Nó gửi một HTTP request theo chuẩn W3C WebDriver tới một tiến trình trung gian gọi là browser driver, ví dụ chromedriver cho Chrome hay geckodriver cho Firefox. Driver này là một máy chủ HTTP nhỏ: nó nhận lệnh dạng JSON, dịch sang thao tác gốc của trình duyệt (qua DevTools hoặc API native), rồi trả kết quả về. Mỗi lệnh Selenium tương ứng một endpoint, ví dụ POST /session để mở phiên, POST /session/{id}/element để tìm phần tử, POST /session/{id}/element/{el}/click để click. Hiểu mô hình ba tầng client-driver-browser giúp bạn gỡ lỗi tốt hơn khi test treo hoặc báo lỗi phiên bản driver không khớp trình duyệt.
Từ Selenium 4, giao thức W3C là mặc định duy nhất, thay cho JSON Wire Protocol cũ. Điều này loại bỏ nhiều khác biệt hành vi giữa các trình duyệt và mở đường cho tích hợp DevTools như bắt log console hay giả lập vị trí địa lý. Selenium Manager, ra mắt cũng trong dòng 4, tự động tải đúng phiên bản driver khớp với trình duyệt trên máy, nên bạn không còn phải tay tải chromedriver và cập nhật đường dẫn mỗi khi Chrome tự nâng cấp. Đây là một trong những nguyên nhân phổ biến nhất gây gãy pipeline trước đây.
3. Cài đặt và khởi động phiên đầu tiên
Với Python, bạn chỉ cần cài selenium qua pip; từ phiên bản 4.6 trở đi Selenium Manager tự lo phần driver. Đoạn code dưới mở Chrome, truy cập trang đăng nhập, và in tiêu đề. Với Java, bạn thêm dependency selenium-java vào Maven hoặc Gradle. Điểm mấu chốt cho người mới: luôn gọi driver.quit() trong khối finally hoặc teardown để đóng phiên và giải phóng tiến trình driver, nếu không bạn sẽ tích tụ hàng chục tiến trình chromedriver treo trên máy CI và làm cạn RAM.
# pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome() # Selenium Manager tự tải driver
try:
driver.get("https://example.com/login")
print(driver.title)
driver.find_element(By.ID, "username").send_keys("qa_user")
driver.find_element(By.ID, "password").send_keys("secret")
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()
finally:
driver.quit() # LUÔN đóng phiên// Maven: org.seleniumhq.selenium:selenium-java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class FirstTest {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver(); // Selenium Manager resolves driver
try {
driver.get("https://example.com/login");
System.out.println(driver.getTitle());
driver.findElement(By.id("username")).sendKeys("qa_user");
driver.findElement(By.id("password")).sendKeys("secret");
driver.findElement(By.cssSelector("button[type='submit']")).click();
} finally {
driver.quit();
}
}
}
💬 Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!