TestNG Người nghe ở Selenium
⚡ Tóm tắt thông minh
Người nghe ở Selenium WebDriver là TestNG Các giao diện chặn các sự kiện kiểm thử để tùy chỉnh nhật ký, báo cáo và các hành động sau khi xảy ra lỗi. Bài viết này giải thích các phương thức của ITestListener và hướng dẫn cách chạy một ví dụ có thể thực thi được. Java ví dụ, và làm rõ cách thức Selenium Phiên bản 4 đã thay thế WebDriverEventListener đã lỗi thời.

Selenium Các tập lệnh WebDriver thường cần phản ứng với các sự kiện kiểm thử như xác nhận thành công, định vị thất bại hoặc bỏ qua một bước. Trình lắng nghe giúp điều đó trở nên khả thi. Nói chung, Selenium Các dự án dựa trên hai nhóm người nghe:
- Trình nghe WebDriver
- TestNG Người nghe
Trong hướng dẫn này, chúng tôi sẽ tập trung vào TestNG Các trình lắng nghe, kèm theo ghi chú về cách các trình lắng nghe cấp WebDriver đã thay đổi trong Selenium 4.x.
Người nghe là gì? TestNG?
Listener là một giao diện điều chỉnh hành vi mặc định của TestNGNhư tên gọi cho thấy, Người nghe “lắng nghe” các sự kiện được định nghĩa trong một Selenium Bạn sử dụng chúng bằng cách triển khai giao diện Listener tương ứng và đăng ký nó trong lớp hoặc bộ kiểm thử của mình. Listener cho phép bạn tùy chỉnh... TestNG báo cáo, đính kèm ảnh chụp màn hình và xuất nhật ký có cấu trúc.
Các loại người nghe trong TestNG
TestNG Nó cung cấp một loạt các giao diện lắng nghe, và mỗi giao diện nhắm đến một giai đoạn khác nhau của vòng đời kiểm thử.
Dưới đây là những từ ngữ thường được sử dụng. TestNG người nghe:
- IAnnotationTransformer
- IAnnotationTransformer2
- Có thể cấu hình được
- IConfigurationListener
- IExecutionListener
- IHookable
- IInvokedMethodListener
- IInvokedMethodListener2
- Phương thức chặn IMeod
- phóng viên
- ISuiteListener
- ITestListener
Các giao diện này được sử dụng trong Selenium để tạo nhật ký hoặc tùy chỉnh TestNG báo cáo. Trong hướng dẫn này, chúng ta sẽ triển khai ITestListener.
ITestListener Trình bày các phương thức sau:
- onStart – được gọi khi bất kỳ bài kiểm tra nào bắt đầu.
- onTestSuccess – Được gọi khi bài kiểm tra thành công.
- khi kiểm thử thất bại – Hàm này được gọi khi quá trình kiểm tra thất bại.
- onTestSkipped – Được gọi khi một bài kiểm tra bị bỏ qua.
- onTestFailedButWithinSuccessPercentage – Hàm này được gọi khi một bài kiểm tra thất bại nhưng vẫn nằm trong phạm vi tỷ lệ thành công.
- onFinish – Được gọi sau khi tất cả các bài kiểm tra trong lớp đã được thực thi.
Kịch bản thử nghiệm
Trong kịch bản thử nghiệm này, chúng ta sẽ tự động hóa quy trình đăng nhập và triển khai ITestListener chống lại nó
- Khởi động Firefox và mở trang web https://demo.guru99.com/V4/
- Đăng nhập vào ứng dụng.
Các bước để tạo một TestNG Người nghe
Với kịch bản kiểm thử nêu trên, chúng ta sẽ triển khai Listener từng bước một.
Bước 1) Tạo một lớp có tên là ListenerTest mà thực hiện ITestListenerDi chuột qua phần gạch chân màu đỏ và Eclipse Tôi sẽ đề xuất hai giải pháp khắc phục nhanh chóng, như được trình bày bên dưới:
Nhấp vào “Thêm các phương thức chưa được triển khai”. Nhiều phương thức giả (không có phần thân) sẽ được thêm vào mã của bạn, tương tự như sau:
nhập khẩu org.testng.ITestContext;
nhập khẩu org.testng.ITestListener;
nhập khẩu org.testng.ITestResult;
giai cấp công cộng ListenerTest thực hiện ITestListener {
@Ghi đè
khoảng trống công cộng khi hoàn thành (ITestContext arg0) {
// TODO - Tạo mẫu phương thức tự động
}
@Ghi đè
khoảng trống công cộng onStart(ITestContext arg0) {
// TODO - Tạo mẫu phương thức tự động
}
@Ghi đè
khoảng trống công cộng onTestFailedButWithinSuccessPercentage(Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}
@Ghi đè
khoảng trống công cộng khi kiểm thử thất bại (Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}
@Ghi đè
khoảng trống công cộng onTestSkipped(Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}
@Ghi đè
khoảng trống công cộng onTestStart(Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}
@Ghi đè
khoảng trống công cộng onTestSuccess(Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}
}
Bây giờ chúng ta hãy chỉnh sửa ListenerTest lớp. Cụ thể, chúng ta sẽ điền vào các phương thức sau: khi kiểm thử thất bại, onTestSkipped, onTestStartvà onTestSuccess.
Thay đổi rất đơn giản: mỗi phương thức sẽ in tên của bài kiểm tra để bảng điều khiển hiển thị rõ ràng trạng thái đạt, không đạt và bỏ qua.
Sau khi chỉnh sửa, đoạn mã sẽ trông như thế này:
nhập khẩu org.testng.ITestContext;
nhập khẩu org.testng.ITestListener;
nhập khẩu org.testng.ITestResult;
giai cấp công cộng ListenerTest thực hiện ITestListener {
@Ghi đè
khoảng trống công cộng khi hoàn thành (ITestContext Kết quả) {
}
@Ghi đè
khoảng trống công cộng onStart(ITestContext Kết quả) {
}
@Ghi đè
khoảng trống công cộng onTestFailedButWithinSuccessPercentage(Kết quả kiểm thử I Kết quả) {
}
// Khi một trường hợp kiểm thử thất bại, phương thức này sẽ được gọi.
@Ghi đè
khoảng trống công cộng khi kiểm thử thất bại (Kết quả kiểm thử I Kết quả) {
System.out.println(“Tên của trường hợp kiểm thử bị lỗi là: “ + Result.getName());
}
// Khi một trường hợp kiểm thử bị bỏ qua, phương thức này sẽ được gọi.
@Ghi đè
khoảng trống công cộng onTestSkipped(Kết quả kiểm thử I Kết quả) {
System.out.println(“Tên của trường hợp kiểm thử bị bỏ qua là: “ + Result.getName());
}
// Khi một trường hợp kiểm thử bắt đầu, phương thức này sẽ được gọi.
@Ghi đè
khoảng trống công cộng onTestStart(Kết quả kiểm thử I Kết quả) {
System.out.println(Result.getName() + “Trường hợp thử nghiệm đã bắt đầu”);
}
// Khi một trường hợp kiểm thử thành công, phương thức này sẽ được gọi.
@Ghi đè
khoảng trống công cộng onTestSuccess(Kết quả kiểm thử I Kết quả) {
System.out.println(“Tên của trường hợp kiểm thử đã vượt qua là: “ + Result.getName());
}
}
Bước 2) Tạo một lớp khác có tên là Các trường hợp thử nghiệm để tự động hóa quá trình đăng nhập. Selenium Lớp này sẽ được thực thi để đăng nhập vào trang web demo.
nhập khẩu org.openqa.selenium.By;
nhập khẩu org.openqa.selenium.WebDriver;
nhập khẩu org.openqa.selenium.firefox.FirefoxTài xế;
nhập khẩu org.testng.Assert;
nhập khẩu org.testng.annotations.Listeners;
nhập khẩu org.testng.annotations.Test;
giai cấp công cộng Các trường hợp thử nghiệm {
webdriver người lái xe = người mới FirefoxNgười lái xe();
// Bài kiểm tra được thiết kế để vượt qua, nhằm xác minh trình lắng nghe sự kiện thành công.
@Thử nghiệm
khoảng trống công cộng Đăng nhập() {
trình điều khiển.get(“https://demo.guru99.com/V4/”);
trình điều khiển.findElement(By.name(“uid”)).sendKeys(“mngr34926”);
trình điều khiển.findElement(By.name("Mật khẩu")).sendKeys(“amUpenu”);
trình điều khiển.findElement(By.name(“btnLogin”)).click();
}
// Cố tình làm cho bài kiểm tra thất bại để xác minh trình lắng nghe lỗi.
@Thử nghiệm
khoảng trống công cộng TestToFail() {
System.out.println(“Phương pháp này dùng để kiểm tra lỗi”);
Assert.assertTrue(sai);
}
}
Bước 3) Tiếp theo, hãy gắn trình lắng nghe này vào lớp kiểm thử của chúng ta. Các trường hợp thử nghiệmCó hai cách để kết nối một lớp với giao diện trình lắng nghe.
Cách đầu tiên là sử dụng @Người nghe chú thích, như hiển thị bên dưới:
Chúng tôi thêm chú thích này ở phía trên Các trường hợp thử nghiệm lớp. Lớp đó sau đó sẽ trông như thế này:
nhập khẩu org.openqa.selenium.By;
nhập khẩu org.openqa.selenium.WebDriver;
nhập khẩu org.openqa.selenium.firefox.FirefoxTài xế;
nhập khẩu org.testng.Assert;
nhập khẩu org.testng.annotations.Listeners;
nhập khẩu org.testng.annotations.Test;
@Listeners(Listener_Demo.ListenerTest.class)
giai cấp công cộng Các trường hợp thử nghiệm {
webdriver người lái xe = người mới FirefoxNgười lái xe();
// Kiểm tra xem quá trình có thành công hay không, để xác minh trình lắng nghe sự kiện thành công.
@Thử nghiệm
khoảng trống công cộng Đăng nhập() {
trình điều khiển.get(“https://demo.guru99.com/V4/”);
trình điều khiển.findElement(By.name(“uid”)).sendKeys(“mngr34926”);
trình điều khiển.findElement(By.name("Mật khẩu")).sendKeys(“amUpenu”);
trình điều khiển.findElement(By.name(“btnLogin”)).click();
}
// Cố tình làm cho bài kiểm tra thất bại để xác minh trình lắng nghe lỗi.
@Thử nghiệm
khoảng trống công cộng TestToFail() {
System.out.println(“Phương pháp này dùng để kiểm tra lỗi”);
Assert.assertTrue(sai);
}
}
Cấu trúc dự án trông giống như:
Bước 4) Thực hiện Các trường hợp thử nghiệm lớp. Các phương thức bên trong ListenerTest được gọi tự động dựa trên hành vi của các phương thức được chú thích bằng @Thử nghiệm.
Bước 5) Kiểm tra lại thông tin hiển thị trên bảng điều khiển.
Đầu ra của Các trường hợp thử nghiệm giống như:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml
Trường hợp kiểm thử đăng nhập đã bắt đầu
Tên của trường hợp kiểm thử đã vượt qua là: Đăng nhập
Trường hợp kiểm thử TestToFail đã bắt đầu
Phương pháp này để kiểm tra lỗi
Tên của trường hợp kiểm thử thất bại là: TestToFail
ĐÃ THÀNH CÔNG: Đăng nhập
THẤT BẠI: TestToFail
java.lang.AssertionError: expected [true] but found [false]
Sử dụng trình lắng nghe cho nhiều lớp
Nếu một dự án có nhiều lớp kiểm thử, việc thêm @Người nghe Việc chú thích cho từng mục sẽ trở nên rườm rà và dễ xảy ra lỗi.
Trong trường hợp đó, hãy tạo một testng.xml Lưu tệp và đăng ký trình lắng nghe ở đó một lần.
Trình lắng nghe này sau đó được áp dụng cho toàn bộ bộ kiểm thử bất kể số lượng lớp. Khi bạn chạy tệp XML, trình lắng nghe sẽ được kích hoạt cho mọi lớp được khai báo trong bộ kiểm thử, và bạn có thể xích chuỗi bất kỳ số lượng lớp trình lắng nghe nào bên trong cùng một thẻ.
WebDriverListener trong Selenium 4 so với EventFiringWebDriver đã lỗi thời
Trong khi TestNG Các listener phản hồi các sự kiện vòng đời kiểm thử, trong khi các listener của WebDriver phản hồi các hành động của trình điều khiển trình duyệt như nhấp chuột, điều hướng hoặc gọi findElement. Selenium 3. Phương pháp điển hình là WebDriverEventListener giao diện được kết nối thông qua EventFiringWebDriverCả hai đều đã lỗi thời. Selenium 4.x.
Giải pháp thay thế hiện đại là... WebDriverListener giao diện kết hợp với EventFiringDecorator:
nhập khẩu org.openqa.selenium.chrome.ChromeDriver;
nhập khẩu org.openqa.selenium.support.events.EventFiringDecorator;
nhập khẩu org.openqa.selenium.support.events.WebDriverListener;
giai cấp công cộng Trình lắng nghe ghi nhật ký thực hiện WebDriverListener {
@Ghi đè
khoảng trống công cộng trước khi lấy (webdriver trình điều khiển, chuỗi URL) {
System.out.println(“Điều hướng đến” + URL);
}
}
webdriver nguyên liệu thô = người mới Trình điều khiển Chrome();
webdriver người lái xe = người mới EventFiringDecorator<>(người mới LoggingListener()).decorate(raw);
Trình trang trí có thể bao bọc bất kỳ WebDriver, WebElement hoặc Alert nào, linh hoạt hơn so với trình bao bọc kích hoạt sự kiện cũ. Sử dụng WebDriverListener để theo dõi phía trình duyệt và TestNG ITestListener để báo cáo ở cấp độ phòng ban.
Hệ thống lắng nghe được hỗ trợ bởi AI: Nhật ký thông minh hơn và phân loại lỗi hiệu quả hơn
hiện đại Selenium Các nhóm ngày càng tích hợp nhiều dịch vụ AI vào hệ thống thu thập tín hiệu của họ để biến các tín hiệu CI trở nên hữu ích hơn. Bên trong khi kiểm thử thất bạiMột trình lắng nghe được hỗ trợ bởi AI có thể chụp ảnh DOM cùng với ảnh chụp màn hình, gửi chúng đến một mô hình để trả về cụm nguyên nhân gốc có khả năng xảy ra, và ghi lại một thẻ vào đó. TestNG báo cáo hoặc một công cụ như ReportPortal.
Các mô hình phổ biến do AI điều khiển bao gồm:
- Phát hiện kiểm thử không ổn định: Người nghe chuyển tiếp các mốc thời gian đạt/không đạt đến một mô hình để phân loại lỗi đó là do sự không ổn định, do môi trường hoặc do sự thoái triển thực sự.
- Ảnh chụp màn hình thông minh: Các mô hình thị giác máy tính cắt, chú thích và so sánh ảnh chụp màn hình giao diện người dùng để người đánh giá có thể thấy vùng đã thay đổi thay vì toàn bộ trang.
- Bộ định vị tự phục hồi: A WebDriverListener móc trước khi tìm phần tử và yêu cầu trợ lý AI đề xuất một vị trí thay thế khi vị trí chính báo lỗi. NoSuchElementException.
- Tóm tắt bằng ngôn ngữ tự nhiên: An phóng viên Việc triển khai các nguồn cấp dữ liệu cho bộ kết quả sẽ tạo ra một LLM, từ đó tạo ra bản tóm tắt ngắn gọn chỉ gồm một đoạn văn.
Lớp lắng nghe là nơi tối ưu nhất để chèn các hook này vì nó không ảnh hưởng đến logic kiểm thử và được áp dụng đồng nhất trên toàn bộ bộ kiểm thử.
Tổng kết
Người nghe được yêu cầu tạo nhật ký hoặc tùy chỉnh TestNG báo cáo trong Selenium WebDriver.
- TestNG Cung cấp nhiều giao diện lắng nghe khác nhau; hãy chọn giao diện phù hợp với sự kiện mà bạn quan tâm.
- Trình nghe là các giao diện được sử dụng trong Selenium Các tập lệnh WebDriver để phản ứng với các sự kiện trong vòng đời kiểm thử.
- Bài hướng dẫn đã minh họa ITestListener Với bài kiểm tra đạt và bài kiểm tra không đạt.
- Bạn có thể gắn trình lắng nghe với @Người nghe hoặc đăng ký nó một lần testng.xml cho toàn bộ căn hộ.
- Selenium 4.x thay thế EventFiringWebDriver với WebDriverListener + EventFiringDecorator dành cho các sự kiện cấp WebDriver.






