TestNG Pendengar di Selenium

โšก Ringkasan Cerdas

Pendengar di Selenium WebDriver adalah TestNG Antarmuka yang mencegat peristiwa pengujian untuk menyesuaikan log, laporan, dan tindakan pasca-kegagalan. Artikel ini menjelaskan metode ITestListener, dan memandu Anda melalui sebuah runnable. Java contoh, dan menjelaskan bagaimana Selenium 4 menggantikan WebDriverEventListener yang sudah usang.

  • โ“ Apa yang Dilakukan Pendengar: Mereka berlangganan TestNG Peristiwa seperti mulai, lulus, gagal, dan lewati digunakan untuk menjalankan fungsi pencatatan atau pelaporan.
  • ๐Ÿงฉ Dua Belas Antarmuka: TestNG menyediakan antarmuka seperti ITestListener, ISuiteListener, IReporter, IInvokedMethodListener, dan IAnnotationTransformer untuk kontrol yang lebih detail.
  • ๏ธ Dua Mode Pengkabelan: Lampirkan listener dengan anotasi @Listeners pada satu kelas, atau daftarkan sekali di dalam testng.xml untuk setiap suite.
  • ๐Ÿš€ Selenium Update 4: EventFiringWebDriver sudah usang; antarmuka WebDriverListener modern ditambah EventFiringDecorator sekarang mendukung event hook tingkat WebDriver.
  • ๐Ÿค– Sudut Pandang AI: Pendengar yang dibantu AI dapat secara otomatis mengklasifikasikan kegagalan, melampirkan tangkapan layar cerdas, dan mengirimkan sinyal pengujian yang tidak stabil kembali ke dasbor CI secara real-time.

TestNG Pendengar di Selenium

Selenium Skrip WebDriver seringkali perlu bereaksi terhadap peristiwa pengujian seperti pernyataan yang berhasil, pencari lokasi yang gagal, atau langkah yang dilewati. Listener memungkinkan hal itu. Secara umum, Selenium Proyek-proyek ini bergantung pada dua kelompok pendengar:

  1. Pendengar WebDriver
  2. TestNG Pendengar

Dalam tutorial ini, kita akan fokus pada... TestNG Listener, dengan catatan tentang bagaimana listener tingkat WebDriver berubah di Selenium 4.x.

Apa itu Pendengar? TestNG?

Listener adalah sebuah antarmuka yang memodifikasi perilaku default dari TestNGSeperti namanya, Pendengar "mendengarkan" peristiwa yang didefinisikan dalam Selenium Anda dapat membuat skrip dan bereaksi sesuai kebutuhan. Anda menggunakannya dengan mengimplementasikan antarmuka Listener yang relevan dan mendaftarkannya pada kelas atau rangkaian pengujian Anda. Listener memungkinkan Anda untuk menyesuaikan TestNG membuat laporan, melampirkan tangkapan layar, dan mengeluarkan log terstruktur.

Jenis Pendengar di TestNG

TestNG mengirimkan serangkaian antarmuka pendengar, dan masing-masing menargetkan tahap yang berbeda dalam siklus hidup pengujian.

Berikut ini adalah yang umum digunakan TestNG pendengar:

  1. IAnnotationTransformer
  2. IAnnotationTransformer2
  3. Dapat dikonfigurasi
  4. IConfigurationListener
  5. IExecutionListener
  6. bisa di kaitkan
  7. IInvokedMethodListener
  8. SayaInvokedMethodListener2
  9. Metode Interceptor
  10. iReporter
  11. iSuiteListener
  12. Pendengar

Antarmuka ini digunakan dalam Selenium untuk menghasilkan log atau menyesuaikan TestNG laporan. Dalam tutorial ini, kita akan mengimplementasikan Pendengar.

Pendengar mengekspos metode-metode berikut:

  • onStart โ€“ dipanggil saat pengujian dimulai.
  • pada TestSuccess โ€“ dipanggil ketika sebuah tes berhasil.
  • onTestFailure โ€“ dipanggil ketika sebuah pengujian gagal.
  • pada Tes Dilewati โ€“ dipanggil ketika sebuah pengujian dilewati.
  • onTestFailedButWithinSuccessPercentage โ€“ Dipanggil ketika sebuah pengujian gagal tetapi masih dalam persentase keberhasilan.
  • onFinish โ€“ dipanggil setelah semua pengujian dalam kelas tersebut dieksekusi.

Skenario Uji

Dalam skenario pengujian ini, kita akan mengotomatiskan proses login dan mengimplementasikannya. Pendengar menentangnya.

  1. Launch Firefox dan buka situsnya https://demo.guru99.com/V4/

Skenario Pengujian Masuk URL

  1. Masuk ke aplikasi.

Formulir login Skenario Pengujian

Langkah-Langkah Membuat a TestNG Pendengar

Untuk skenario pengujian di atas, kita akan mengimplementasikan Listener langkah demi langkah.

Langkah 1) Buat sebuah kelas bernama Tes Pendengar yang menerapkan PendengarArahkan kursor ke garis bawah merah dan Eclipse akan menyarankan dua solusi cepat, seperti yang ditunjukkan di bawah ini:

Eclipse solusi cepat untuk menambahkan metode yang belum diimplementasikan

Klik โ€œTambahkan metode yang belum diimplementasikanโ€. Beberapa metode rintisan (tanpa isi) akan ditambahkan ke kode Anda, mirip seperti ini:

paket Demo Pendengar;

mengimpor org.testng.ITestContext;
mengimpor org.testng.ITestListener;
mengimpor org.testng.ITestResult;

kelas umum Tes Pendengar mengimplementasikan Pendengar {

@Mengesampingkan
kekosongan publik setelah selesai(Konteks Teruji arg0) {
// TODO-generated method stub
}

@Mengesampingkan
kekosongan publik padaMulai(Konteks Teruji arg0) {
// TODO-generated method stub
}

@Mengesampingkan
kekosongan publik pada TesGagalTetapiDalamPersentaseKeberhasilan(Hasil Tes IT arg0) {
// TODO-generated method stub
}

@Mengesampingkan
kekosongan publik pada kegagalan pengujian(Hasil Tes IT arg0) {
// TODO-generated method stub
}

@Mengesampingkan
kekosongan publik pada Tes Dilewati (Hasil Tes IT arg0) {
// TODO-generated method stub
}

@Mengesampingkan
kekosongan publik pada saat pengujian dimulai(Hasil Tes IT arg0) {
// TODO-generated method stub
}

@Mengesampingkan
kekosongan publik pada Tes Berhasil(Hasil Tes IT arg0) {
// TODO-generated method stub
}
}

Sekarang mari kita modifikasi Tes Pendengar kelas. Secara khusus, kita akan mengisi metode-metode berikut: pada KegagalanUji, pada Tes Dilewati, pada MulaiUji, dan pada Tes Berhasil.

Perubahannya sederhana: setiap metode mencetak nama pengujian sehingga konsol dengan jelas menunjukkan status lulus, gagal, dan dilewati.

Setelah dimodifikasi, kode tersebut akan terlihat seperti ini:

paket Demo Pendengar;

mengimpor org.testng.ITestContext;
mengimpor org.testng.ITestListener;
mengimpor org.testng.ITestResult;

kelas umum Tes Pendengar mengimplementasikan Pendengar {

@Mengesampingkan
kekosongan publik setelah selesai(Konteks Teruji Hasil) {
}

@Mengesampingkan
kekosongan publik padaMulai(Konteks Teruji Hasil) {
}

@Mengesampingkan
kekosongan publik pada TesGagalTetapiDalamPersentaseKeberhasilan(Hasil Tes IT Hasil) {
}

// Ketika sebuah kasus uji gagal, metode ini akan dipanggil.
@Mengesampingkan
kekosongan publik pada kegagalan pengujian(Hasil Tes IT Hasil) {
Sistem.keluar.println(โ€œNama kasus uji yang gagal adalah: โ€œ + Hasil.getName());
}

// Ketika sebuah kasus uji dilewati, metode ini akan dipanggil.
@Mengesampingkan
kekosongan publik pada Tes Dilewati (Hasil Tes IT Hasil) {
Sistem.keluar.println(โ€œNama testcase yang dilewati adalah: โ€œ + Hasil.getName());
}

// Saat sebuah kasus uji dimulai, metode ini akan dipanggil.
@Mengesampingkan
kekosongan publik pada saat pengujian dimulai(Hasil Tes IT Hasil) {
System.out.println(Result.getName() + โ€œKasus uji coba dimulaiโ€);
}

// Ketika sebuah kasus uji berhasil, metode ini akan dipanggil.
@Mengesampingkan
kekosongan publik pada Tes Berhasil(Hasil Tes IT Hasil) {
Sistem.keluar.println(โ€œNama kasus uji yang berhasil adalah: โ€œ + Hasil.getName());
}
}

Langkah 2) Buat kelas lain bernama Kasus Uji untuk otomatisasi login. Selenium Kelas ini akan dieksekusi untuk masuk ke situs demo.

paket Demo Pendengar;

mengimpor org.openqa.selenium.By;
mengimpor org.openqa.selenium.WebDriver;
mengimpor org.openqa.selenium.firefox.FirefoxPengemudi;
mengimpor org.testng.Assert;
mengimpor org.testng.annotations.Listeners;
mengimpor org.testng.annotations.Test;

kelas umum Kasus Uji {
webdriver pengemudi = yang baru Firefoxsopir();

// Tes yang dirancang untuk berhasil, untuk memverifikasi pendengar keberhasilan.
@Uji
kekosongan publik Login() {
pengemudi.dapatkan(โ€œhttps://demo.guru99.com/V4/โ€);
driver.findElement(By.name(โ€œuidโ€)).kirimKeys(โ€œmngr34926โ€);
driver.findElement(By.name("Kata sandi")).kirimKeys(โ€œamUpenuโ€);
driver.findElement(By.name(โ€œbtnLoginโ€)).klik();
}

// Tes sengaja digagalkan, untuk memverifikasi pendengar kegagalan.
@Uji
kekosongan publik TestToFail() {
Sistem.keluar.println(โ€œMetode ini untuk menguji kegagalanโ€);
Assert.assertTrue(palsu);
}
}

Langkah 3) Selanjutnya, lampirkan listener ini ke kelas pengujian kita. Kasus UjiAda dua cara untuk menghubungkan sebuah kelas ke antarmuka pendengar.

Cara pertama adalah dengan menggunakan @Pendengar anotasi, seperti yang ditunjukkan di bawah ini:

@Listeners(Listener_Demo.ListenerTest.class)

Kami menambahkan anotasi ini di atas Kasus Uji Kelas tersebut kemudian akan terlihat seperti ini:

paket Demo Pendengar;

mengimpor org.openqa.selenium.By;
mengimpor org.openqa.selenium.WebDriver;
mengimpor org.openqa.selenium.firefox.FirefoxPengemudi;
mengimpor org.testng.Assert;
mengimpor org.testng.annotations.Listeners;
mengimpor org.testng.annotations.Test;

@Listeners(Listener_Demo.ListenerTest.class)
kelas umum Kasus Uji {
webdriver pengemudi = yang baru Firefoxsopir();

// Tes yang harus dilewati, untuk memverifikasi pendengar keberhasilan.
@Uji
kekosongan publik Login() {
pengemudi.dapatkan(โ€œhttps://demo.guru99.com/V4/โ€);
driver.findElement(By.name(โ€œuidโ€)).kirimKeys(โ€œmngr34926โ€);
driver.findElement(By.name("Kata sandi")).kirimKeys(โ€œamUpenuโ€);
driver.findElement(By.name(โ€œbtnLoginโ€)).klik();
}

// Tes sengaja digagalkan, untuk memverifikasi pendengar kegagalan.
@Uji
kekosongan publik TestToFail() {
Sistem.keluar.println(โ€œMetode ini untuk menguji kegagalanโ€);
Assert.assertTrue(palsu);
}
}

Struktur proyek terlihat seperti:

TestNG Struktur proyek pendengar

Langkah 4) Jalankan Kasus Uji Kelas. Metode di dalam Tes Pendengar dipanggil secara otomatis berdasarkan perilaku metode yang diberi anotasi dengan @Uji.

Langkah 5) Periksa output yang ditampilkan di konsol.

Output dari Kasus Uji seperti:

TestNG Output konsol pendengar

[TestNG] Berlari:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipseโ€“1058076918\testng-customsuite.xml

Kasus uji login dimulai
Nama test case yang berhasil adalah: Login
Kasus uji TestToFail dimulai
Metode ini untuk menguji kegagalan
Nama testcase yang gagal adalah: TestToFail
BERHASIL: Login
GAGAL: TestToFail
java.lang.AssertionError: diharapkan [true] tetapi ditemukan [false]

Menggunakan Listener untuk Beberapa Kelas

Jika sebuah proyek memiliki banyak kelas pengujian, menambahkan @Pendengar Memberikan anotasi pada setiap item menjadi rumit dan rawan kesalahan.

Kalau begitu, buatlah pengujian.xml file dan daftarkan listener di sana sekali saja.

Tag listener testng.xml untuk beberapa kelas

Listener ini kemudian diterapkan di seluruh rangkaian pengujian terlepas dari jumlah kelasnya. Saat Anda menjalankan file XML, listener akan aktif untuk setiap kelas yang dideklarasikan dalam rangkaian pengujian, dan Anda dapat menggabungkan sejumlah kelas listener di dalam tag yang sama.

WebDriverListener di Selenium 4 vs EventFiringWebDriver yang sudah usang

Sementara TestNG Listener bereaksi terhadap peristiwa siklus hidup pengujian, sedangkan listener WebDriver bereaksi terhadap tindakan driver browser seperti klik, navigasi, atau panggilan findElement. Dalam Selenium 3. Pendekatan yang umum dilakukan adalah... WebDriverEventListener antarmuka terhubung melalui EventFiringWebDriverKeduanya sudah usang dalam Selenium 4.x.

Pengganti modernnya adalah WebDriverListener antarmuka dikombinasikan dengan EventFiringDecorator:

mengimpor org.openqa.selenium.WebDriver;
mengimpor org.openqa.selenium.chrome.ChromeDriver;
mengimpor org.openqa.selenium.support.events.EventFiringDecorator;
mengimpor org.openqa.selenium.support.events.WebDriverListener;

kelas umum Pendengar Logging mengimplementasikan WebDriverListener {
@Mengesampingkan
kekosongan publik sebelumDapatkan(webdriver pengemudi, String url) {
Sistem.keluar.println(โ€œMenavigasi keโ€ + url);
}
}

webdriver mentah = yang baru Driver Chrome();
webdriver pengemudi = yang baru EventFiringDecorator<>(yang baru LoggingListener()).decorate(raw);

Decorator ini dapat membungkus WebDriver, WebElement, atau Alert apa pun, yang lebih fleksibel daripada pembungkus pemicu peristiwa lama. Gunakan WebDriverListener untuk pengamatan sisi browser dan TestNG Pendengar untuk pelaporan tingkat suite.

Pendengar Bertenaga AI: Log yang Lebih Cerdas dan Penanganan Kegagalan yang Lebih Baik

modern Selenium Tim-tim semakin banyak mengintegrasikan layanan AI ke dalam sistem pendengar mereka untuk membuat sinyal CI lebih mudah ditindaklanjuti. Di dalam pada KegagalanUjiDengan bantuan AI, pendengar dapat menangkap cuplikan DOM beserta tangkapan layar, mengirimkannya ke model yang mengembalikan klaster penyebab utama yang mungkin terjadi, dan menulis kembali tag ke dalam TestNG laporan atau alat seperti ReportPortal.

Pola umum yang didorong oleh AI meliputi:

  • Deteksi pengujian yang tidak stabil: Pendengar meneruskan garis waktu lulus/gagal ke sebuah model yang mengklasifikasikan kegagalan sebagai tidak menentu, faktor lingkungan, atau kemunduran nyata.
  • Tangkapan layar cerdas: Model penglihatan komputer memotong, memberi anotasi, dan membandingkan tangkapan layar UI sehingga peninjau melihat area yang berubah alih-alih tampilan halaman penuh.
  • Lokator yang dapat memperbaiki diri sendiri: A WebDriverListener kait sebelumMencariElemen dan meminta asisten AI untuk menyarankan pencari lokasi alternatif ketika pencari lokasi utama mengalami kesalahan. Tidak Ada Pengecualian Elemen Seperti Itu.
  • Ringkasan dalam bahasa alami: An iReporter Implementasi tersebut memasukkan hasil rangkaian ke dalam LLM yang menghasilkan ringkasan singkat satu paragraf.

Lapisan pendengar adalah tempat paling bersih untuk menyuntikkan hook ini karena tidak masuk ke dalam logika pengujian dan diterapkan secara seragam di seluruh rangkaian pengujian.

Ringkasan

Pendengar diharuskan membuat log atau menyesuaikan TestNG laporan masuk Selenium Pengemudi Web.

  • TestNG Menawarkan banyak antarmuka pendengar; pilih salah satu yang sesuai dengan acara yang Anda minati.
  • Listener adalah antarmuka yang digunakan dalam Selenium Skrip WebDriver untuk menanggapi peristiwa siklus hidup pengujian.
  • Tutorial tersebut mendemonstrasikan Pendengar dengan tes lulus dan tes gagal.
  • Anda dapat melampirkan pendengar dengan @Pendengar atau daftarkan sekali di pengujian.xml untuk seluruh suite.
  • Selenium 4.x menggantikan EventFiringWebDriver dengan WebDriverListener + EventFiringDecorator untuk peristiwa tingkat WebDriver.

Pertanyaan Umum Demo Slot

Listener adalah antarmuka yang berlangganan peristiwa yang dihasilkan selama Selenium uji coba. TestNG Listener bereaksi terhadap peristiwa siklus hidup pengujian seperti mulai, lulus, gagal, dan lewati. Listener WebDriver bereaksi terhadap peristiwa driver browser seperti klik, navigasi, dan panggilan findElement.

ITestListener dijalankan untuk setiap metode @Test dan mengekspos onTestStart, onTestSuccess, onTestFailure, onTestSkipped, dan onFinish. ISuiteListener hanya dijalankan dua kali per suite, dengan onStart dan onFinish, sehingga ideal untuk pengaturan tingkat suite seperti membuka file laporan.

Anda dapat mendaftar a TestNG Ada dua cara untuk menambahkan listener: tambahkan anotasi @Listeners(MyListener.class) di atas kelas pengujian, atau deklarasikan sebuah listener. tag di dalam testng.xml. Pendekatan XML menerapkan listener di setiap kelas dalam suite tanpa memodifikasi kode sumber.

EventFiringWebDriver dan WebDriverEventListener sudah usang (deprecated) di Selenium 4.x. Pengganti yang direkomendasikan adalah antarmuka WebDriverListener yang dikombinasikan dengan EventFiringDecorator, yang dapat membungkus instance WebDriver, WebElement, atau Alert dan menawarkan titik kait yang lebih bersih seperti beforeGet dan afterClick.

Gunakan IReporter ketika Anda ingin menghasilkan laporan khusus setelah rangkaian pengujian selesai, seperti ringkasan HTML atau JSON. Gunakan IInvokedMethodListener ketika Anda memerlukan hook sebelum dan sesudah setiap metode pengujian, termasuk metode konfigurasi seperti @BeforeMethod dan @AfterMethod.

Model AI dapat memperkaya output pendengar dengan memberi tag pada setiap entri log berdasarkan tingkat keparahan, menghasilkan deskripsi langkah dalam bahasa alami, dan mengelompokkan kegagalan terkait. Di dalam onTestFailure, layanan AI dapat menganalisis tangkapan layar dan tumpukan. trace, lalu lampirkan kemungkinan penyebab utamanya pada TestNG melaporkan.

Ya. Pendengar dapat mengirimkan riwayat lulus/gagal ke layanan AI yang mengklasifikasikan kegagalan sebagai tidak stabil, faktor lingkungan, atau regresi nyata. Putusan tersebut kemudian ditulis kembali sebagai sebuah TestNG atribut ini memungkinkan dasbor untuk mengisolasi pengujian yang bermasalah tanpa perlu campur tangan manusia untuk meninjau setiap build yang gagal.

Ringkaslah postingan ini dengan: