webdriver listeners selenium
Što su slušatelji WebDrivera? Zašto su nam potrebni slušatelji u ispitivanju automatizacije selena? Ovaj vodič detaljno odgovara na ova pitanja s primjerima primjera koda:
Slušatelji, kao što i samo ime govori, 'slušaju' bilo koji događaj propisan u kodu Selenium. Na primjer, ako želite znati što se događa prije nego što kliknete bilo koji element; prije i nakon što prijeđete na element ili što se dogodi kada se izbaci izuzetak i test ne uspije, slušatelji dobro dođu.
Praktična upotreba slušatelja u ispitivanju automatizacije selena može biti evidentiranje redoslijeda radnji i snimanje zaslona kad i kada se izuzetak baci. To olakšava otklanjanje pogrešaka u kasnijim fazama izvođenja testa.
=> Ovdje provjerite SVE tutorijale za selenij.
Što ćete naučiti:
Implementacija slušatelja Webdrivera
Postoje uglavnom dvije vrste slušatelja:
- Slušatelji webdrivera
- Slušatelji TestNG-a
Prvo ćemo shvatiti kako slušatelji Webdrivera rade. U ovom vodiču fokus će biti na slušatelju događaja Webdriver.
Zašto koristimo prisluškivač događaja Webdriver?
Uz pomoć Webdrivera u mogućnosti smo pokrenuti puno događaja u pregledniku i web elementima. On bilježi sve događaje koji su pokrenuti tijekom izvršenja i može nam pomoći u otklanjanju pogrešaka kada je izvršenje završeno.
Postoje dva načina na koje možemo implementirati slušatelje događaja Webdriver:
- WebDriverEventListener što je sučelje koje ima neke unaprijed definirane metode za praćenje događaja Webdriver. To zahtijeva da provedemo SVI metode unaprijed definirane u Sučelju.
- Klasa AbstractWebDriverEventListener što nam pruža mogućnost provođenja samo onih metoda koje nas zanimaju.
# 1) Sučelje WebDriverEventListener
Unaprijed definirane metode korištene za implementaciju sučelja WebDriverEventListener navedene su u nastavku:
(i) void beforeChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Ova se metoda aktivira kada na web elementu izvodimo operaciju sendKeys () ili clear (). (Na primjer, driver.findElement (By.id („Prijava“)). Clear ()) i aktivira se PRIJE izvođenje operacije na web elementu.
Parametri:
arg0= Web Element arg1=driver
(ii) void afterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Ova se metoda aktivira kada na web elementu izvodimo operaciju sendKeys () ili clear (). (Na primjer, driver.findElement (By.id („Prijava“)). Clear ()) i aktivira se NAKON izvođenje operacije na web elementu.
Parametri:
arg0= Web Element arg1=driver
(iii) void beforeClickOn (WebElement arg0, WebDriver arg1)
Ova metoda se aktivira PRIJE kliknemo bilo koji web element.
Parametri:
arg0= Web Element arg1=driver
(iv) void afterClickOn (WebElement arg0, WebDriver arg1)
pitanja za internetske usluge za iskusne
Ova metoda se aktivira NAKON kliknemo bilo koji web element.
Parametri:
arg0= Web Element arg1=driver
(v) void beforeNavigateTo (String arg0, WebDriver arg1)
Ova se metoda aktivira kada koristimo navigate (). To (String URL) (Na primjer, navigate (). To („https: // www.google.com ”)) I aktivira se PRIJE navigacija do URL-a.
Parametri:
arg0= URL arg1=driver
(vi) void afterNavigateTo (String arg0, WebDriver arg1)
Ova se metoda aktivira kada koristimo navigate (). To (String URL) (Na primjer, navigate (). To („https: // www.google.com ”)) I aktivira se NAKON navigacija do URL-a.
Parametri:
arg0= URL arg1=driver
(vii) void beforeNavigateBack (WebDriver arg0)
Ova se metoda aktivira kada koristimo naredbu navigate (). Back (). Odvija se PRIJE preusmjeravanje korisnika na prethodnu stranicu.
Parametri:
arg0=driver
(viii) void afterNavigateBack (WebDriver arg0)
Ova se metoda aktivira kada koristimo naredbu navigate (). Back (). Odvija se NAKON preusmjeravanje korisnika na prethodnu stranicu.
Parametri:
arg0=driver
(ix) void beforeNavigateForward (WebDriver arg0)
Ova se metoda aktivira kada koristimo naredbu navigate (). Forward (). Odvija se PRIJE preusmjeravanje korisnika na sljedeću stranicu.
Parametri:
arg0=driver
(x) void afterNavigateBack (WebDriver arg0)
Ova se metoda aktivira kada koristimo naredbu navigate (). Forward (). Odvija se NAKON preusmjeravanje korisnika na sljedeću stranicu.
Parametri:
arg0=driver
(xi) void beforeNavigateRefresh (WebDriver arg0)
Ova se metoda aktivira kada koristimo naredbu navigate (). Refresh (). Odvija se PRIJE osvježavanje trenutne stranice.
Parametri:
arg0=driver
(xii) void afterNavigateRefresh (WebDriver arg0)
Ova se metoda aktivira kada koristimo naredbu navigate (). Refresh (). Odvija se NAKON osvježavanje trenutne stranice.
Parametri:
arg0=driver
(xiii) void beforeFindBy (od arg0, WebElement arg1, WebDriver arg2)
Ova se metoda aktivira kada koristimo naredbu driver.findElement (By.id ('Neki id ili bilo koji drugi lokator')) . Odvija se PRIJE pronaći web element.
Parametri:
arg0=locator arg1=Web Element arg2=driver
(xiv) void afterFindBy (Od arg0, WebElement arg1, WebDriver arg2)
Ova se metoda aktivira kada koristimo naredbu driver.findElement (By.id ('Neki id ili bilo koji drugi lokator')) . Odvija se NAKON pronaći web element.
Parametri:
arg0=locator arg1=Web Element arg2=driver
(xv) void onException (Arg0 koji se može baciti, Arg1 WebDriver)
Ova se metoda baca kad god se izuzme izuzetak. Na primjer, ako Webdriver ne može pronaći element, pokrenut će ovu metodu i izvršit će bilo koji kod napisan u njemu.
Parametri:
arg0=Exception arg1= driver
(xvi) void beforeAlertAccept (WebDriver arg0)
Ova se metoda aktivira kad god se na zaslonu prikaže okvir upozorenja i pokreće se udesno PRIJE klikom na gumb “OK or ACCEPT”.
Parametri:
arg0=driver
(xvii) void afterAlertAccept (WebDriver arg0)
implementacija dijkstrinog algoritma najkraćeg puta u javi
Ova se metoda aktivira kad god se na zaslonu prikaže okvir upozorenja i pokreće se udesno NAKON klikom na gumb “OK or ACCEPT”.
Parametri:
arg0=driver
(xviii) void beforeAlertDismiss (WebDriver arg0)
Ova se metoda aktivira kad god se na zaslonu prikaže okvir upozorenja i pokreće se udesno PRIJE klikom na gumb “OTKAŽI”.
Parametri:
arg0=driver
(xix) void afterAlertDismiss (WebDriver arg0)
Ova se metoda aktivira kad god se na zaslonu prikaže okvir upozorenja i pokreće se udesno NAKON klikom na gumb “OTKAŽI”.
Parametri:
arg0=driver
Sve su to metode dostupne s WebDriverEventListener. Postoje još dvije metode beforeScript i afterScript, ali nećemo ih pokrivati u ovom vodiču.
Koraci za implementaciju slušatelja uz pomoć sučelja “WebDriverEventListener” u Eclipseu:
Korak 1: Stvorite paket s nazivom 'Slušatelji'. Unutar tog paketa izradite klasu pod nazivom „ Slušatelji webdrivera ”I pustite da se provede “WebDriverEventListener” .
Korisničko sučelje trebalo bi izgledati dolje:
Zadržite pokazivač miša iznad crvene crte s pogreškom, Eclipse bi trebao baciti donji prijedlog za uvoz 'WebDriverEventListener'. Kliknite na Uvezi.
Izašla je pogreška na WebDriverEventListener, ali vidjet ćete donju pogrešku na klasi 'WebDriverListeners'. Pomaknite kursor preko pogreške i vidjet ćete prijedlog za dodavanje neprimjenjenih metoda. Kliknite na nju i vidjet ćete kako su sve metode navedene i gore opisane.
Napominjemo da smo dodali redak System.out.println svakoj metodi u svrhu demonstracije.
Uzorak koda-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); } }
Korak 2: Stvorite Listeners_Tests klase i pobrinite se da ona ima glavnu metodu unutar klase. Neka proširi klasu WebDriverListeners tako da klasa slušatelja može izvršiti operaciju nad naredbama preglednika propisane za određene događaje.
Kopirajte i zalijepite donji kôd u razred Listeners_Tests. Pokrenite donji kod poput Java aplikacije.
Uzorak koda-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(); } }
Nakon uspješnog izvođenja provjerite sadržaj prijavljen u konzoli. Ići ćemo na svaki događaj naveden u gornjem kodu.
Isječak # 1 konzole
Događaj 1: Ovo bilježi događaj prijeNavigateTo i afterNavigateTo te u skladu s tim izvršava radnje napisane u dva bloka.
Događaj 2: Ovo bilježi događaj prijeFindBy i afterFindBy te u skladu s tim izvršava radnje napisane u dva bloka. Događaj nakon ova dva događaja pokriva događaje beforeClick i afterClick.
Događaj 3: Ovo bilježi događaje beforeChangeValueOf i afterChangeValue.
Događaj 4: Ovo je isto kao i događaj-3
Događaj 5: Ovo bilježi događaje prijeNavigateBack i afterNavigateBack.
Događaj 6: Ovo bilježi događaje beforeNavigateForward i afterNavigateForward.
Događaj 7: Ovo bilježi događaje prijeNavigateRefresh i afterNavigateRefresh.
Događaj 8: Ovo je isto kao Event-1
Događaj 9: Ovo je isto kao i događaj-2
Isječak # 2 konzole
Događaj 10: Ovo bilježi događaje poput beforeAlertAccept i afterAlertAccept.
Događaj 11: Ovo bilježi događaje poput beforeAlertDismiss i afterAlertDismiss.
Događaj 12: Ovo bilježi događaje poput onException i baca poruku.
Nadam se da će vam kratki opis slušatelja dati ideju o tome kako slušatelji Webdrivera rade. Kao što smo ranije rekli da uz pomoć WebDriverEventListener moramo implementirati sve metode dostupne s ovim sučeljem.
Međutim, uz pomoć klase AbstractWebDriverEventListener možemo odabrati koje događaje želimo implementirati.
# 2) Klasa AbstractWebDriverEventListener
Koraci za implementaciju slušatelja pomoću klase 'AbstractWebDriverEventListener':
Korak 1
Stvorite predmet “ AbstractWebDriverListener 'I neka produži razred' AbstractWebDriverEventListener '
Kao što vidite, za razliku od ' WebDriverEventListener ”, Ova klasa kada se proširi ne dovodi do pogreške kako bi dodala neprovedene metode. Možete odabrati koje metode želite implementirati u svoj projekt.
Kopirajte i zalijepite donji kod:
Uzorak koda-3
najbolji besplatni program za preuzimanje glazbe za android
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); } }
Korak 2
Stvorite novu klasu s imenom ' Apstraktni slušatelji_Test 'I unutar nje stvorite instancu' SažetakWebDriverListeners ”Razred.
Kopirajte i zalijepite donji kod unutar ove klase.
Uzorak koda-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(); } }
Ova klasa ima i ranije zabilježene događaje, ali budući da smo našu klasu slušatelja ograničili na implementaciju samo šest događaja, odbacit će druge i prikazati samo zapisnik za spomenute.
Pogled prozora konzole
Kao što možete vidjeti žuto označena područja na gornjoj slici, samo su metode implementirane u SažetakWebDriverListeners Pokrenuta je nastava.
Zaključak
Slušatelji WebDrivera sučelja su koja slušaju događaj u pregledniku i odgovaraju na njega. Ako ga implementirate uz pomoć WebDriverEventListener, morate implementirati sve metode uključene u ovo sučelje
Ako implementirate WebDriver Listener uz pomoć klase AbstractWebDriverEventListener, možete odabrati metode koje želite implementirati.
=> Posjetite ovdje da biste naučili selen iz ogrebotina.
Preporučena literatura
- Vodič za krastavac selenij: Integracija Java Selenium WebDriver krastavaca
- Uvod u Selenium WebDriver - Vodič za selen br. 8
- Vodič za ChromeDriver Selenium: Testovi Selenium Webdriver-a na Chromeu
- Implementacija naše prve skripte WebDriver - Vodič br. 10 za Selenium WebDriver
- 30+ najboljih vodiča za selen: naučite selen na stvarnim primjerima
- Česta pitanja o selenu
- Kako postupati s upozorenjima / skočnim prozorima u programu Selenium WebDriver - Vodič za selenij br. 16
- Implicitno i eksplicitno čekanje u Selenium WebDriver (vrste selenovih čekanja)