webdriver listeners selenium
Hva er WebDriver-lyttere? Hvorfor trenger vi lyttere i Selenium Automation Testing? Denne opplæringen svarer på disse spørsmålene i detalj med eksempler på eksempelkoder:
Som navnet antyder, 'lytter' til alle hendelser som er foreskrevet i Selen-koden. For eksempel, hvis du vil vite hva som skjer før du klikker på et element; før og etter at du navigerer til et element, eller hva som skjer når et unntak kastes og testen mislykkes, kommer lytterne til nytte.
Den praktiske bruken av lyttere i Selenium Automation Testing kan være å logge rekkefølgen på handlingene og ta skjermbildet når og når et unntak blir kastet. Dette muliggjør enkel feilsøking i senere stadier av testutførelsen.
=> Sjekk ALLE Selen-opplæringsprogrammer her.
Hva du vil lære:
Implementering av Webdriver-lyttere
Det er hovedsakelig to typer lyttere:
- Webdriver lyttere
- TestNG-lyttere
Vi vil først forstå hvordan Webdriver-lyttere fungerer. I denne opplæringen vil vårt fokus være på Webdriver Event Listener.
Hvorfor bruker vi Webdriver Event Listener?
Ved hjelp av Webdriver kan vi utløse mange hendelser i nettleseren og nettelementene. Den holder oversikt over alle hendelsene som utløses under kjøring, og kan hjelpe oss med feilsøking når kjøringen er fullført.
Det er to måter vi kan implementere Webdriver Event Listers på:
- WebDriverEventListener som er et grensesnitt som har noen forhåndsdefinerte metoder for å spore Webdriver-hendelsene. Det krever at vi implementerer ALLE metodene som er forhåndsdefinert i grensesnittet.
- AbstractWebDriverEventListener Class som gir oss muligheten til å implementere bare de metodene vi er interessert i.
#1) WebDriverEventListener-grensesnitt
Forhåndsdefinerte metoder som brukes til å implementere WebDriverEventListener Interface er vervet nedenfor:
(i) ugyldig førChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Denne metoden utløses når vi utfører enten sendKeys () eller clear () -operasjonen på Web Element. (For eksempel driver.findElement (By.id ('Login')). Clear ()), og utløses FØR utføre operasjonen på Web Element.
Parametere:
arg0= Web Element arg1=driver
(ii) ugyldig etterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Denne metoden utløses når vi utfører enten sendKeys () eller clear () -operasjonen på Web Element. (For eksempel driver.findElement (By.id ('Login')). Clear ()), og utløses ETTER utføre operasjonen på Web Element.
Parametere:
arg0= Web Element arg1=driver
(iii) ugyldig førClickOn (WebElement arg0, WebDriver arg1)
Denne metoden utløses FØR vi klikker på et hvilket som helst webelement.
Parametere:
arg0= Web Element arg1=driver
(iv) ugyldig etterClickOn (WebElement arg0, WebDriver arg1)
hva betyr misforhold mellom nettverkssikkerhetsnøkkel
Denne metoden utløses ETTER vi klikker på et hvilket som helst webelement.
Parametere:
arg0= Web Element arg1=driver
(v) ugyldig før NavigateTo (String arg0, WebDriver arg1)
Denne metoden utløses når vi bruker navigere (). Til (String URL) (For eksempel navigere (). Til (“https: // www.google.com ”)), Og utløses FØR navigere til URL-en.
Parametere:
arg0= URL arg1=driver
(vi) ugyldig etter NavigateTo (String arg0, WebDriver arg1)
Denne metoden utløses når vi bruker navigere (). Til (String URL) (For eksempel navigere (). Til (“https: // www.google.com ”)), Og utløses ETTER navigere til URL-en.
Parametere:
arg0= URL arg1=driver
(vii) ugyldig før NavigateBack (WebDriver arg0)
Denne metoden utløses når vi bruker kommandoen navigere (). Tilbake (). Det finner sted FØR omdirigere brukeren til forrige side.
Parametere:
arg0=driver
(viii) ugyldig etter NavigateBack (WebDriver arg0)
Denne metoden utløses når vi bruker kommandoen navigere (). Tilbake (). Det finner sted ETTER omdirigere brukeren til forrige side.
Parametere:
arg0=driver
(ix) ugyldig før NavigateForward (WebDriver arg0)
Denne metoden utløses når vi bruker kommandoen navigere (). Fremover (). Det finner sted FØR omdirigere brukeren til neste side.
Parametere:
arg0=driver
(x) ugyldig etter NavigateBack (WebDriver arg0)
Denne metoden utløses når vi bruker kommandoen navigere (). Fremover (). Det finner sted ETTER omdirigere brukeren til neste side.
Parametere:
arg0=driver
(xi) ugyldig før NavigateRefresh (WebDriver arg0)
Denne metoden utløses når vi bruker kommandoen navigate (). Refresh (). Det finner sted FØR oppdaterer gjeldende side.
Parametere:
arg0=driver
(xii) ugyldig etter NavigateRefresh (WebDriver arg0)
Denne metoden utløses når vi bruker kommandoen navigate (). Refresh (). Det finner sted ETTER oppdaterer gjeldende side.
eksempler på testscenarier fra slutt til slutt
Parametere:
arg0=driver
(xiii) ugyldig beforeFindBy (Av arg0, WebElement arg1, WebDriver arg2)
Denne metoden utløses når vi bruker kommandoen driver.findElement (By.id (“No ID or any other locator”)) . Det finner sted FØR finn webelementet.
Parametere:
arg0=locator arg1=Web Element arg2=driver
(xiv) ugyldig etterFindBy (Av arg0, WebElement arg1, WebDriver arg2)
Denne metoden utløses når vi bruker kommandoen driver.findElement (By.id (“No ID or any other locator”)) . Det finner sted ETTER finn webelementet.
Parametere:
arg0=locator arg1=Web Element arg2=driver
(xv) ugyldig onException (Throwable arg0, WebDriver arg1)
Denne metoden kastes når et unntak kastes. For eksempel, hvis Webdriver ikke er i stand til å finne elementet, vil den utløse denne metoden og vil utføre hvilken som helst kode som er skrevet i den.
Parametere:
arg0=Exception arg1= driver
(xvi) ugyldig førAlertAccept (WebDriver arg0)
Denne metoden utløses når det vises en varselboks på skjermen og utløses riktig FØR klikke på “OK eller ACCEPT” -knappen.
Parametere:
arg0=driver
(xvii) ugyldig etterAlertAccept (WebDriver arg0)
Denne metoden utløses når det vises en varselboks på skjermen og utløses riktig ETTER klikke på “OK eller ACCEPT” -knappen.
Parametere:
arg0=driver
(xviii) ugyldig førAlertDismiss (WebDriver arg0)
Denne metoden utløses når det vises en varselboks på skjermen og utløses riktig FØR ved å klikke på “AVBRYT” -knappen.
Parametere:
arg0=driver
(xix) ugyldig etterAlertDismiss (WebDriver arg0)
Denne metoden utløses når det vises en varselboks på skjermen og utløses riktig ETTER ved å klikke på “AVBRYT” -knappen.
Parametere:
arg0=driver
Dette er alle metodene som er tilgjengelige med WebDriverEventListener. Det er to andre metoder førScript og AfterScript, men vi kommer ikke til å dekke de i denne opplæringen.
Fremgangsmåte for å implementere lyttere ved hjelp av 'WebDriverEventListener' -grensesnittet i formørkelse:
Trinn 1: Lag en pakke med navn som 'lyttere'. Inne i pakken, lag en klasse som heter “ WebdriverListeners ”Og la det implementere “WebDriverEventListener” .
Brukergrensesnittet skal se ut som nedenfor:
Hold musen over den røde linjen med Error, formørkelsen skal kaste forslaget nedenfor om å importere “WebDriverEventListener”. Klikk på Importer.
Feilen på WebDriverEventListener er avsluttet, men du vil se feilen nedenfor i klassen “WebDriverListeners”. Flytt markøren over feilen, så ser du et forslag om å legge til uimplementerte metoder. Klikk på den, så ser du alle metodene er oppført og beskrevet ovenfor.
Vær oppmerksom på at vi har lagt System.out.println-linjen til hver metode for demonstrasjonsformål.
Eksempelkode-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: Lag klassen Lyttere_Tester og sørg for at den har hovedmetoden i klassen. La det utvide klassen WebDriverListeners slik at lytterklassen kan utføre en operasjon på nettleserkommandoer som er foreskrevet for visse hendelser.
Kopier og lim inn koden nedenfor i klassen Listeners_Tests. Kjør koden nedenfor som Java-applikasjonen.
Eksempelkode-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(); } }
Etter at kjøringen er fullført, vennligst sjekk innholdet som er logget inn i konsollen. Vi skal til hvert arrangement som er oppført i koden ovenfor.
Utdrag nr. 1 av konsollen
Hendelse-1: Dette registrerer hendelsen før NavigateTo og afterNavigateTo, og utfør handlingene som er skrevet i de to blokkene tilsvarende.
Hendelse-2: Dette registrerer hendelsen beforeFindBy og afterFindBy, og utfører handlingene som er skrevet i de to blokkene tilsvarende. Arrangementet etter disse to hendelsene dekker førKlikk og etterKlikk-hendelser.
Hendelse-3: Dette registrerer hendelsen beforeChangeValueOf og afterChangeValue.
Hendelse-4: Dette er det samme som Event-3
Hendelse-5: Dette registreres førNavigateBack og afterNavigateBack hendelser.
Hendelse-6: Dette registreres førNavigateForward og afterNavigateForward hendelser.
Hendelse-7: Dette registreres førNavigateRefresh og afterNavigateRefresh hendelser.
Hendelse-8: Dette er det samme som Event-1
Hendelse-9: Dette er det samme som Event-2
Utdrag nr. 2 av konsollen
Hendelse-10: Dette registrerer hendelsene som beforeAlertAccept og afterAlertAccept.
Begivenhet-11: Dette registrerer hendelsene som beforeAlertDismiss og afterAlertDismiss.
Hendelse-12: Dette registrerer hendelsene som onException, og kaster meldingen.
Jeg håper den korte beskrivelsen av lytterne vil gi deg en ide om hvordan Webdriver-lyttere fungerer. Som vi tidligere har sagt at vi ved hjelp av WebDriverEventListener må implementere alle metodene som er tilgjengelige med dette grensesnittet.
Ved hjelp av klassen AbstractWebDriverEventListener kan vi imidlertid velge hvilke hendelser vi vil implementere.
# 2) AbstractWebDriverEventListener Class
Fremgangsmåte for å implementere lyttere ved å bruke klassen “AbstractWebDriverEventListener”:
Trinn 1
Lag en klasse “ AbstractWebDriverListener ”Og la det utvide klassen“ AbstractWebDriverEventListener '
Som du kan se, i motsetning til “ WebDriverEventListener ”, Denne klassen når den er utvidet, kaster ikke feil for å legge til uimplementerte metoder. Du kan velge hvilke metoder du vil implementere i prosjektet.
Kopier og lim inn koden nedenfor:
Eksempelkode-3
sql intervju spørsmål og svar for nybegynnere
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
Lag en ny klasse med navnet “ AbstractListeners_Test 'Og inne i den, opprett forekomsten av' AbstractWebDriverListeners ”Klasse.
Kopier og lim inn koden nedenfor i denne klassen.
Eksempelkode-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 klassen har også hendelsene registrert tidligere, men siden vi har begrenset lytterklassen vår til å implementere bare seks hendelser, vil den forkaste andre og bare vise loggen for de nevnte.
Konsollvinduvisning
Som du kan se de gule merkede områdene i bildet ovenfor, er det bare metodene som er implementert i AbstractWebDriverListeners Klassen er utløst.
Konklusjon
WebDriver-lyttere er grensesnittene som lytter til en nettleserhendelse og svarer på den deretter. Hvis du implementerer det ved hjelp av WebDriverEventListener, må du implementere alle metodene som er involvert i dette grensesnittet.
Hvis du implementerer WebDriver Listener ved hjelp av klassen AbstractWebDriverEventListener, kan du velge metodene du vil implementere.
=> Besøk her for å lære selen fra grunnen.
Anbefalt lesing
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- Introduksjon til Selenium WebDriver - Selenium Tutorial # 8
- ChromeDriver Selenium Tutorial: Selenium Webdriver Tests on Chrome
- Implementering av vårt første WebDriver Script - Selenium WebDriver Tutorial # 10
- 30+ beste selenopplæringsprogrammer: Lær selen med virkelige eksempler
- Vanlige spørsmål om selen
- Hvordan håndtere varsler / popup-vinduer i Selen WebDriver - Selen-opplæring nr. 16
- Implisitt og eksplisitt ventetid i Selen WebDriver (Typer Selen Waits)