TestNG Auditeurs dans Selenium
โก Rรฉsumรฉ intelligent
Auditeurs dans Selenium WebDriver sont TestNG Les interfaces qui interceptent les รฉvรฉnements de test permettent de personnaliser les journaux, les rapports et les actions post-รฉchec. Cet article explique les mรฉthodes de ITestListener et prรฉsente un exemple d'exรฉcution. Java par exemple, et clarifie comment Selenium La version 4 a remplacรฉ la fonction obsolรจte WebDriverEventListener.

Selenium Les scripts WebDriver doivent souvent rรฉagir ร des รฉvรฉnements de test tels qu'une assertion rรฉussie, un รฉchec de localisation ou une รฉtape ignorรฉe. Les รฉcouteurs rendent cela possible. De maniรจre gรฉnรฉrale, Selenium Ces projets reposent sur deux familles d'auditeurs :
- รcouteurs WebDriver
- TestNG Les auditeurs
Dans ce tutoriel, nous nous concentrerons sur TestNG รcouteurs, avec une note sur la faรงon dont les รฉcouteurs au niveau WebDriver ont changรฉ dans Selenium 4.x.
Qu'est-ce qu'un auditeur dans TestNG?
Un รฉcouteur est une interface qui modifie le comportement par dรฉfaut de TestNGComme son nom l'indique, les รฉcouteurs ยซ รฉcoutent ยป les รฉvรฉnements dรฉfinis dans un Selenium Vous pouvez les utiliser en implรฉmentant l'interface Listener correspondante et en l'enregistrant dans votre classe ou suite de tests. Les Listeners vous permettent de personnaliser le comportement. TestNG gรฉnรฉrer des rapports, joindre des captures d'รฉcran et produire des journaux structurรฉs.
Types d'auditeurs dans TestNG
TestNG Il propose une famille d'interfaces d'รฉcoute, chacune ciblant une รฉtape diffรฉrente du cycle de vie des tests.
Vous trouverez ci-dessous les plus couramment utilisรฉs TestNG les auditeurs:
- IAnnotationTransformateur
- IAnnotationTransformer2
- IConfigurable
- IConfigurationListener
- IExecutionListener
- IAccrochable
- IInvokedMethodListenerInvokedMethodListener
- IInvokedMethodListener2
- IMethodInterceptor
- I Reporter
- ISuiteListener
- ITestListener
Ces interfaces sont utilisรฉes dans Selenium pour gรฉnรฉrer des journaux ou personnaliser TestNG rapports. Dans ce tutoriel, nous allons mettre en ลuvre ITestListener.
ITestListener expose les mรฉthodes suivantes :
- onStart โ appelรฉe lorsqu'un test dรฉmarre.
- onTestSuccess โ appelรฉ lorsqu'un test rรฉussit.
- onTestFailure โ appelรฉe lorsqu'un test รฉchoue.
- onTestSkipped โ appelรฉ lorsqu'un test est ignorรฉ.
- onTestFailedButWithinSuccessPercentage โ appelรฉ lorsqu'un test รฉchoue mais reste dans la plage de pourcentage de rรฉussite.
- onFinish โ appelรฉe une fois que tous les tests de la classe ont รฉtรฉ exรฉcutรฉs.
Scรฉnario de test
Dans ce scรฉnario de test, nous allons automatiser le processus de connexion et implรฉmenter ITestListener encontre.
- Lancement Firefox et ouvrez le site https://demo.guru99.com/V4/
- Connectez-vous ร l'application.
รtapes pour crรฉer un TestNG Auditeur
Pour le scรฉnario de test ci-dessus, nous allons implรฉmenter l'รฉcouteur รฉtape par รฉtape.
รtape 1) Crรฉez une classe appelรฉe Test d'รฉcoute qui met en ลuvre ITestListenerPassez votre souris sur le trait rouge soulignรฉ et Eclipse nous vous proposerons deux solutions rapides, comme indiquรฉ ci-dessous :
Cliquez sur ยซ Ajouter des mรฉthodes non implรฉmentรฉes ยป. Plusieurs mรฉthodes stub (sans corps) sont ajoutรฉes ร votre code, comme ceci :
importer org.testng.ITestContext;
importer org.testng.ITestListener;
importer org.testng.ITestResult;
classe publique Test d'รฉcoute met en oeuvre ITestListener {
@ Override
vide public onFinish(ITestContext arg0) {
// TODO Stub de mรฉthode gรฉnรฉrรฉ automatiquement
}
@ Override
vide public onStart(ITestContext arg0) {
// TODO Stub de mรฉthode gรฉnรฉrรฉ automatiquement
}
@ Override
vide public surTestรchouรฉMaisDansPourcentageDeRรฉussite(Rรฉsultat du test IT arg0) {
// TODO Stub de mรฉthode gรฉnรฉrรฉ automatiquement
}
@ Override
vide public onTestFailure(Rรฉsultat du test IT arg0) {
// TODO Stub de mรฉthode gรฉnรฉrรฉ automatiquement
}
@ Override
vide public onTestSkipped(Rรฉsultat du test IT arg0) {
// TODO Stub de mรฉthode gรฉnรฉrรฉ automatiquement
}
@ Override
vide public onTestStart(Rรฉsultat du test IT arg0) {
// TODO Stub de mรฉthode gรฉnรฉrรฉ automatiquement
}
@ Override
vide public onTestSuccess(Rรฉsultat du test IT arg0) {
// TODO Stub de mรฉthode gรฉnรฉrรฉ automatiquement
}
}
Modifions maintenant le Test d'รฉcoute classe. Plus prรฉcisรฉment, nous allons complรฉter les mรฉthodes suivantes : onTestFailure, onTestSkipped, onTestStart et onTestSuccess.
Le changement est simple : chaque mรฉthode affiche le nom du test afin que la console indique clairement le statut : rรฉussite, รฉchec ou ignorรฉ.
Aprรจs modification, le code ressemble ร ceci :
importer org.testng.ITestContext;
importer org.testng.ITestListener;
importer org.testng.ITestResult;
classe publique Test d'รฉcoute met en oeuvre ITestListener {
@ Override
vide public onFinish(ITestContext Rรฉsultat) {
}
@ Override
vide public onStart(ITestContext Rรฉsultat) {
}
@ Override
vide public surTestรchouรฉMaisDansPourcentageDeRรฉussite(Rรฉsultat du test IT Rรฉsultat) {
}
// Lorsqu'un test รฉchoue, cette mรฉthode est appelรฉe.
@ Override
vide public onTestFailure(Rรฉsultat du test IT Rรฉsultat) {
System.out.println(ยซ Le nom du cas de test ayant รฉchouรฉ est : ยป + Result.getName());
}
// Lorsqu'un cas de test est ignorรฉ, cette mรฉthode est appelรฉe.
@ Override
vide public onTestSkipped(Rรฉsultat du test IT Rรฉsultat) {
System.out.println(ยซ Le nom du cas de test ignorรฉ est : ยป + Result.getName());
}
// Cette mรฉthode est appelรฉe lorsqu'un cas de test dรฉmarre.
@ Override
vide public onTestStart(Rรฉsultat du test IT Rรฉsultat) {
System.out.println(Result.getName() + ยซ Cas de test dรฉmarrรฉ ยป);
}
// Cette mรฉthode est appelรฉe lorsqu'un test rรฉussit.
@ Override
vide public onTestSuccess(Rรฉsultat du test IT Rรฉsultat) {
System.out.println(ยซ Le nom du cas de test rรฉussi est : ยป + Result.getName());
}
}
รtape 2) Crรฉez une autre classe appelรฉe Cas de test pour l'automatisation de la connexion. Selenium exรฉcutera cette classe pour se connecter au site de dรฉmonstration.
importer org.openqa.selenium.By ;
importer org.openqa.selenium.WebDriver ;
importer org.openqa.selenium.firefox.FirefoxConducteurs;
importer org.testng.Assert;
importer org.testng.annotations.Listeners;
importer org.testng.annotations.Test ;
classe publique Cas de test {
pilote web conducteur = New FirefoxChauffeur();
// Test conรงu pour rรฉussir, afin de vรฉrifier l'รฉcouteur de succรจs.
@Tester
vide public Se connecter() {
pilote.get("https://demo.guru99.com/V4/");
pilote.trouverElement(Par.nom(ยซ uid ยป)).sendKeys(ยซ mgr34926 ยป);
pilote.trouverElement(Par.nom("mot de passe")).sendKeys(ยซ amUpenu ยป);
pilote.trouverElement(Par.nom(ยซ btnLogin ยป)).click();
}
// Test ayant รฉchouรฉ de force, pour vรฉrifier l'รฉcouteur d'รฉchec.
@Tester
vide public TestToFail() {
System.out.println(ยซ Cette mรฉthode de test รฉchoue ยป);
Assert.assertTrue(non);
}
}
รtape 3) Ensuite, associez cet รฉcouteur ร notre classe de test. Cas de testIl existe deux faรงons de connecter une classe ร une interface d'รฉcoute.
La premiรจre faรงon est d'utiliser le @Auditeurs annotation, comme indiquรฉ ci-dessous :
Nous ajoutons cette annotation au-dessus du Cas de test classe. La classe ressemble alors ร ceci :
importer org.openqa.selenium.By ;
importer org.openqa.selenium.WebDriver ;
importer org.openqa.selenium.firefox.FirefoxConducteurs;
importer org.testng.Assert;
importer org.testng.annotations.Listeners;
importer org.testng.annotations.Test ;
@Listeners(Listener_Demo.ListenerTest.class)
classe publique Cas de test {
pilote web conducteur = New FirefoxChauffeur();
// Test rรฉussi, pour vรฉrifier l'รฉcouteur de succรจs.
@Tester
vide public Se connecter() {
pilote.get("https://demo.guru99.com/V4/");
pilote.trouverElement(Par.nom(ยซ uid ยป)).sendKeys(ยซ mgr34926 ยป);
pilote.trouverElement(Par.nom("mot de passe")).sendKeys(ยซ amUpenu ยป);
pilote.trouverElement(Par.nom(ยซ btnLogin ยป)).click();
}
// Test ayant รฉchouรฉ de force, pour vรฉrifier l'รฉcouteur d'รฉchec.
@Tester
vide public TestToFail() {
System.out.println(ยซ Cette mรฉthode de test รฉchoue ยป);
Assert.assertTrue(non);
}
}
La structure du projet ressemble ร :
รtape 4) Exรฉcutez le Cas de test classe. Mรฉthodes ร l'intรฉrieur Test d'รฉcoute sont invoquรฉes automatiquement en fonction du comportement des mรฉthodes annotรฉes avec @Tester.
รtape 5) Vรฉrifiez le rรฉsultat affichรฉ dans la console.
La sortie de Cas de test ressemble ร :
C:\Users\gauravn\AppData\Local\Temp\testng-eclipseโ1058076918\testng-customsuite.xml
Test de connexion dรฉmarrรฉ
Le nom du cas de test rรฉussi est : Connexion
Cas de test TestToFail dรฉmarrรฉ
Cette mรฉthode de test รฉchoue
Le nom du cas de test ayant รฉchouรฉ est : TestToFail
RรUSSI : Connexion
รCHEC : TestToFail
java.lang.AssertionError : attendu [true] mais trouvรฉ [false]
Utilisation d'un รฉcouteur pour plusieurs classes
Si un projet comporte de nombreuses classes de test, l'ajout du @Auditeurs L'annotation de chacun d'eux devient fastidieuse et sujette aux erreurs.
Dans ce cas, crรฉez un testng.xml Crรฉez un fichier et enregistrez-y l'รฉcouteur une seule fois.
Ce gestionnaire d'รฉvรฉnements est ensuite appliquรฉ ร l'ensemble de la suite de tests, quel que soit le nombre de classes. Lors de l'exรฉcution du fichier XML, il est dรฉclenchรฉ pour chaque classe dรฉclarรฉe dans la suite, et il est possible d'enchaรฎner autant de gestionnaires d'รฉvรฉnements que nรฉcessaire au sein d'une mรชme balise.
WebDriverListener dans Selenium 4 contre le pilote EventFiringWebDriver obsolรจte
Si TestNG Les รฉcouteurs rรฉagissent aux รฉvรฉnements du cycle de vie des tests, tandis que les รฉcouteurs WebDriver rรฉagissent aux actions du pilote de navigateur telles qu'un clic, une navigation ou un appel findElement. Selenium 3 l'approche typique รฉtait la รcouteur d'รฉvรฉnements WebDriver interface cรขblรฉe ร travers EventFiringWebDriverLes deux sont obsolรจtes dans Selenium 4.x.
Le remplaรงant moderne est le รcouteur de pilote Web interface combinรฉe avec Dรฉcorateur d'รฉvรฉnements:
importer org.openqa.selenium.chrome.ChromeDriver ;
importer org.openqa.selenium.support.events.EventFiringDecorator;
importer org.openqa.selenium.support.events.WebDriverListener;
classe publique รcouteur de journalisation met en oeuvre รcouteur de pilote Web {
@ Override
vide public avantObtenir(pilote web pilote, chaรฎne url) {
System.out.println(ยซ Naviguer vers ยป + url);
}
}
pilote web brut = New ChromeDriver();
pilote web conducteur = New Dรฉcorateur d'รฉvรฉnements<>(New LoggingListener()).dรฉcorer(raw);
Le dรฉcorateur peut encapsuler n'importe quel WebDriver, WebElement ou Alert, ce qui est plus flexible que l'ancien systรจme d'encapsulation รฉvรฉnementiel. รcouteur de pilote Web pour l'observabilitรฉ cรดtรฉ navigateur et TestNG ITestListener pour les rapports au niveau de la suite.
รcouteurs basรฉs sur l'IA : journaux plus intelligents et triage des pannes
Moderne Selenium Les รฉquipes intรจgrent de plus en plus de services d'IA ร leurs systรจmes d'รฉcoute pour rendre les signaux d'intรฉgration continue plus exploitables. onTestFailureUn รฉcouteur assistรฉ par IA peut capturer un instantanรฉ du DOM ainsi qu'une capture d'รฉcran, les envoyer ร un modรจle qui renvoie un cluster de causes racines probables et rรฉรฉcrire une รฉtiquette dans le DOM. TestNG un rapport ou un outil comme ReportPortal.
Les modรจles courants pilotรฉs par l'IA comprennent :
- Dรฉtection des tests instables : Les auditeurs transmettent les chronologies de rรฉussite/รฉchec ร un modรจle qui classe un รฉchec comme รฉtant instable, environnemental ou une vรฉritable rรฉgression.
- Captures d'รฉcran intelligentes : Les modรจles de vision par ordinateur recadrent, annotent et comparent les captures d'รฉcran d'interface utilisateur afin que les rรฉviseurs voient la rรฉgion modifiรฉe au lieu d'une page entiรจre.
- Localisateurs d'auto-rรฉparation : A รcouteur de pilote Web crochets avantFindElement et demande ร une IA d'assistance de suggรฉrer un localisateur alternatif lorsque le localisateur principal รฉchoue NoSuchElementException.
- Rรฉsumรฉs en langage naturel : An I Reporter L'implรฉmentation alimente un LLM en rรฉsultats qui produit un rรฉsumรฉ d'un paragraphe.
La couche d'รฉcoute est l'endroit le plus propre pour injecter ces hooks car elle reste en dehors de la logique de test et s'applique uniformรฉment ร l'ensemble de la suite.
Rรฉsumรฉ
Les auditeurs doivent gรฉnรฉrer des journaux ou personnaliser TestNG rapports dans Selenium Pilote Web.
- TestNG propose de nombreuses interfaces d'รฉcoute ; choisissez celle qui correspond ร l'รฉvรฉnement qui vous intรฉresse.
- Les รฉcouteurs sont des interfaces utilisรฉes dans Selenium Scripts WebDriver pour rรฉagir aux รฉvรฉnements du cycle de vie des tests.
- Le tutoriel a dรฉmontrรฉ ITestListener avec un test rรฉussi et un test รฉchouรฉ.
- Vous pouvez attacher un รฉcouteur avec @Auditeurs ou enregistrez-le une fois dans testng.xml pour l'ensemble de la suite.
- Selenium 4.x remplace EventFiringWebDriver au รcouteur de pilote Web + Dรฉcorateur d'รฉvรฉnements pour les รฉvรฉnements au niveau de WebDriver.






