webdriver listeners selenium
Vad är WebDriver-lyssnare? Varför behöver vi lyssnare i Selenium Automation Testing? Denna handledning svarar på dessa frågor i detalj med exempelkodsexempel:
Lyssnare, som namnet antyder, “lyssnar” till alla händelser som föreskrivs i Selen-koden. Till exempel om du vill veta vad som händer innan du klickar på något element; före och efter att du navigerar till ett element, eller vad som händer när ett undantag kastas och testet misslyckas, kommer lyssnare till nytta.
Den praktiska användningen av lyssnare i Selenium Automation Testing kan vara att logga ordningen på åtgärder och ta skärmdumpen när och när ett undantag kastas. Detta underlättar för enkel felsökning i senare skeden av testkörningen.
=> Kontrollera ALLA Selen-handledning här.
Vad du kommer att lära dig:
Implementering av Webdriver-lyssnare
Det finns huvudsakligen två typer av lyssnare:
- Webdriver lyssnare
- TestNG-lyssnare
Vi förstår först hur Webdriver-lyssnare fungerar. I denna handledning kommer vårt fokus att vara på Webdriver Event Listener.
Varför använder vi Webdriver Event Listener?
Med hjälp av Webdriver kan vi utlösa många händelser i webbläsaren och webbelementen. Det håller koll på alla händelser som utlöses under körning och kan hjälpa oss att felsöka när körningen är klar.
Det finns två sätt att implementera Webdriver Event Listers:
- WebDriverEventListener vilket är ett gränssnitt som har några fördefinierade metoder för att spåra Webdriver-händelserna. Det kräver att vi implementerar ALLT metoderna fördefinierade i gränssnittet.
- AbstractWebDriverEventListener Class vilket ger oss möjlighet att bara implementera de metoder vi är intresserade av.
# 1) WebDriverEventListener-gränssnitt
Fördefinierade metoder som används för att implementera gränssnittet WebDriverEventListener listas nedan:
(i) ogiltigt föreChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Den här metoden utlöses när vi utför antingen sendKeys () eller clear () på Web Element. (Till exempel driver.findElement (By.id ('Login')). Clear ()) och utlöses INNAN utför åtgärden på webbelementet.
Parametrar:
arg0= Web Element arg1=driver
(ii) ogiltig efterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Den här metoden utlöses när vi utför antingen sendKeys () eller clear () på Web Element. (Till exempel driver.findElement (By.id ('Login')). Clear ()) och utlöses EFTER utför åtgärden på webbelementet.
Parametrar:
arg0= Web Element arg1=driver
(iii) ogiltigt föreClickOn (WebElement arg0, WebDriver arg1)
Denna metod utlöses INNAN vi klickar på valfritt webbelement.
Parametrar:
arg0= Web Element arg1=driver
(iv) ogiltig efterClickOn (WebElement arg0, WebDriver arg1)
programvara för hantering och övervakningsverktyg
Denna metod utlöses EFTER vi klickar på valfritt webbelement.
Parametrar:
arg0= Web Element arg1=driver
(v) ogiltigt före NavigateTo (String arg0, WebDriver arg1)
Denna metod utlöses när vi använder navigera (). Till (String URL) (Till exempel navigera (). Till (“https: // www.google.com ”)) Och utlöses INNAN navigera till webbadressen.
Parametrar:
arg0= URL arg1=driver
(vi) ogiltig efter NavigateTo (String arg0, WebDriver arg1)
Denna metod utlöses när vi använder navigera (). Till (String URL) (Till exempel navigera (). Till (“https: // www.google.com ”)) Och utlöses EFTER navigera till webbadressen.
Parametrar:
arg0= URL arg1=driver
(vii) ogiltigt före NavigateBack (WebDriver arg0)
Denna metod utlöses när vi använder kommandot navigera (). Tillbaka (). Det tar plats INNAN omdirigera användaren till föregående sida.
Parametrar:
arg0=driver
(viii) ogiltig efter NavigateBack (WebDriver arg0)
Denna metod utlöses när vi använder kommandot navigera (). Tillbaka (). Det tar plats EFTER omdirigera användaren till föregående sida.
Parametrar:
arg0=driver
(ix) ogiltig före NavigateForward (WebDriver arg0)
Denna metod utlöses när vi använder kommandot navigera (). Framåt (). Det tar plats INNAN omdirigerar användaren till nästa sida.
Parametrar:
arg0=driver
(x) ogiltig efter NavigateBack (WebDriver arg0)
Denna metod utlöses när vi använder kommandot navigera (). Framåt (). Det tar plats EFTER omdirigerar användaren till nästa sida.
Parametrar:
arg0=driver
(xi) ogiltigt före NavigateRefresh (WebDriver arg0)
Denna metod utlöses när vi använder kommandot navigera (). Uppdatera (). Det tar plats INNAN uppdaterar den aktuella sidan.
Parametrar:
arg0=driver
(xii) ogiltig efter NavigateRefresh (WebDriver arg0)
Denna metod utlöses när vi använder kommandot navigera (). Uppdatera (). Det tar plats EFTER uppdaterar den aktuella sidan.
Parametrar:
arg0=driver
(xiii) ogiltigt föreFindBy (av arg0, WebElement arg1, WebDriver arg2)
Denna metod utlöses när vi använder kommandot driver.findElement (By.id (“Något id eller någon annan lokaliserare”)) . Det tar plats INNAN hitta webbelementet.
Parametrar:
arg0=locator arg1=Web Element arg2=driver
(xiv) ogiltig efterFindBy (Av arg0, WebElement arg1, WebDriver arg2)
Denna metod utlöses när vi använder kommandot driver.findElement (By.id (“Något id eller någon annan lokaliserare”)) . Det tar plats EFTER hitta webbelementet.
falsk e-postadress jag kan använda
Parametrar:
arg0=locator arg1=Web Element arg2=driver
(xv) ogiltig onException (Throwable arg0, WebDriver arg1)
Denna metod kastas när ett undantag kastas. Till exempel, om Webdriver inte kan hitta elementet, kommer den att utlösa denna metod och skulle utföra vilken kod som helst som skrivs inuti den.
Parametrar:
arg0=Exception arg1= driver
(xvi) ogiltig föreAlertAccept (WebDriver arg0)
Denna metod utlöses när en varningsruta visas på skärmen och utlöses rätt INNAN klicka på “OK eller ACCEPT” -knappen.
Parametrar:
arg0=driver
(xvii) ogiltig efterAlertAccept (WebDriver arg0)
Denna metod utlöses när en varningsruta visas på skärmen och utlöses rätt EFTER klicka på “OK eller ACCEPT” -knappen.
Parametrar:
arg0=driver
(xviii) ogiltig föreAlertDismiss (WebDriver arg0)
Denna metod utlöses när en varningsruta visas på skärmen och utlöses rätt INNAN genom att klicka på knappen ”AVBRYT”.
Parametrar:
arg0=driver
(xix) ogiltig efterAlertDismiss (WebDriver arg0)
Denna metod utlöses när en varningsruta visas på skärmen och utlöses rätt EFTER genom att klicka på knappen ”AVBRYT”.
Parametrar:
arg0=driver
Det här är alla metoder som finns tillgängliga med WebDriverEventListener. Det finns andra två metoder föreScript och afterScript men vi kommer inte att täcka dem i denna handledning.
Steg för att implementera lyssnare med hjälp av gränssnittet 'WebDriverEventListener' i Eclipse:
Steg 1: Skapa ett paket med namn som 'lyssnare'. Inuti paketet skapar du en klass som heter “ WebdriverListeners ”Och låt det implementeras “WebDriverEventListener” .
Användargränssnittet ska se ut nedan:
Håll musen över den röda linjen med Error, Eclipse ska kasta förslaget nedan för att importera “WebDriverEventListener”. Klicka på Importera.
Felet på WebDriverEventListener har avslutats men du ser nedanstående fel i klassen “WebDriverListeners”. Flytta markören över felet så ser du ett förslag att lägga till Unimplemented-metoder. Klicka på den så ser du att alla metoderna är listade och beskrivna ovan.
Observera att vi har lagt till raden System.out.println till alla metoder för demonstrationsändamål.
Exempelkod-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); } }
Steg 2: Skapa klass Lyssnare_Tester och se till att den har huvudmetoden inuti klassen. Låt det utvidga klassen WebDriverListeners så att lyssnarklassen kan utföra en operation med de webbläsarkommandon som föreskrivs för vissa händelser.
Kopiera och klistra in koden nedan i klassen Listeners_Tests. Kör nedanstående kod som Java-applikationen.
Exempelkod-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(); } }
När körningen har slutförts, kontrollera innehållet som är inloggat i konsolen. Vi ska gå till varje evenemang som anges i koden ovan.
Utdrag nr 1 av konsolen
Händelse-1: Detta registrerar händelsen före NavigateTo och afterNavigateTo och utför de åtgärder som skrivs i de två blocken i enlighet därmed.
Händelse-2: Detta registrerar händelsen beforeFindBy och afterFindBy och utför de åtgärder som skrivs i de två blocken i enlighet därmed. Händelsen efter dessa två händelser täcker före klick och efter klick händelser.
Händelse-3: Detta registrerar händelserna beforeChangeValueOf och afterChangeValue.
Händelse-4: Detta är samma som Event-3
Händelse-5: Detta registreras föreNavigateBack och afterNavigateBack-händelser.
Händelse-6: Detta registreras föreNavigateForward och afterNavigateForward-händelser.
Händelse-7: Detta registreras föreNavigateRefresh och afterNavigateRefresh händelser.
Event-8: Detta är samma som Event-1
Event-9: Detta är samma som Event-2
Utdrag # 2 av konsolen
Event-10: Detta registrerar händelserna som beforeAlertAccept och afterAlertAccept.
Event-11: Detta registrerar händelserna som beforeAlertDismiss och afterAlertDismiss.
Event-12: Detta registrerar händelser som onException och kastar meddelandet.
Jag hoppas att den korta beskrivningen av lyssnarna ger dig en uppfattning om hur Webdriver-lyssnare fungerar. Som vi tidigare har sagt att med hjälp av WebDriverEventListener måste vi implementera alla tillgängliga metoder med detta gränssnitt.
Men med hjälp av klassen AbstractWebDriverEventListener kan vi välja vilka händelser vi vill genomföra.
# 2) AbstraktWebDriverEventListener-klass
Steg för att implementera lyssnare med hjälp av klass “AbstractWebDriverEventListener”:
Steg 1
Skapa en klass “ AbstractWebDriverListener ”Och låt det utvidga klassen” AbstractWebDriverEventListener '
Som du kan se, till skillnad från “ WebDriverEventListener ”, Den här klassen när den förlängs ger inte ett fel för att lägga till icke implementerade metoder. Du kan välja vilka metoder du vill implementera i ditt projekt.
Kopiera och klistra in koden nedan:
Exempelkod-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); } }
Steg 2
Skapa en ny klass med namnet “ AbstractListeners_Test ”Och inuti den skapar du instansen av” AbstractWebDriverListeners ' klass.
Kopiera och klistra in koden nedan i den här klassen.
Exempelkod-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(); } }
Denna klass har också de händelser som spelats in tidigare, men eftersom vi har begränsat vår lyssnarklass till att bara implementera sex händelser kommer den att kasta andra och bara visa loggen för de nämnda.
Konsolfönstervy
öppna en eps-fil i Windows
Som du kan se de gula markerade områdena i bilden ovan är det bara de metoder som har implementerats i AbstractWebDriverListeners Klass har utlösts.
Slutsats
WebDriver-lyssnare är gränssnitten som lyssnar på en webbläsarhändelse och svarar på den därefter. Om du implementerar det med hjälp av WebDriverEventListener måste du implementera alla metoder som är involverade i detta gränssnitt
Om du implementerar WebDriver Listener med hjälp av klassen AbstractWebDriverEventListener kan du välja de metoder du vill implementera.
=> Besök här för att lära dig selen från repor.
Rekommenderad läsning
- Gurkselen-handledning: Gurka Java Selen WebDriver-integration
- Introduktion till Selen WebDriver - Selen Tutorial # 8
- ChromeDriver Selen Tutorial: Selen Webdriver Tests på Chrome
- Implementation of Our First WebDriver Script - Selenium WebDriver Tutorial # 10
- 30+ bästa selen-självstudier: Lär dig selen med riktiga exempel
- Vanliga frågor om selen
- Hur man hanterar varningar / popup-fönster i Selen WebDriver - Selen Tutorial # 16
- Implicit och Explicit Wait i Selen WebDriver (Typer av Selen Waits)