TestNG Posluchači v Selenium
⚡ Chytré shrnutí
Posluchači v Selenium WebDriver jsou TestNG rozhraní, která zachycují testovací události za účelem úpravy protokolů, sestav a akcí po selhání. Tento článek vysvětluje metody ITestListener a prochází spustitelným Java příklad a objasňuje, jak Selenium Verze 4 nahradila zastaralý WebDriverEventListener.

Selenium Skripty WebDriveru často potřebují reagovat na testovací události, jako je například úspěšné splnění aserce, neúspěšný lokátor nebo přeskočený krok. Listenery to umožňují. Obecně řečeno, Selenium Projekty se spoléhají na dvě rodiny posluchačů:
- Posluchače WebDriver
- TestNG Posluchači
V tomto tutoriálu se zaměříme na TestNG Posluchače s poznámkou o tom, jak se posluchače na úrovni WebDriveru změnily v Selenium 4.x
Co je Listener v TestNG?
Listener je rozhraní, které upravuje výchozí chování TestNGJak název napovídá, posluchači „naslouchají“ událostem definovaným v Selenium skript a odpovídajícím způsobem reagovat. Používáte je implementací příslušného rozhraní Listener a jeho registrací ve vaší testovací třídě nebo sadě. Listener vám umožňuje přizpůsobit TestNG zprávy, přikládat snímky obrazovky a generovat strukturované protokoly.
Typy posluchačů v TestNG
TestNG dodává rodinu rozhraní listeneru a každé z nich se zaměřuje na jinou fázi životního cyklu testu.
Níže jsou uvedeny běžně používané TestNG posluchači:
- IAnnotationTransformer
- IAnnotationTransformer2
- IKonfigurovatelné
- IConfigurationListener
- IExecutionListener
- IHokable
- IIInvokedMethodListener
- IIInvokedMethodListener2
- IMethodInterceptor
- IRreportér
- ISuiteListener
- ITestListener
Tato rozhraní se používají v Selenium generovat protokoly nebo je upravovat TestNG reporty. V tomto tutoriálu implementujeme ITestListener.
ITestListener odhaluje následující metody:
- při spuštění – voláno při zahájení jakéhokoli testu.
- při úspěšném testu – voláno, když test projde.
- při selhání testu – voláno, když test selže.
- při přeskočení testu – voláno, když je test přeskočen.
- onTestFailedButWithinSuccessPercentage – voláno, když test selže, ale je v rámci procenta úspěšnosti.
- onFinish – volána po provedení všech testů ve třídě.
Scénář testu
V tomto testovacím scénáři automatizujeme proces přihlašování a implementujeme ITestListener proti tomu.
- zahájit Firefox a otevřete web https://demo.guru99.com/V4/
- Přihlaste se do aplikace.
Kroky k vytvoření a TestNG Posluchač
Pro výše uvedený testovací scénář implementujeme Listener krok za krokem.
Krok 1) Vytvořte třídu s názvem ListenerTest který implementuje ITestListenerNajeďte myší na červené podtržení a Eclipse navrhne dvě rychlá řešení, jak je uvedeno níže:
Klikněte na „Přidat neimplementované metody“. Do kódu se přidá několik metod typu stub (bez těla), podobně jako zde:
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
veřejná třída ListenerTest nářadí ITestListener {
@ Přepis
veřejná prázdnota přiDokončení(ITestContext arg0) {
// Úkol Automaticky generovaný stub metody
}
@ Přepis
veřejná prázdnota přiStartu(ITestContext arg0) {
// Úkol Automaticky generovaný stub metody
}
@ Přepis
veřejná prázdnota přiTestFailedButWithinSuccessPercentage(VýsledekITestu arg0) {
// Úkol Automaticky generovaný stub metody
}
@ Přepis
veřejná prázdnota přiSelháníTestu(VýsledekITestu arg0) {
// Úkol Automaticky generovaný stub metody
}
@ Přepis
veřejná prázdnota přiPřeskočeníTestu(VýsledekITestu arg0) {
// Úkol Automaticky generovaný stub metody
}
@ Přepis
veřejná prázdnota přiTestStart(VýsledekITestu arg0) {
// Úkol Automaticky generovaný stub metody
}
@ Přepis
veřejná prázdnota přiTestSuccess(VýsledekITestu arg0) {
// Úkol Automaticky generovaný stub metody
}
}
Nyní upravme ListenerTest třída. Konkrétně vyplníme následující metody: při selhání testu, při přeskočení testu, při spuštění testu, a při úspěšném testu.
Změna je jednoduchá: každá metoda vypíše název testu, takže konzole jasně zobrazuje stav úspěšný, neúspěšný a přeskočený.
Po úpravě vypadá kód takto:
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
veřejná třída ListenerTest nářadí ITestListener {
@ Přepis
veřejná prázdnota přiDokončení(ITestContext Výsledek) {
}
@ Přepis
veřejná prázdnota přiStartu(ITestContext Výsledek) {
}
@ Přepis
veřejná prázdnota přiTestFailedButWithinSuccessPercentage(VýsledekITestu Výsledek) {
}
// Když testovací případ selže, je volána tato metoda.
@ Přepis
veřejná prázdnota přiSelháníTestu(VýsledekITestu Výsledek) {
System.out.println(„Název neúspěšného testovacího případu je:“ + Výsledek.getName());
}
// Když je testovací případ přeskočen, je volána tato metoda.
@ Přepis
veřejná prázdnota přiPřeskočeníTestu(VýsledekITestu Výsledek) {
System.out.println(„Název přeskočeného testovacího případu je:“ + Výsledek.getName());
}
// Tato metoda se zavolá při spuštění testovacího případu.
@ Přepis
veřejná prázdnota přiTestStart(VýsledekITestu Výsledek) {
System.out.println(Výsledek.getName() + „Testovací případ zahájen“);
}
// Když testovací případ projde úspěšně, je volána tato metoda.
@ Přepis
veřejná prázdnota přiTestSuccess(VýsledekITestu Výsledek) {
System.out.println(„Název úspěšně dokončeného testovacího případu je:“ + Výsledek.getName());
}
}
Krok 2) Vytvořte další třídu s názvem Testovací případy pro automatizaci přihlašování. Selenium spustí tuto třídu pro přihlášení na demo web.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxŘidiči;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
veřejná třída Testovací případy {
webový ovladač řidič = nový FirefoxŘidič();
// Test navržený tak, aby prošel, aby se ověřil posluchač úspěšnosti.
@Test
veřejná prázdnota Přihlášení() {
ovladač.get(“https://demo.guru99.com/V4/”);
driver.findElement(Podle.name(„uid“)).sendKeys(„mngr34926“);
driver.findElement(Podle.name("Heslo")).sendKeys(„amUpenu“);
driver.findElement(Podle.name(„Přihlásit tlačítkem“)).kliknout();
}
// Vynuceně selhal test, aby se ověřil posluchač selhání.
@Test
veřejná prázdnota TestProSelhání() {
System.out.println(„Tato metoda testování selhala“);
Assert.assertTrue(nepravdivý);
}
}
Krok 3) Dále připojte tento posluchač k naší testovací třídě Testovací případyExistují dva způsoby, jak propojit třídu s rozhraním listeneru.
Prvním způsobem je použití @Posluchači anotace, jak je uvedeno níže:
Tuto anotaci přidáme nad Testovací případy třída. Třída pak vypadá takto:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxŘidiči;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(Listener_Demo.ListenerTest.class)
veřejná třída Testovací případy {
webový ovladač řidič = nový FirefoxŘidič();
// Test pro ověření úspěšnosti posluchače.
@Test
veřejná prázdnota Přihlášení() {
ovladač.get(“https://demo.guru99.com/V4/”);
driver.findElement(Podle.name(„uid“)).sendKeys(„mngr34926“);
driver.findElement(Podle.name("Heslo")).sendKeys(„amUpenu“);
driver.findElement(Podle.name(„Přihlásit tlačítkem“)).kliknout();
}
// Vynuceně selhal test, aby se ověřil posluchač selhání.
@Test
veřejná prázdnota TestProSelhání() {
System.out.println(„Tato metoda testování selhala“);
Assert.assertTrue(nepravdivý);
}
}
Struktura projektu vypadá takto:
Krok 4) Spustit Testovací případy třída. Metody uvnitř ListenerTest se volají automaticky na základě chování metod anotovaných pomocí @Test.
Krok 5) Ověřte výstup zobrazený v konzoli.
Výstup z Testovací případy vypadá jako:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml
Testovací případ přihlášení byl zahájen
Název úspěšně dokončeného testovacího případu je: Přihlášení
Testovací případ TestToFail byl zahájen
Tato metoda testování selhala
Název neúspěšného testovacího případu je: TestToFail
ÚSPĚŠNÉ: Přihlášení
NEÚSPĚCH: TestToFail
java.lang.AssertionError: očekávaná hodnota [true], ale nalezena hodnota [false]
Použití listeneru pro více tříd
Pokud má projekt mnoho testovacích tříd, přidání @Posluchači anotace ke každému z nich se stává těžkopádnou a náchylnou k chybám.
V tom případě vytvořte testng.xml soubor a jednou tam zaregistrovat posluchače.
Tento listener se poté použije na celou testovací sadu bez ohledu na počet tříd. Při spuštění souboru XML se listener spustí pro každou třídu deklarovanou v sadě a v rámci stejného tagu můžete řetězit libovolný počet tříd listenerů.
WebDriverListener v Selenium 4 vs. zastaralý EventFiringWebDriver
Zatímco TestNG posluchače reagují na události životního cyklu testu, posluchače WebDriver reagují na akce ovladače prohlížeče, jako je kliknutí, navigace nebo volání findElement. Selenium 3 Typický přístup byl WebDriverEventListener rozhraní propojené kabelem Webový ovladač spouštění událostíEventFiringWebDriverOba jsou v [text je zastaralý]. Selenium 4.x
Moderní náhradou je WebDriverListener rozhraní v kombinaci s EventFirmingDecorator:
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.events.EventFiringDecorator;
import org.openqa.selenium.support.events.WebDriverListener;
veřejná třída Posluchač protokolování nářadí WebDriverListener {
@ Přepis
veřejná prázdnota předZískej(webový ovladač ovladač, řetězec URL) {
System.out.println(„Navigace k“ + adresa URL);
}
}
webový ovladač syrové = nový ChromeDriver();
webový ovladač řidič = nový EventFirmingDecorator<>(nový LoggingListener()).decorate(raw);
Dekorátor může obalit libovolný WebDriver, WebElement nebo Alert, což je flexibilnější než starý obalovací mechanismus pro spouštění událostí. WebDriverListener pro pozorovatelnost na straně prohlížeče a TestNG ITestListener pro reporting na úrovni sady.
Posluchače s umělou inteligencí: Chytřejší protokoly a třídění selhání
moderní Selenium Týmy stále častěji zapojují služby umělé inteligence do svých posluchačů, aby signály CI byly akčnější. Uvnitř při selhání testu, posluchač s podporou umělé inteligence může zachytit snímek DOM a snímek obrazovky, odeslat je modelu, který vrátí pravděpodobný cluster hlavní příčiny, a zapsat tag zpět do TestNG zprávu nebo nástroj jako ReportPortal.
Mezi běžné vzorce řízené umělou inteligencí patří:
- Detekce nespolehlivého testu: Posluchače přeposílají časové osy úspěšnosti/neúspěchu modelu, který klasifikuje selhání jako nestabilní, environmentální nebo skutečnou regresi.
- Chytré snímky obrazovky: Modely počítačového vidění ořezávají, anotují a porovnávají snímky obrazovky uživatelského rozhraní, aby recenzenti viděli změněnou oblast místo výpisu celé stránky.
- Samoopravné lokátory: A WebDriverListener háky předNajítPrvek a požádá pomocníka s umělou inteligencí, aby navrhl alternativní lokátor, když ten primární vyvolá NoSuchElementException.
- Shrnutí v přirozeném jazyce: An IRreportér Implementace vkládá výsledky sady do LLM, která vytvoří jednoodstavcové shrnutí.
Vrstva listeneru je nejčistším místem pro vkládání těchto hooků, protože zůstává mimo testovací logiku a aplikuje se rovnoměrně napříč celým souborem.
Shrnutí
Posluchači musí generovat protokoly nebo přizpůsobovat TestNG zprávy v Selenium WebDriver.
- TestNG nabízí mnoho rozhraní pro posluchače; vyberte si to, které odpovídá události, na které vám záleží.
- Posluchači jsou rozhraní používaná v Selenium Skripty WebDriveru pro reakci na události životního cyklu testování.
- Výukový program demonstroval ITestListener s prospělým a neprospělým testem.
- Můžete připojit posluchače pomocí @Posluchači nebo si to jednou zaregistrujte testng.xml pro celou sadu.
- Selenium 4.x nahrazuje Webový ovladač spouštění událostíEventFiringWebDriver s WebDriverListener + EventFirmingDecorator pro události na úrovni WebDriveru.






