Lời mở đầu
Chào mừng các bạn đến với khóa học Selenium WebDriver kết hợp TestNG dành cho người mới bắt đầu. Nếu bạn đang tìm kiếm một công cụ để bước chân vào thế giới Automation Testing, thì Selenium chính là “vũ khí” lợi hại nhất mà bạn cần trang bị.
Trong bài viết này, tôi sẽ không chỉ dạy lý thuyết suông. Với tư cách là một người làm nghề lâu năm, tôi sẽ hướng dẫn các bạn từng bước thiết lập môi trường trên Eclipse, viết những dòng code Java đầu tiên và chạy kiểm thử tự động trên các trang web thực tế.
Mục tiêu của bài học hôm nay:
- Hiểu rõ cách cài đặt môi trường Java + Eclipse + Selenium.
- Nắm vững các thao tác cơ bản với WebDriver.
- Làm quen với TestNG Framework để quản lý Test Case.
- Thực hành trên các dự án Demo thực tế.
Chuẩn bị môi trường lập trình
Để bắt đầu, chúng ta cần xây dựng một “nền móng” vững chắc. Automation Testing với Selenium yêu cầu các thành phần sau hoạt động trơn tru.
1. Hướng dẫn cài đặt JDK (Java Development Kit)
Selenium WebDriver viết bằng Java cần có JDK để biên dịch và chạy code.
- Bước 1: Truy cập trang chủ Oracle hoặc tải OpenJDK (khuyên dùng Java 11 hoặc 17 trở lên để ổn định).
- Bước 2: Cài đặt và cấu hình biến môi trường
JAVA_HOME. - Kiểm tra: Mở CMD và gõ
java -version. Nếu hiện phiên bản Java là bạn đã thành công.

2. Hướng dẫn cài đặt Eclipse IDE
Eclipse là IDE phổ biến nhất cho Java Developer và Tester.
- Truy cập Eclipse.org và tải về bản Eclipse IDE for Java Developers.
- Giải nén và chạy file
eclipse.exe.
3. Tạo Maven Project và thêm thư viện
Chúng ta sẽ không add file .jar thủ công mà sẽ dùng Maven để quản lý thư viện. Đây là chuẩn mực của các dự án thực tế. Do đó tiền điều kiện là phải cài đặt và cấu hình biến môi trường Maven cho thiết bị thiết kế testscript trước (đảm bảo sau khi làm xong các bước này dùng lệnh “mvn -v” phải có thông tin phiên bản Maven). Khi đã đầy đủ công cụ cần thiết:
- Mở Eclipse, chọn File > New > Maven Project.
- Tick chọn Create a simple project, nhấn Next.
- Điền Group Id (vd:
com.automation) và Artifact Id (vd:selenium-training), nhấn Finish. - Mở file
pom.xmlvà thêm đoạn code sau vào thẻ<dependencies>(đặt trước thẻ đóng </projects>):
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.16.1</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>Note:
Bạn đã tạo được project và thấy filepom.xmlchưa? Nếu gặp lỗi tải thư viện, hãy thử chuột phải vào project chọn Maven > Update Project nhé!
Selenium WebDriver cơ bản
Phần này chúng ta sẽ đi vào cốt lõi của Selenium. Mọi thao tác auto đều bắt đầu từ đây.
Khởi tạo WebDriver
Để trình duyệt “nghe lời” code, chúng ta cần khởi tạo WebDriver. Trong khóa học này chúng ta sử dụng Google Chrome để thực hành nhé. Lưu ý là từ Selenium 4.6+, tính năng Selenium Manager đã được tích hợp, bạn không cần tải chromedriver.exe thủ công nữa.
Chuột phải vào “src/test/java” chọn New -> package, đặt tên “demo”, nhấn Finish
Kế đến chuột phải package vừa tạo chọn New -> Class, và đặt tên là “FirstTest”

Code mẫu khởi tạo:
package demo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class FirstTest {
public static void main(String[] args) {
// Khởi tạo trình duyệt Chrome
WebDriver driver = new ChromeDriver();
// Mở trang demo
driver.get("https://blazedemo.com/");
// In ra tiêu đề trang
System.out.println("Title: " + driver.getTitle());
// Đóng trình duyệt
driver.quit();
}
}Hãy chuột phải vào class sau đó chọn Run as -> Java Application xem điều gì xảy ra nhé.
Locator trong Selenium
Muốn thao tác với phần tử nào (nút bấm, ô nhập liệu), bạn phải tìm được “địa chỉ” (Locator) của nó. Các loại Locator phổ biến: id, name, class, cssSelector, xpath.
1. Locator là gì? Tại sao nó là “trái tim” của Automation Test?
Trong Selenium WebDriver, để thực hiện bất kỳ hành động nào (như click, nhập văn bản, chọn dropdown), “máy” cần phải biết chính xác phần tử (element) đó nằm ở đâu trên trang web. Locator chính là địa chỉ định danh duy nhất của các phần tử HTML đó.
Nếu Locator sai hoặc không chính xác, script kiểm thử của bạn sẽ gặp lỗi phổ biến nhất: NoSuchElementException.
2. 8 Loại Locator cơ bản trong Selenium WebDriver
Selenium hỗ trợ 8 phương thức tìm kiếm phần tử thông qua lớp By. Dưới đây là danh sách được sắp xếp theo độ ưu tiên về tính ổn định và tốc độ:
- ID: Định danh duy nhất (Nhanh nhất và chính xác nhất).
- Name: Dựa trên thuộc tính name của thẻ HTML.
- Class Name: Dựa trên thuộc tính class.
- Tag Name: Dựa trên tên thẻ (ví dụ:
input,div,a). - Link Text: Dành riêng cho thẻ liên kết
<a>(lấy toàn bộ text). - Partial Link Text: Dành cho thẻ
<a>(lấy một phần text). - CSS Selector: Mạnh mẽ, tốc độ nhanh, cú pháp linh hoạt.
- XPath: Linh hoạt nhất, có thể đi ngược DOM, nhưng tốc độ chậm hơn CSS một chút.
3. Hướng dẫn lấy Locator chuẩn trên trình duyệt Chrome (Chrome DevTools)
Để lấy được Locator, bạn không cần cài đặt tool phức tạp, chỉ cần sử dụng Chrome Developer Tools có sẵn.
Quy trình 3 bước đơn giản:
- Bước 1: Mở trang web cần test trên Chrome. Nhấn chuột phải vào phần tử bạn muốn lấy, chọn Inspect (Kiểm tra) hoặc nhấn phím tắt
F12. - Bước 2: Cửa sổ Elements hiện ra và bôi đen dòng code HTML tương ứng với phần tử đó.
- Bước 3:
- Lấy ID/Name/Class: Nhìn trực tiếp vào thuộc tính trong thẻ HTML (Ví dụ:
id="user-name"). - Lấy XPath/CSS: Nhấn chuột phải vào dòng code HTML đó > Chọn Copy > Chọn Copy XPath hoặc Copy selector (cho CSS).
- Lấy ID/Name/Class: Nhìn trực tiếp vào thuộc tính trong thẻ HTML (Ví dụ:
💡 Mẹo chuyên gia: Khi mới bắt đầu, việc dùng chức năng Copy XPath của Chrome là cách nhanh nhất. Tuy nhiên, Chrome thường trả về Absolute XPath (XPath tuyệt đối – rất dài và dễ gãy khi giao diện thay đổi). Hãy học cách viết Relative XPath (XPath tương đối) để script ổn định hơn.
4. Code ví dụ minh họa (Java & TestNG)
Dưới đây là ví dụ cách khai báo và sử dụng Locator trong dự án Selenium Java:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class LocatorExample {
@Test
public void loginTest() {
WebDriver driver = new ChromeDriver();
driver.get("https://www.saucedemo.com/");
// 1. Tìm bằng ID
WebElement username = driver.findElement(By.id("user-name"));
// 2. Tìm bằng Name
WebElement password = driver.findElement(By.name("password"));
// 3. Tìm bằng XPath (Tùy chỉnh)
WebElement loginBtn = driver.findElement(By.xpath("//input[@id='login-button']"));
// Thực hiện hành động
username.sendKeys("standard_user");
password.sendKeys("secret_sauce");
loginBtn.click();
driver.quit();
}
}5. Tài liệu tham khảo & Locator nâng cao
Để trở thành một Automation Tester giỏi, bạn không chỉ dừng lại ở việc copy-paste. Bạn cần hiểu sâu về cấu trúc của XPath và CSS Selector để xử lý các phần tử động (dynamic elements).
Dưới đây là các nguồn tài liệu chính thống và chuẩn mực nhất để bạn luyện tập cú pháp nâng cao:
- Học CSS Selector chuẩn W3C: Bạn có thể tham khảo cú pháp từ cơ bản đến nâng cao như
child,sibling,pseudo-class. 👉 Xem tài liệu W3Schools CSS Selectors - Học XPath Nodes & Syntax: Hiểu về các hàm như
contains(),starts-with(),text(), và các trục (axes) trong XPath. 👉 Xem tài liệu W3Schools XPath
Lab thực hành: Truy cập https://blazedemo.com/ và tìm locator cho nút “Find Flights”.
Code mẫu:
// Tìm bằng Name
driver.findElement(By.name("fromPort"));
// Tìm bằng CSS Selector (Nút Find Flights)
driver.findElement(By.cssSelector("input[value='Find Flights']"));Các thao tác phổ biến
Sau khi tìm được phần tử, chúng ta sẽ tương tác với nó:
sendKeys("text"): Nhập dữ liệu.click(): Click chuột.getText(): Lấy nội dung văn bản để kiểm tra.
Lab thực hành: Đăng nhập sai trên trang DemoBlaze.
driver.get("https://www.demoblaze.com/");
// Click nút Login trên menu
driver.findElement(By.id("login2")).click();
// Code tiếp theo cần xử lý wait (xem phần dưới)Wait cơ bản
Web hiện đại load rất nhiều JavaScript, nếu code chạy quá nhanh mà web chưa load xong sẽ gây lỗi NoSuchElementException.
- Implicit Wait: Đợi ngầm định cho tất cả các element.
- Explicit Wait: Đợi một điều kiện cụ thể (ví dụ: đợi nút bấm hiển thị).
Code mẫu:
// Implicit Wait: Đợi tối đa 10s cho mỗi lần tìm element
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));TestNG cho người mới bắt đầu
Viết code trong hàm main rất khó quản lý. TestNG giúp chúng ta tổ chức code thành các Test Case, chạy song song và xuất báo cáo.
Cấu trúc Annotation
TestNG sử dụng các Annotation để định nghĩa luồng chạy:
@BeforeMethod: Chạy trước mỗi @Test (thường dùng để mở browser).@Test: Chứa code auto chính.@AfterMethod: Chạy sau mỗi @Test (thường dùng để đóng browser).
Chạy test và tạo test suite
Thay vì Run Java Application, bạn chuột phải vào file chọn Run As > TestNG Test.
Để chạy nhiều file cùng lúc, chúng ta tạo file testng.xml:
<suite name="Training Suite">
<test name="Basic Test">
<classes>
<class name="com.automation.LoginTest"/>
</classes>
</test>
</suite>Assertion + DataProvider
Automation là phải so sánh kết quả thực tế và kết quả mong đợi.
- Assert:
Assert.assertEquals(actual, expected); - DataProvider: Chạy 1 test case với nhiều bộ dữ liệu khác nhau (Data Driven Testing).
Lab thực hành TestNG:
@Test
public void verifyPageTitle() {
String expectedTitle = "Automation Exercise";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle, "Tiêu đề trang không đúng!");
}Lab thực hành tổng hợp
Bây giờ hãy kết hợp tất cả kiến thức để làm một luồng (flow) hoàn chỉnh trên trang https://demo.nopcommerce.com/.
Kịch bản:
- Truy cập trang chủ.
- Click vào “Register”.
- Nhập thông tin và click “Register”.
- Verify thông báo đăng ký thành công.
Source Code mẫu (Java + TestNG):
public class NopCommerceTest {
WebDriver driver;
@BeforeMethod
public void setup() {
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.get("https://demo.nopcommerce.com/");
}
@Test
public void testRegisterUser() {
// Click Register Link
driver.findElement(By.className("ico-register")).click();
// Fill Form
driver.findElement(By.id("gender-male")).click();
driver.findElement(By.id("FirstName")).sendKeys("Automation");
driver.findElement(By.id("LastName")).sendKeys("User");
driver.findElement(By.id("Email")).sendKeys("auto" + System.currentTimeMillis() + "@gmail.com"); // Random email
driver.findElement(By.id("Password")).sendKeys("123456");
driver.findElement(By.id("ConfirmPassword")).sendKeys("123456");
// Click Register Button
driver.findElement(By.id("register-button")).click();
// Assert Message
String result = driver.findElement(By.className("result")).getText();
Assert.assertEquals(result, "Your registration completed");
}
@AfterMethod
public void tearDown() {
driver.quit();
}
}Thử thách cho bạn: Hãy thêm bước “Log out” sau khi đăng ký thành công và “Log in” lại với tài khoản vừa tạo. Hãy comment kết quả của bạn bên dưới nhé!
Mini Project cuối buổi
Để thực sự làm chủ Selenium, bạn cần tự tay làm một dự án nhỏ.
Đề bài: Tự động hóa luồng mua hàng trên https://www.demoblaze.com/
Checklist yêu cầu:
- [ ] Sử dụng cấu trúc TestNG (@BeforeMethod, @Test, @AfterMethod).
- [ ] Add 1 sản phẩm bất kỳ vào giỏ hàng (Samsung galaxy s6).
- [ ] Xử lý Alert sau khi add to cart (Gợi ý: dùng
driver.switchTo().alert().accept()). - [ ] Vào Cart và kiểm tra xem sản phẩm đã có trong đó chưa.
- [ ] Chụp ảnh màn hình (Screenshot) nếu Test Failed (Nâng cao).
Tổng kết và bài tập về nhà
Chúng ta đã cùng nhau đi qua những bước đầu tiên quan trọng nhất của Selenium WebDriver.
Tóm tắt kiến thức:
- Cài đặt môi trường Eclipse + Maven.
- Cách tìm Locator chuẩn xác.
- Cách dùng TestNG để quản lý test.
- Assertion để kiểm tra kết quả.
Câu hỏi củng cố:
- Sự khác nhau giữa
findElementvàfindElementslà gì? - Tại sao
Implicit Waitlại quan trọng? - Làm sao để chạy TestNG từ file XML?
Bài tập về nhà: Hãy hoàn thành Mini Project ở trên và gửi link GitHub repo của bạn vào phần bình luận. Tôi sẽ review code cho 5 bạn nhanh nhất!
Hẹn gặp lại các bạn ở bài viết nâng cao tiếp theo: “Page Object Model – Design Pattern sống còn trong Automation“.