webdriver listeners selenium
Cosa sono i listener WebDriver? Perché abbiamo bisogno di ascoltatori nei test di automazione del selenio? Questo tutorial risponde a queste domande in dettaglio con esempi di codice di esempio:
Gli ascoltatori, come suggerisce il nome, 'ascoltano' qualsiasi evento prescritto nel codice del selenio. Ad esempio, se vuoi sapere cosa succede prima di fare clic su qualsiasi elemento; prima e dopo la navigazione in un elemento o cosa succede quando viene lanciata un'eccezione e il test fallisce, Listeners torna utile.
L'uso pratico degli ascoltatori in Selenium Automation Testing potrebbe essere quello di registrare l'ordine delle azioni e di acquisire lo screenshot come e quando viene generata un'eccezione. Ciò facilita il debug nelle fasi successive dell'esecuzione del test.
=> Controlla TUTTI i tutorial sul selenio qui.
Cosa imparerai:
Implementazione di listener Webdriver
Esistono principalmente due tipi di ascoltatori:
- Webdriver Listeners
- TestNG Listeners
Per prima cosa capiremo come funzionano i Webdriver Listeners. In questo tutorial, il nostro focus sarà sul Webdriver Event Listener.
Perché utilizziamo Webdriver Event Listener?
Con l'aiuto di Webdriver, siamo in grado di attivare molti eventi sul browser e sugli elementi web. Tiene traccia di tutti gli eventi che vengono attivati durante l'esecuzione e può aiutarci nel debug quando l'esecuzione è completa.
Esistono due modi in cui possiamo implementare i listener di eventi Webdriver:
- WebDriverEventListener che è un'interfaccia che ha alcuni metodi predefiniti per tenere traccia degli eventi Webdriver. Ci richiede di implementare TUTTI i metodi predefiniti nell'interfaccia.
- Classe AbstractWebDriverEventListener che ci fornisce la possibilità di implementare solo i metodi a cui siamo interessati.
# 1) Interfaccia WebDriverEventListener
I metodi predefiniti utilizzati per implementare l'interfaccia WebDriverEventListener sono elencati di seguito:
(i) void beforeChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Questo metodo viene attivato quando eseguiamo l'operazione sendKeys () o clear () sull'elemento Web. (Ad esempio, driver.findElement (By.id ('Login')). Clear ()) e viene attivato PRIMA eseguire l'operazione sul Web Element.
Parametri:
arg0= Web Element arg1=driver
(ii) void afterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Questo metodo viene attivato quando eseguiamo l'operazione sendKeys () o clear () sull'elemento Web. (Ad esempio, driver.findElement (By.id ('Login')). Clear ()) e viene attivato DOPO eseguire l'operazione sul Web Element.
Parametri:
arg0= Web Element arg1=driver
(iii) void beforeClickOn (WebElement arg0, WebDriver arg1)
Questo metodo viene attivato PRIMA clicchiamo su qualsiasi elemento web.
Parametri:
arg0= Web Element arg1=driver
(iv) void afterClickOn (WebElement arg0, WebDriver arg1)
è una chiave di sicurezza di rete uguale a una password
Questo metodo viene attivato DOPO clicchiamo su qualsiasi elemento web.
Parametri:
arg0= Web Element arg1=driver
(v) void beforeNavigateTo (String arg0, WebDriver arg1)
Questo metodo viene attivato quando utilizziamo navigate (). To (String URL) (Ad esempio, navigate (). To ('https: // www.google.com ')) E viene attivato PRIMA navigando all'URL.
Parametri:
arg0= URL arg1=driver
(vi) void afterNavigateTo (String arg0, WebDriver arg1)
Questo metodo viene attivato quando utilizziamo navigate (). To (String URL) (Ad esempio, navigate (). To ('https: // www.google.com ')) E viene attivato DOPO navigando all'URL.
Parametri:
arg0= URL arg1=driver
(vii) void beforeNavigateBack (WebDriver arg0)
Questo metodo viene attivato quando usiamo il comando navigate (). Back (). Prende posto PRIMA reindirizzare l'utente alla pagina precedente.
Parametri:
arg0=driver
(viii) void afterNavigateBack (WebDriver arg0)
Questo metodo viene attivato quando usiamo il comando navigate (). Back (). Prende posto DOPO reindirizzare l'utente alla pagina precedente.
Parametri:
arg0=driver
(ix) void beforeNavigateForward (WebDriver arg0)
Questo metodo viene attivato quando usiamo il comando navigate (). Forward (). Prende posto PRIMA reindirizzare l'utente alla pagina successiva.
Parametri:
arg0=driver
(x) void afterNavigateBack (WebDriver arg0)
Questo metodo viene attivato quando usiamo il comando navigate (). Forward (). Prende posto DOPO reindirizzare l'utente alla pagina successiva.
Parametri:
arg0=driver
(xi) void beforeNavigateRefresh (WebDriver arg0)
Questo metodo viene attivato quando usiamo il comando navigate (). Refresh (). Prende posto PRIMA aggiornare la pagina corrente.
Parametri:
arg0=driver
(xii) void afterNavigateRefresh (WebDriver arg0)
Questo metodo viene attivato quando usiamo il comando navigate (). Refresh (). Prende posto DOPO aggiornare la pagina corrente.
Parametri:
arg0=driver
(xiii) void beforeFindBy (di arg0, WebElement arg1, WebDriver arg2)
Questo metodo viene attivato quando usiamo il comando driver.findElement (By.id ('Some id or any other locator')) . Prende posto PRIMA trova l'elemento Web.
Parametri:
arg0=locator arg1=Web Element arg2=driver
(xiv) void afterFindBy (Per arg0, WebElement arg1, WebDriver arg2)
Questo metodo viene attivato quando usiamo il comando driver.findElement (By.id ('Some id or any other locator')) . Prende posto DOPO trova l'elemento Web.
Parametri:
arg0=locator arg1=Web Element arg2=driver
(xv) void onException (Throwable arg0, WebDriver arg1)
Questo metodo viene generato ogni volta che viene generata un'eccezione. Ad esempio, se il Webdriver non è in grado di trovare l'elemento, attiverà questo metodo ed eseguirà qualsiasi codice scritto al suo interno.
Parametri:
arg0=Exception arg1= driver
(xvi) void beforeAlertAccept (WebDriver arg0)
Questo metodo viene attivato ogni volta che viene visualizzata una casella di avviso sullo schermo e viene attivato a destra PRIMA facendo clic sul pulsante 'OK o ACCETTA'.
Parametri:
arg0=driver
(xvii) void afterAlertAccept (WebDriver arg0)
Questo metodo viene attivato ogni volta che viene visualizzata una casella di avviso sullo schermo e viene attivato a destra DOPO facendo clic sul pulsante 'OK o ACCETTA'.
Parametri:
cambia voce che funzionano con discord
arg0=driver
(xviii) void beforeAlertDismiss (WebDriver arg0)
Questo metodo viene attivato ogni volta che viene visualizzata una casella di avviso sullo schermo e viene attivato a destra PRIMA cliccando sul pulsante “CANCELLA”.
Parametri:
arg0=driver
(xix) void afterAlertDismiss (WebDriver arg0)
Questo metodo viene attivato ogni volta che viene visualizzata una casella di avviso sullo schermo e viene attivato a destra DOPO cliccando sul pulsante “CANCELLA”.
Parametri:
arg0=driver
Questi sono tutti i metodi disponibili con WebDriverEventListener. Esistono altri due metodi beforeScript e afterScript ma non li tratteremo in questo tutorial.
Passaggi per implementare i listener con l'aiuto dell'interfaccia 'WebDriverEventListener' in Eclipse:
Passo 1: Crea un pacchetto con il nome 'Listeners'. All'interno di quel pacchetto, crea una classe chiamata ' WebdriverListeners 'E lascialo implementare 'WebDriverEventListener' .
L'interfaccia utente dovrebbe apparire come di seguito:
Passa il mouse sulla linea rossa con Errore, Eclipse dovrebbe lanciare il seguente suggerimento per importare 'WebDriverEventListener'. Fare clic su Importa.
L'errore su WebDriverEventListener viene chiuso ma verrà visualizzato il seguente errore sulla classe 'WebDriverListeners'. Sposta il cursore sull'errore e vedrai un suggerimento per aggiungere metodi non implementati. Fare clic su di esso e vedrai tutti i metodi elencati e descritti sopra.
Si noti che abbiamo aggiunto la riga System.out.println a ogni metodo a scopo dimostrativo.
Codice di esempio-1
package Listeners; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.events.WebDriverEventListener; public class WebDriverListeners implements WebDriverEventListener { @Override public void afterAlertAccept(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('After Alert Accept '+arg0.toString() ); } @Override public void afterAlertDismiss(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('After Alert Dismiss '+ arg0); } @Override public void afterChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence() arg2) { // TODO Auto-generated method stub System.out.println('After value change of' +arg0); } @Override public void afterClickOn(WebElement arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('After clicked'+arg0); } @Override public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) { // TODO Auto-generated method stub System.out.println('After Find By'+arg1); } @Override public void afterNavigateBack(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('After Navigate Back'); } @Override public void afterNavigateForward(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('After Navigate Forward'); } @Override public void afterNavigateRefresh(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('On Navigating Refresh'); } @Override public void afterNavigateTo(String arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('On Navigating To'+arg0); } @Override public void afterScript(String arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('After Script'); } @Override public void beforeAlertAccept(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Alert Accept'); } @Override public void beforeAlertDismiss(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Alert Dismiss'); } @Override public void beforeChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence() arg2) { // TODO Auto-generated method stub System.out.println('Before Change Value of'+arg0); } @Override public void beforeClickOn(WebElement arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('Before Click on'+arg0); } @Override public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) { // TODO Auto-generated method stub System.out.println('Before Find By'+arg0); } @Override public void beforeNavigateBack(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Navigate Back'); } @Override public void beforeNavigateForward(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Navigate Forward'); } @Override public void beforeNavigateRefresh(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Navigate Refresh'); } @Override public void beforeNavigateTo(String arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('Before Navigate To'+arg0); } @Override public void beforeScript(String arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('Before Script'); } @Override public void onException(Throwable arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('On Exception'+arg0); } }
Passo 2: Crea la classe Listeners_Tests e assicurati che abbia il metodo principale all'interno della classe. Lascia che estenda la classe WebDriverListeners in modo che la classe listener possa eseguire un'operazione sui comandi del browser prescritti per determinati eventi.
Per favore copia e incolla il codice sottostante nella classe Listeners_Tests. Esegui il codice seguente come l'applicazione Java.
Codice di esempio-2
package Listeners; import java.util.Arrays; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.Proxy; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.events.EventFiringWebDriver; public class Listeners_Tests extends WebDriverListeners{ static WebElement e; static ChromeDriver driver; public static void main(String() args) throws InterruptedException { // TODO Auto-generated method stub System.setProperty('webdriver.chrome.driver', 'E:\chromedriver.exe'); /*Setting the capabilities of Chrome Driver*/ try { DesiredCapabilities capabilities = DesiredCapabilities.chrome(); Proxy proxy = new Proxy(); String proxyServer = String.format('AProxyIDontWantToDisplay', System.getenv('proxy.username'), System.getenv('proxy.password')); proxy.setHttpProxy(proxyServer); capabilities.setCapability('proxy', proxy); ChromeOptions options = new ChromeOptions(); options.addArguments(Arrays.asList ('--no-sandbox','--ignore-certificate-errors','--homepage=about:blank','--no-first-run')); options.addArguments('disable-infobars'); capabilities.setCapability(ChromeOptions.CAPABILITY, options); driver = new ChromeDriver(capabilities); } catch (Exception e) { throw new Error(e); } /*---- Creating the instance of EventFiringWebDriver Class----*/ EventFiringWebDriver eventRecorder = new EventFiringWebDriver(driver); /*---- Creating the instance of parent class 'WebdriverListeners' class----*/ WebDriverListeners eCapture = new WebDriverListeners(); /* The below step registers the listeners for logging purpose*/ eventRecorder.register(eCapture); //Event One System.out.println('This is recording Event-One'); eventRecorder.navigate().to('https://www.google.com'); //Event Two System.out.println('This is recording Event-Two'); eventRecorder.findElement(By.xpath('//a(text()='Sign in')')).click(); //Event Three System.out.println('This is recording Event-Three'); eventRecorder.findElement(By.id('identifierId')).clear(); Thread.sleep(5000); //Event Four System.out.println('This is recording Event-Four'); eventRecorder.findElement(By.id('identifierId')).sendKeys('abc@gmail.com'); Thread.sleep(5000); //Event Five System.out.println('This is recording Event-Five'); eventRecorder.navigate().back(); //Event Six System.out.println('This is recording Event-Six'); eventRecorder.navigate().forward(); //Event Seven System.out.println('This is recording Event-Seven'); eventRecorder.navigate().refresh(); //Event Eight System.out.println('This is recording Event-Eight'); eventRecorder.get('https://www.irctc.co.in/eticketing/loginHome.jsf'); //Event Nine System.out.println('This is recording Event-Nine'); eventRecorder.findElement(By.id('loginbutton')).click(); try { Alert alert = eventRecorder.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); //Event Ten System.out.println('This is recording Event-Ten'); alert.accept(); } catch (Exception e) { } Thread.sleep(3000); eventRecorder.findElement(By.id('loginbutton')).click(); try { Alert alert = eventRecorder.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); //Event Eleven System.out.println('This is recording Event-Eleven'); alert.dismiss(); } catch (Exception e) { } //Intentionally giving wrong id so it triggers onException Listener--> Event Twelve System.out.println('This is recording Event-Twelve'); eventRecorder.findElement(By.id('loginbutn')).click(); } }
Dopo che la corsa è stata completata con successo, controlla i contenuti registrati nella console. Andremo a tutti gli eventi elencati nel codice sopra.
Snippet # 1 della console
algoritmo di ordinamento della selezione c ++
Evento 1: Questo registra l'evento beforeNavigateTo e afterNavigateTo, ed esegue di conseguenza le azioni scritte nei due blocchi.
Evento 2: Questo registra l'evento beforeFindBy e afterFindBy, ed esegue di conseguenza le azioni scritte nei due blocchi. L'evento dopo questi due eventi copre gli eventi beforeClick e afterClick.
Evento 3: Questo registra il beforeChangeValueOf e afterChangeValue degli eventi.
Evento 4: Questo è lo stesso dell'Event-3
Evento 5: Registra gli eventi beforeNavigateBack e afterNavigateBack.
Evento 6: Questo registra gli eventi beforeNavigateForward e afterNavigateForward.
Evento 7: Registra gli eventi beforeNavigateRefresh e afterNavigateRefresh.
Evento 8: Questo è lo stesso dell'Evento-1
Evento 9: Questo è lo stesso dell'Evento-2
Snippet n. 2 della console
Evento 10: Questo registra gli eventi come beforeAlertAccept e afterAlertAccept.
Evento 11: Questo registra gli eventi come beforeAlertDismiss e afterAlertDismiss.
Evento 12: Questo registra gli eventi come onException e lancia il messaggio.
Spero che la breve descrizione degli ascoltatori ti dia un'idea di come funzionano i Webdriver Listeners. Come abbiamo detto in precedenza, con l'aiuto di WebDriverEventListener, dobbiamo implementare tutti i metodi disponibili con questa interfaccia.
Tuttavia, con l'aiuto della classe AbstractWebDriverEventListener, possiamo scegliere quali eventi vogliamo implementare.
# 2) Classe AbstractWebDriverEventListener
Passaggi per implementare i listener utilizzando la classe 'AbstractWebDriverEventListener':
Passo 1
Crea un corso ' AbstractWebDriverListener 'E lascia che estenda la classe' AbstractWebDriverEventListener '
Come puoi vedere, a differenza di ' WebDriverEventListener ', Questa classe quando estesa non genera un errore per aggiungere metodi non implementati. Puoi selezionare i metodi che desideri implementare nel tuo progetto.
Copia e incolla il codice seguente:
Codice di esempio-3
package Listeners; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.events.AbstractWebDriverEventListener; public class AbstractWebDriverListeners extends AbstractWebDriverEventListener{ public void afterChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence() arg2) { // TODO Auto-generated method stub System.out.println('After value change of' +arg0); } public void afterClickOn(WebElement arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('After clicked'+arg0); } public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) { // TODO Auto-generated method stub System.out.println('After Find By'+arg1); } public void beforeChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence() arg2) { // TODO Auto-generated method stub System.out.println('Before Change Value of'+arg0); } public void beforeClickOn(WebElement arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('Before Click on'+arg0); } public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) { // TODO Auto-generated method stub System.out.println('Before Find By'+arg0); } }
Passo 2
Crea una nuova classe con il nome ' AbstractListeners_Test 'E al suo interno, crea l'istanza di' AbstractWebDriverListeners ' classe.
Copia e incolla il codice seguente all'interno di questa classe.
Codice di esempio-4
package Listeners; import java.util.Arrays; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.Proxy; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.events.EventFiringWebDriver; public class AbstractListeners_Tests extends WebDriverListeners{ static WebElement e; static ChromeDriver driver; public static void main(String() args) throws InterruptedException { // TODO Auto-generated method stub System.setProperty('webdriver.chrome.driver', 'E:\chromedriver.exe'); /*Setting the capabilities of Chrome Driver*/ try { DesiredCapabilities capabilities = DesiredCapabilities.chrome(); Proxy proxy = new Proxy(); String proxyServer = String.format('AProxyIDontWantToDisplay', System.getenv('proxy.username'), System.getenv('proxy.password')); proxy.setHttpProxy(proxyServer); capabilities.setCapability('proxy', proxy); ChromeOptions options = new ChromeOptions(); options.addArguments(Arrays.asList ('--no-sandbox','--ignore-certificate-errors','--homepage=about:blank','--no-first-run')); options.addArguments('disable-infobars'); capabilities.setCapability(ChromeOptions.CAPABILITY, options); driver = new ChromeDriver(capabilities); } catch (Exception e) { throw new Error(e); } /*---- Creating the instance of EventFiringWebDriver Class----*/ EventFiringWebDriver eventRecorder = new EventFiringWebDriver(driver); /*---- Creating the instance of parent class 'AbstractWebdriverListeners' class----*/ AbstractWebDriverListeners eCapture = new AbstractWebDriverListeners(); /* The below step registers the listeners for logging purpose*/ eventRecorder.register(eCapture); //Event One System.out.println('This is recording Event-One'); eventRecorder.navigate().to('https://www.google.com'); //Event Two System.out.println('This is recording Event-Two'); eventRecorder.findElement(By.xpath('//a(text()='Sign in')')).click(); //Event Three System.out.println('This is recording Event-Three'); eventRecorder.findElement(By.id('identifierId')).clear(); Thread.sleep(5000); //Event Four System.out.println('This is recording Event-Four'); eventRecorder.findElement(By.id('identifierId')).sendKeys('abc@gmail.com'); Thread.sleep(5000); //Event Five System.out.println('This is recording Event-Five'); eventRecorder.navigate().back(); //Event Six System.out.println('This is recording Event-Six'); eventRecorder.navigate().forward(); //Event Seven System.out.println('This is recording Event-Seven'); eventRecorder.navigate().refresh(); //Event Eight System.out.println('This is recording Event-Eight'); eventRecorder.get('https://www.irctc.co.in/eticketing/loginHome.jsf'); //Event Nine System.out.println('This is recording Event-Nine'); eventRecorder.findElement(By.id('loginbutton')).click(); try { Alert alert = eventRecorder.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); //Event Ten System.out.println('This is recording Event-Ten'); alert.accept(); } catch (Exception e) { } Thread.sleep(3000); eventRecorder.findElement(By.id('loginbutton')).click(); try { Alert alert = eventRecorder.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); //Event Eleven System.out.println('This is recording Event-Eleven'); alert.dismiss(); } catch (Exception e) { } //Intentionally giving wrong id so it triggers onException Listener--> Event Twelve System.out.println('This is recording Event-Twelve'); eventRecorder.findElement(By.id('loginbutn')).click(); } }
Questa classe ha anche gli eventi registrati in precedenza, ma poiché abbiamo limitato la nostra classe Listener per implementare solo sei eventi, ne ignorerà altri e visualizzerà solo il log per quelli menzionati.
Vista della finestra della console
Come puoi vedere le aree contrassegnate in giallo nell'immagine sopra, solo i metodi che sono stati implementati nel file AbstractWebDriverListeners La classe è stata attivata.
Conclusione
I listener WebDriver sono le interfacce che ascoltano un evento del browser e rispondono di conseguenza. Se lo implementi con l'aiuto di WebDriverEventListener, devi implementare tutti i metodi coinvolti con questa interfaccia
Se si implementa WebDriver Listener con l'aiuto della classe AbstractWebDriverEventListener, è possibile scegliere i metodi che si desidera implementare.
=> Visita qui per imparare il selenio da zero.
Lettura consigliata
- Esercitazione sul selenio di cetriolo: integrazione con WebDriver di selenio Java di cetriolo
- Introduzione a Selenium WebDriver - Selenium Tutorial # 8
- Tutorial ChromeDriver Selenium: test Webdriver Selenium su Chrome
- Implementazione del nostro primo script WebDriver - Selenium WebDriver Tutorial # 10
- 30+ Migliori tutorial sul selenio: impara il selenio con esempi reali
- Domande frequenti sul selenio
- Come gestire gli avvisi / popup in Selenium WebDriver - Selenium Tutorial # 16
- Attesa implicita ed esplicita in Selenium WebDriver (tipi di attese al selenio)