webdriver listeners selenium
Hvad er WebDriver-lyttere? Hvorfor har vi brug for lyttere i Selenium Automation Testing? Denne vejledning besvarer disse spørgsmål detaljeret med eksempler på eksempelkoder:
Lyttere, som navnet antyder, 'lyt' til enhver begivenhed, der er ordineret i Selenium-koden. For eksempel, hvis du vil vide, hvad der sker, før du klikker på et element; før og efter at du navigerer til et element, eller hvad der sker, når en undtagelse kastes, og testen mislykkes, er lyttere nyttige.
Den praktiske brug af lyttere i Selenium Automation Testing kan være at logge rækkefølgen af handlinger og tage skærmbilledet, når og når en undtagelse kastes. Dette letter for let debugging i senere faser af testudførelse.
=> Tjek ALLE Selen-vejledninger her.
Hvad du lærer:
Implementering af Webdriver-lyttere
Der er stort set to typer lyttere:
- Webdriver lyttere
- TestNG lyttere
Vi vil først forstå, hvordan Webdriver-lyttere fungerer. I denne vejledning vil vores fokus være på Webdriver Event Listener.
Hvorfor bruger vi Webdriver Event Listener?
Ved hjælp af Webdriver er vi i stand til at udløse mange begivenheder i browseren og webelementerne. Det holder styr på alle de begivenheder, der udløses under udførelse, og kan hjælpe os med fejlretning, når udførelsen er afsluttet.
Der er to måder, hvorpå vi kan implementere Webdriver Event Lyttere:
- WebDriverEventListener som er en grænseflade, der har nogle foruddefinerede metoder til sporing af Webdriver-begivenheder. Det kræver, at vi implementerer ALLE metoderne foruddefineret i grænsefladen.
- AbstractWebDriverEventListener-klasse som giver os mulighed for kun at implementere de metoder, som vi er interesserede i.
# 1) WebDriverEventListener-grænseflade
Foruddefinerede metoder, der bruges til at implementere WebDriverEventListener-grænsefladen, er angivet nedenfor:
(i) ugyldigt førChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Denne metode udløses, når vi enten udfører handlingen sendKeys () eller clear () på webelementet. (For eksempel driver.findElement (By.id ('Login')). Klar ()) og udløses FØR udføre handlingen på webelementet.
Parametre:
arg0= Web Element arg1=driver
(ii) ugyldigt efterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Denne metode udløses, når vi enten udfører handlingen sendKeys () eller clear () på webelementet. (For eksempel driver.findElement (By.id ('Login')). Klar ()) og udløses EFTER udføre handlingen på webelementet.
Parametre:
arg0= Web Element arg1=driver
(iii) ugyldigt førClickOn (WebElement arg0, WebDriver arg1)
Denne metode udløses FØR vi klikker på et hvilket som helst webelement.
Parametre:
arg0= Web Element arg1=driver
(iv) ugyldigt efterClickOn (WebElement arg0, WebDriver arg1)
bedste program til at overvåge computerens temperatur
Denne metode udløses EFTER vi klikker på et hvilket som helst webelement.
Parametre:
arg0= Web Element arg1=driver
(v) ugyldigt før NavigateTo (String arg0, WebDriver arg1)
Denne metode udløses, når vi bruger navigere (). Til (String URL) (Naviger f.eks. (). Til (“https: // www.google.com ”)), Og udløses FØR navigere til URL'en.
Parametre:
arg0= URL arg1=driver
(vi) ugyldigt efter NavigateTo (String arg0, WebDriver arg1)
Denne metode udløses, når vi bruger navigere (). Til (String URL) (Naviger f.eks. (). Til (“https: // www.google.com ”)), Og udløses EFTER navigere til URL'en.
Parametre:
arg0= URL arg1=driver
(vii) ugyldigt før NavigateBack (WebDriver arg0)
Denne metode udløses, når vi bruger kommandoen navigere (). Tilbage (). Den finder sted FØR omdirigere brugeren til den forrige side.
Parametre:
arg0=driver
(viii) ugyldigt efter NavigateBack (WebDriver arg0)
Denne metode udløses, når vi bruger kommandoen navigere (). Tilbage (). Den finder sted EFTER omdirigere brugeren til den forrige side.
Parametre:
arg0=driver
(ix) ugyldig før NavigateForward (WebDriver arg0)
Denne metode udløses, når vi bruger kommandoen navigere (). Fremad (). Den finder sted FØR omdirigere brugeren til næste side.
Parametre:
arg0=driver
(x) ugyldigt efter NavigateBack (WebDriver arg0)
Denne metode udløses, når vi bruger kommandoen navigere (). Fremad (). Den finder sted EFTER omdirigere brugeren til næste side.
Parametre:
arg0=driver
(xi) ugyldigt før NavigateRefresh (WebDriver arg0)
Denne metode udløses, når vi bruger kommandoen navigere (). Opdater (). Den finder sted FØR opdaterer den aktuelle side.
Parametre:
arg0=driver
(xii) ugyldigt efter NavigateRefresh (WebDriver arg0)
Denne metode udløses, når vi bruger kommandoen navigere (). Opdater (). Den finder sted EFTER opdaterer den aktuelle side.
Parametre:
arg0=driver
(xiii) ugyldig beforeFindBy (Af arg0, WebElement arg1, WebDriver arg2)
hvad er apk-fil i Android
Denne metode udløses, når vi bruger kommandoen driver.findElement (By.id (“Et id eller en hvilken som helst anden lokalisering”)) . Den finder sted FØR find webelementet.
Parametre:
arg0=locator arg1=Web Element arg2=driver
(xiv) ugyldigt efter FindBy (Af arg0, WebElement arg1, WebDriver arg2)
Denne metode udløses, når vi bruger kommandoen driver.findElement (By.id (“Et id eller en hvilken som helst anden lokalisering”)) . Den finder sted EFTER find webelementet.
Parametre:
arg0=locator arg1=Web Element arg2=driver
(xv) ugyldigt onException (Throwable arg0, WebDriver arg1)
Denne metode kastes, når en undtagelse kastes. For eksempel, hvis Webdriver ikke er i stand til at finde elementet, vil den udløse denne metode og ville udføre den kode, der er skrevet inde i den.
Parametre:
arg0=Exception arg1= driver
(xvi) ugyldigt førAlertAccept (WebDriver arg0)
Denne metode udløses, når der vises en advarselsboks på skærmen og udløses til højre FØR ved at klikke på knappen “OK eller ACCEPT”.
Parametre:
arg0=driver
(xvii) ugyldigt efterAlertAccept (WebDriver arg0)
Denne metode udløses, når der vises en advarselsboks på skærmen og udløses til højre EFTER ved at klikke på knappen “OK eller ACCEPT”.
Parametre:
arg0=driver
(xviii) ugyldigt førAlertDismiss (WebDriver arg0)
Denne metode udløses, når der vises en advarselsboks på skærmen og udløses til højre FØR ved at klikke på knappen “ANNULLER”.
Parametre:
arg0=driver
(xix) ugyldigt efterAlertDismiss (WebDriver arg0)
Denne metode udløses, når der vises en advarselsboks på skærmen og udløses til højre EFTER ved at klikke på knappen “ANNULLER”.
Parametre:
arg0=driver
Dette er alle de metoder, der er tilgængelige med WebDriverEventListener. Der er to andre metoder førScript og afterScript, men vi vil ikke dække dem i denne vejledning.
Skridt til at implementere lyttere ved hjælp af 'WebDriverEventListener' -interfacet i Eclipse:
Trin 1: Opret en pakke med navn som 'lyttere'. Inde i pakken skal du oprette en klasse kaldet “ WebdriverListeners ”Og lad det implementere “WebDriverEventListener” .
Brugergrænsefladen skal se ud nedenfor:
Hold musen over den røde linje med Fejl, formørkelsen skal kaste nedenstående forslag om at importere “WebDriverEventListener”. Klik på Importer.
Fejlen på WebDriverEventListener er afsluttet, men du vil se nedenstående fejl i klassen “WebDriverListeners”. Flyt markøren over fejlen, og du vil se et forslag om at tilføje uimplementerede metoder. Klik på det, og du vil se alle metoderne er anført og beskrevet ovenfor.
Bemærk, at vi har tilføjet System.out.println-linjen til hver metode til demonstrationsformål.
Prøvekode-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); } }
Trin # 2: Opret klasse Lyttere_Tests, og sørg for, at den har hovedmetoden inde i klassen. Lad det udvide WebDriverListeners-klassen, så lytterklassen kan udføre en handling på de browserkommandoer, der er ordineret til bestemte begivenheder.
Kopier og indsæt nedenstående kode i klassen Listeners_Tests. Kør nedenstående kode som Java-applikationen.
Prøvekode-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ørslen er gennemført, skal du kontrollere indholdet, der er logget på konsollen. Vi skal til alle begivenheder, der er anført i koden ovenfor.
Stykke nr. 1 af konsollen
Begivenhed-1: Dette registrerer hændelsen før NavigateTo og afterNavigateTo, og udfør de handlinger, der er skrevet i de to blokke i overensstemmelse hermed.
Begivenhed-2: Dette registrerer hændelsen beforeFindBy og afterFindBy og udfører de handlinger, der er skrevet i de to blokke i overensstemmelse hermed. Begivenheden efter disse to begivenheder dækker førKlik og efterKlik begivenheder.
Begivenhed-3: Dette registrerer hændelsen beforeChangeValueOf og afterChangeValue.
Begivenhed-4: Dette er det samme som Event-3
Begivenhed-5: Dette registreres førNavigateBack og afterNavigateBack begivenheder.
Begivenhed-6: Dette registreres førNavigateForward og afterNavigateForward begivenheder.
Begivenhed-7: Dette registreres førNavigateRefresh og afterNavigateRefresh begivenheder.
Begivenhed-8: Dette er det samme som Event-1
Begivenhed-9: Dette er det samme som Event-2
Stykke nr. 2 på konsollen
Begivenhed-10: Dette registrerer begivenhederne som beforeAlertAccept og afterAlertAccept.
Begivenhed-11: Dette registrerer begivenhederne som beforeAlertDismiss og afterAlertDismiss.
Begivenhed-12: Dette registrerer begivenhederne som onException og sender meddelelsen.
Jeg håber, at den korte beskrivelse af lytterne vil give dig en idé om, hvordan Webdriver-lyttere fungerer. Som vi tidligere har sagt, skal vi ved hjælp af WebDriverEventListener implementere alle de tilgængelige metoder med denne grænseflade.
Men ved hjælp af klassen AbstractWebDriverEventListener kan vi vælge, hvilke begivenheder vi vil implementere.
# 2) AbstraktWebDriverEventListener-klasse
Skridt til at implementere lyttere ved hjælp af 'AbstractWebDriverEventListener' klasse:
Trin 1
Opret en klasse “ AbstraktWebDriverListener ”Og lad det udvide klassen” AbstractWebDriverEventListener '
Som du kan se, i modsætning til “ WebDriverEventListener ”, Denne klasse når den er udvidet, kaster ikke en fejl for at tilføje uimplementerede metoder. Du kan vælge, hvilke metoder du vil implementere i dit projekt.
Kopier og indsæt nedenstående kode:
Prøvekode-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); } }
Trin 2
Opret en ny klasse med navnet “ AbstractListeners_Test ”Og inde i det skal du oprette forekomsten af“ AbstraktWebDriverListeners ”Klasse.
filinput og output c ++
Kopier og indsæt nedenstående kode i denne klasse.
Prøvekode-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(); } }
Denne klasse har også begivenhederne registreret tidligere, men da vi har begrænset vores Listener-klasse til kun at implementere seks begivenheder, vil den kassere andre og kun vise loggen for de nævnte.
Visning af konsolvindue
Som du kan se de gule markerede områder i ovenstående billede, er kun de metoder, der er implementeret i AbstraktWebDriverListeners Klassen er udløst.
Konklusion
WebDriver-lyttere er de grænseflader, der lytter til en browserhændelse og reagerer på den i overensstemmelse hermed. Hvis du implementerer det ved hjælp af WebDriverEventListener, skal du implementere alle de metoder, der er involveret i denne grænseflade
Hvis du implementerer WebDriver Listener ved hjælp af klassen AbstractWebDriverEventListener, kan du vælge de metoder, du vil implementere.
=> Besøg her for at lære selen fra bunden.
Anbefalet læsning
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- Introduktion til Selen WebDriver - Selen Tutorial # 8
- ChromeDriver Selen Tutorial: Selen Webdriver Tests på Chrome
- Implementering af vores første WebDriver Script - Selenium WebDriver Tutorial # 10
- 30+ bedste selen-tutorials: Lær selen med rigtige eksempler
- Ofte stillede spørgsmål om selen
- Sådan håndteres alarmer / pop op i Selen WebDriver - Selen Tutorial # 16
- Implicit og eksplicit Vent i Selen WebDriver (Typer af Selen Waits)