webdriver listeners selenium
Co jsou posluchače WebDriver? Proč potřebujeme posluchače v automatickém testování selenu? Tento výukový program podrobně odpovídá na tyto otázky s příklady ukázkových kódů:
Posluchači, jak název napovídá, „poslouchají“ jakoukoli událost předepsanou v selenovém kódu. Například pokud chcete vědět, co se stane, než kliknete na libovolný prvek; před a po navigaci k prvku nebo co se stane, když je vyvolána výjimka a test selže, posluchači přijdou vhod.
Praktickým využitím Listeners při testování automatizace selenu může být protokolování pořadí akcí a pořizování snímku obrazovky, jakmile dojde k vyvolání výjimky. To usnadňuje snadné ladění v pozdějších fázích provádění testu.
=> Podívejte se na VŠECHNY výukové programy selenu zde.
Co se naučíte:
Implementace posluchačů Webdriver
Existují hlavně dva typy posluchačů:
- Posluchači webdriveru
- Posluchači TestNG
Nejprve pochopíme, jak Webdriver Listeners fungují. V tomto kurzu se zaměříme na posluchač událostí Webdriver.
Proč používáme posluchač událostí Webdriver?
S pomocí Webdriveru jsme schopni spustit mnoho událostí v prohlížeči a webových prvcích. Udržuje přehled o všech událostech, které se spouštějí při provádění, a může nám pomoci při ladění po dokončení provádění.
Existují dva způsoby, jak můžeme implementovat posluchače událostí Webdriver:
- WebDriverEventListener což je rozhraní, které má některé předdefinované metody pro sledování událostí Webdriveru. Vyžaduje to, abychom to provedli VŠECHNO metody předdefinované v rozhraní.
- Třída AbstractWebDriverEventListener což nám poskytuje možnost implementace pouze těch metod, o které máme zájem.
# 1) Rozhraní WebDriverEventListener
Předdefinované metody použité k implementaci rozhraní WebDriverEventListener jsou uvedeny níže:
(i) void beforeChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Tato metoda se aktivuje, když na webovém prvku provedeme operaci sendKeys () nebo clear (). (Například driver.findElement (By.id („Přihlášení“)). Clear ()) a je spuštěno PŘED provádění operace s webovým prvkem.
Parametry:
arg0= Web Element arg1=driver
(ii) void afterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Tato metoda se aktivuje, když na webovém prvku provedeme operaci sendKeys () nebo clear (). (Například driver.findElement (By.id („Přihlášení“)). Clear ()) a je spuštěno PO provádění operace s webovým prvkem.
Parametry:
arg0= Web Element arg1=driver
(iii) void beforeClickOn (WebElement arg0, WebDriver arg1)
Tato metoda je spuštěna PŘED klikneme na libovolný webový prvek.
Parametry:
arg0= Web Element arg1=driver
(iv) void afterClickOn (WebElement arg0, WebDriver arg1)
jak vytvořit řídicí panel jira
Tato metoda je spuštěna PO klikneme na libovolný webový prvek.
Parametry:
arg0= Web Element arg1=driver
(v) void beforeNavigateTo (řetězec arg0, WebDriver arg1)
Tato metoda se spustí, když použijeme navigate (). To (String URL) (Například navigate (). To (“https: // www.google.com ”)), A je spuštěn PŘED navigace na adresu URL.
Parametry:
arg0= URL arg1=driver
(vi) void afterNavigateTo (řetězec arg0, WebDriver arg1)
Tato metoda se spustí, když použijeme navigate (). To (String URL) (Například navigate (). To (“https: // www.google.com ”)), A je spuštěn PO navigace na adresu URL.
Parametry:
arg0= URL arg1=driver
(vii) void beforeNavigateBack (WebDriver arg0)
Tato metoda se spustí, když použijeme příkaz navigate (). Back (). Koná se to PŘED přesměrování uživatele na předchozí stránku.
Parametry:
arg0=driver
(viii) void afterNavigateBack (WebDriver arg0)
Tato metoda se spustí, když použijeme příkaz navigate (). Back (). Koná se to PO přesměrování uživatele na předchozí stránku.
Parametry:
arg0=driver
(ix) void beforeNavigateForward (WebDriver arg0)
Tato metoda se spustí, když použijeme příkaz navigate (). Forward (). Koná se to PŘED přesměrování uživatele na další stránku.
Parametry:
arg0=driver
(x) void afterNavigateBack (WebDriver arg0)
Tato metoda se spustí, když použijeme příkaz navigate (). Forward (). Koná se to PO přesměrování uživatele na další stránku.
Parametry:
arg0=driver
(xi) void beforeNavigateRefresh (WebDriver arg0)
Tato metoda se spustí, když použijeme příkaz navigate (). Refresh (). Koná se to PŘED obnovení aktuální stránky.
Parametry:
arg0=driver
(xii) void afterNavigateRefresh (WebDriver arg0)
Tato metoda se spustí, když použijeme příkaz navigate (). Refresh (). Koná se to PO obnovení aktuální stránky.
Parametry:
arg0=driver
(xiii) void beforeFindBy (Autor arg0, WebElement arg1, WebDriver arg2)
Tato metoda se spustí, když použijeme příkaz driver.findElement (By.id („Some id or any other locator“)) . Koná se to PŘED najděte webový prvek.
Parametry:
nejlepší společnosti pro videohry, pro které můžete pracovat
arg0=locator arg1=Web Element arg2=driver
(xiv) void afterFindBy (Podle arg0, WebElement arg1, WebDriver arg2)
Tato metoda se spustí, když použijeme příkaz driver.findElement (By.id („Some id or any other locator“)) . Koná se to PO najděte webový prvek.
Parametry:
arg0=locator arg1=Web Element arg2=driver
(xv) void onException (Throwable arg0, WebDriver arg1)
Tato metoda je vyvolána vždy, když je vyvolána výjimka. Například pokud Webdriver není schopen prvek najít, spustí tuto metodu a provede jakýkoli kód, který je do něj zapsán.
Parametry:
arg0=Exception arg1= driver
(xvi) void beforeAlertAccept (WebDriver arg0)
Tato metoda je spuštěna vždy, když je na obrazovce zobrazeno výstražné pole, a je spuštěna vpravo PŘED kliknutím na tlačítko „OK nebo PŘIJMOUT“.
Parametry:
arg0=driver
(xvii) void afterAlertAccept (WebDriver arg0)
Tato metoda je spuštěna vždy, když je na obrazovce zobrazeno výstražné pole, a je spuštěna vpravo PO kliknutím na tlačítko „OK nebo PŘIJMOUT“.
Parametry:
arg0=driver
(xviii) void beforeAlertDismiss (WebDriver arg0)
Tato metoda je spuštěna vždy, když je na obrazovce zobrazeno výstražné pole, a je spuštěna vpravo PŘED kliknutím na tlačítko „ZRUŠIT“.
Parametry:
arg0=driver
(xix) void afterAlertDismiss (WebDriver arg0)
Tato metoda je spuštěna vždy, když je na obrazovce zobrazeno výstražné pole, a je spuštěna vpravo PO kliknutím na tlačítko „ZRUŠIT“.
Parametry:
arg0=driver
To jsou všechny metody, které jsou k dispozici WebDriverEventListener. Existují další dvě metody beforeScript a afterScript, ale nebudeme se jimi zabývat v tomto tutoriálu.
Kroky k implementaci posluchačů pomocí rozhraní „WebDriverEventListener“ v Eclipse:
Krok 1: Vytvořte balíček s názvem „Posluchači“. Uvnitř tohoto balíčku vytvořte třídu nazvanou „ WebdriverListeners “A nechte to provést „WebDriverEventListener“ .
Uživatelské rozhraní by mělo vypadat níže:
Umístěte kurzor myši na červenou čáru s chybou, Eclipse by měl hodit níže uvedený návrh na import „WebDriverEventListener“. Klikněte na Importovat.
Chyba ve WebDriverEventListener je ukončena, ale ve třídě „WebDriverListeners“ se zobrazí níže uvedená chyba. Přesuňte kurzor na chybu a zobrazí se návrh na přidání neimplementovaných metod. Klikněte na něj a uvidíte, že všechny metody jsou uvedeny a popsány výše.
Všimněte si, že jsme přidali řádek System.out.println do každé metody pro demonstrační účely.
Ukázkový kód-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); } }
Krok 2: Vytvořte třídu Listeners_Tests a ujistěte se, že má hlavní metodu uvnitř třídy. Nechte ji rozšířit třídu WebDriverListeners, aby třída posluchače mohla provádět operace s příkazy prohlížeče předepsanými pro určité události.
Zkopírujte a vložte níže uvedený kód do třídy Listeners_Tests. Spusťte níže uvedený kód, jako je Java aplikace.
Ukázkový kód-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(); } }
Po úspěšném dokončení běhu zkontrolujte obsah přihlášený v konzole. Půjdeme na každou událost uvedenou v kódu výše.
Úryvek č. 1 konzoly
Událost 1: To zaznamenává událost beforeNavigateTo a afterNavigateTo a podle toho provádí akce zapsané v těchto dvou blocích.
Událost 2: To zaznamenává událost beforeFindBy a afterFindBy a podle toho provádí akce zapsané ve dvou blocích. Událost po těchto dvou událostech pokrývá události beforeClick a afterClick.
Událost 3: To zaznamenává beforeChangeValueOf a afterChangeValue událostí.
oracle sql rozhovor otázky a odpovědi na 3 roky zkušeností
Událost 4: To je stejné jako událost 3
Událost 5: Toto zaznamenává události beforeNavigateBack a afterNavigateBack.
Událost 6: To zaznamenává události beforeNavigateForward a afterNavigateForward.
Událost 7: To zaznamenává události beforeNavigateRefresh a afterNavigateRefresh.
Událost 8: To je stejné jako událost 1
Událost 9: Je to stejné jako u Události 2
Úryvek č. 2 konzoly
Událost-10: To zaznamenává události jako beforeAlertAccept a afterAlertAccept.
Událost 11: To zaznamenává události jako beforeAlertDismiss a afterAlertDismiss.
Událost-12: To zaznamenává události jako onException a vyvolá zprávu.
Doufám, že vám krátký popis posluchačů poskytne představu o tom, jak Webdriver Listeners fungují. Jak jsme již dříve řekli, musíme pomocí WebDriverEventListener implementovat všechny metody dostupné v tomto rozhraní.
S pomocí třídy AbstractWebDriverEventListener si však můžeme vybrat, které události chceme implementovat.
# 2) AbstractWebDriverEventListener - třída
Kroky k implementaci posluchačů pomocí třídy „AbstractWebDriverEventListener“:
Krok 1
Vytvořit třídu “ AbstractWebDriverListener „A nech to rozšířit třídu“ AbstractWebDriverEventListener '
Jak vidíte, na rozdíl od „ WebDriverEventListener ”, Tato třída při prodloužení nevyvolá chybu pro přidání neimplementovaných metod. Můžete vybrat libovolné metody, které chcete do svého projektu implementovat.
Zkopírujte a vložte níže uvedený kód:
Ukázkový kód-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); } }
Krok 2
Vytvořte novou třídu s názvem „ AbstractListeners_Test „A uvnitř toho vytvořte instanci“ AbstractWebDriverListeners ”Třída.
Zkopírujte a vložte níže uvedený kód do této třídy.
Ukázkový kód-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(); } }
Tato třída má také události zaznamenané dříve, ale protože jsme omezili naši třídu Listener na implementaci pouze šesti událostí, zahodí ostatní a zobrazí pouze protokol pro ty zmíněné.
Zobrazení okna konzoly
Jak vidíte žlutě označené oblasti na obrázku výše, pouze metody, které byly implementovány v AbstractWebDriverListeners Třída byla spuštěna.
Závěr
Posluchače WebDriver jsou rozhraní, která poslouchají událost prohlížeče a odpovídajícím způsobem na ni reagují. Pokud jej implementujete pomocí WebDriverEventListener, musíte implementovat všechny metody spojené s tímto rozhraním
Pokud implementujete WebDriver Listener pomocí třídy AbstractWebDriverEventListener, můžete zvolit metody, které chcete implementovat.
=> Navštivte zde a dozvíte se selen od začátku.
Doporučené čtení
- Cucumber Selenium Tutorial: Cucumber Java Selenium WebDriver Integration
- Úvod do selenu WebDriver - Selenium Tutorial # 8
- Výukový program ChromeDriver Selenium: Testy selenového webdriveru v prohlížeči Chrome
- Implementace našeho prvního skriptu WebDriver - výuka selenu WebDriver # 10
- 30+ nejlepších návodů na selen: Naučte se selen se skutečnými příklady
- Selenium FAQ
- Jak zpracovat upozornění / vyskakovací okna v Selenium WebDriver - Selenium Tutorial # 16
- Implicitní a explicitní čekání v selenu WebDriver (typy čekání na selen)