webdriver listeners selenium
Co to są słuchacze WebDriver? Dlaczego potrzebujemy słuchaczy w testowaniu automatyzacji Selenium? Ten samouczek zawiera szczegółowe odpowiedzi na te pytania z przykładowymi przykładami kodu:
Słuchacze, jak sama nazwa wskazuje, „słuchają” każdego zdarzenia, które jest przepisane w kodzie Selenium. Na przykład, jeśli chcesz wiedzieć, co się stanie, zanim klikniesz dowolny element; przed i po przejściu do elementu lub co się stanie, gdy zostanie zgłoszony wyjątek i test się nie powiedzie, przydają się detektory.
Praktyczne zastosowanie detektorów w testowaniu automatyzacji Selenium może polegać na rejestrowaniu kolejności działań i wykonywaniu zrzutów ekranu w momencie wyrzucenia wyjątku. Ułatwia to łatwe debugowanie na późniejszych etapach wykonywania testów.
=> Sprawdź WSZYSTKIE samouczki dotyczące Selenium tutaj.
Czego się nauczysz:
Implementacja słuchaczy Webdriver
Istnieją dwa typy słuchaczy:
- Webdriver Listeners
- Słuchacze TestNG
Najpierw zrozumiemy, jak działają słuchacze Webdriver. W tym samouczku skupimy się na odbiorniku zdarzeń Webdriver.
Dlaczego używamy odbiornika zdarzeń Webdriver?
Z pomocą Webdrivera jesteśmy w stanie wywołać wiele zdarzeń w przeglądarce i elementach internetowych. Śledzi wszystkie zdarzenia, które są wyzwalane podczas wykonywania i może pomóc nam w debugowaniu po zakończeniu wykonywania.
Istnieją dwa sposoby implementacji detektorów zdarzeń Webdriver:
- WebDriverEventListener który jest interfejsem, który ma pewne predefiniowane metody śledzenia zdarzeń Webdriver. Wymaga od nas wdrożenia WSZYSTKO metody predefiniowane w interfejsie.
- Klasa AbstractWebDriverEventListener co daje nam możliwość wdrażania tylko tych metod, którymi jesteśmy zainteresowani.
# 1) Interfejs WebDriverEventListener
Wstępnie zdefiniowane metody używane do implementacji interfejsu WebDriverEventListener są wymienione poniżej:
(i) void beforeChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Ta metoda jest wyzwalana, gdy wykonujemy operację sendKeys () lub clear () na elemencie Web. (Na przykład driver.findElement (By.id („Login”)). Clear ()) i jest uruchamiany PRZED wykonanie operacji na elemencie WWW.
Parametry:
arg0= Web Element arg1=driver
(ii) void afterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Ta metoda jest wyzwalana, gdy wykonujemy operację sendKeys () lub clear () na elemencie Web. (Na przykład driver.findElement (By.id („Login”)). Clear ()) i jest uruchamiany PO wykonanie operacji na elemencie WWW.
Parametry:
arg0= Web Element arg1=driver
(iii) void beforeClickOn (WebElement arg0, WebDriver arg1)
Ta metoda jest uruchamiana PRZED klikamy dowolny element sieciowy.
Parametry:
arg0= Web Element arg1=driver
(iv) void afterClickOn (WebElement arg0, WebDriver arg1)
wirtualna rzeczywistość kompatybilna z Xbox One
Ta metoda jest uruchamiana PO klikamy dowolny element sieciowy.
Parametry:
arg0= Web Element arg1=driver
(v) void beforeNavigateTo (ciąg arg0, WebDriver arg1)
Ta metoda jest uruchamiana, gdy używamy navigate (). To (String URL) (Na przykład navigate (). To („https: // www.google.com ”)) I jest wyzwalany PRZED przechodzenie do adresu URL.
Parametry:
arg0= URL arg1=driver
(vi) void afterNavigateTo (ciąg arg0, WebDriver arg1)
Ta metoda jest uruchamiana, gdy używamy navigate (). To (String URL) (Na przykład navigate (). To („https: // www.google.com ”)) I jest wyzwalany PO przechodzenie do adresu URL.
Parametry:
arg0= URL arg1=driver
(vii) void beforeNavigateBack (WebDriver arg0)
Ta metoda jest uruchamiana, gdy używamy polecenia navigate (). Back (). To się dzieje PRZED przekierowanie użytkownika na poprzednią stronę.
Parametry:
arg0=driver
(viii) void afterNavigateBack (WebDriver arg0)
Ta metoda jest uruchamiana, gdy używamy polecenia navigate (). Back (). To się dzieje PO przekierowanie użytkownika na poprzednią stronę.
Parametry:
arg0=driver
(ix) void beforeNavigateForward (WebDriver arg0)
Ta metoda jest uruchamiana, gdy używamy polecenia navigate (). Forward (). To się dzieje PRZED przekierowanie użytkownika do następnej strony.
Parametry:
arg0=driver
(x) void afterNavigateBack (WebDriver arg0)
Ta metoda jest uruchamiana, gdy używamy polecenia navigate (). Forward (). To się dzieje PO przekierowanie użytkownika do następnej strony.
Parametry:
arg0=driver
(xi) void beforeNavigateRefresh (WebDriver arg0)
Ta metoda jest uruchamiana, gdy używamy polecenia navigate (). Refresh (). To się dzieje PRZED odświeżanie bieżącej strony.
Parametry:
arg0=driver
(xii) void afterNavigateRefresh (WebDriver arg0)
Ta metoda jest uruchamiana, gdy używamy polecenia navigate (). Refresh (). To się dzieje PO odświeżanie bieżącej strony.
Parametry:
arg0=driver
(xiii) void beforeFindBy (przez arg0, WebElement arg1, WebDriver arg2)
Ta metoda jest uruchamiana, gdy używamy polecenia driver.findElement (By.id ('Some id or any other locator')) . To się dzieje PRZED znajdź element sieci.
Parametry:
arg0=locator arg1=Web Element arg2=driver
(xiv) void afterFindBy (Przez arg0, WebElement arg1, WebDriver arg2)
Ta metoda jest uruchamiana, gdy używamy polecenia driver.findElement (By.id ('Some id or any other locator')) . To się dzieje PO znajdź element sieci.
Parametry:
arg0=locator arg1=Web Element arg2=driver
(xv) void onException (Throwable arg0, WebDriver arg1)
Ta metoda jest generowana za każdym razem, gdy zostanie zgłoszony wyjątek. Na przykład, jeśli Webdriver nie jest w stanie znaleźć elementu, uruchomi tę metodę i wykona kod, który jest w nim zapisany.
Parametry:
arg0=Exception arg1= driver
(xvi) void beforeAlertAccept (WebDriver arg0)
Ta metoda jest uruchamiana za każdym razem, gdy na ekranie pojawia się okno alertu i jest uruchamiana po prawej stronie PRZED klikając na przycisk „OK lub AKCEPTUJ”.
Parametry:
arg0=driver
(xvii) void afterAlertAccept (WebDriver arg0)
Ta metoda jest uruchamiana za każdym razem, gdy na ekranie pojawia się okno alertu i jest uruchamiana po prawej stronie PO klikając na przycisk „OK lub AKCEPTUJ”.
Parametry:
arg0=driver
(xviii) void beforeAlertDismiss (WebDriver arg0)
Ta metoda jest uruchamiana za każdym razem, gdy na ekranie pojawia się okno alertu i jest uruchamiana po prawej stronie PRZED kliknięcie przycisku „ANULUJ”.
Parametry:
arg0=driver
(xix) void afterAlertDismiss (WebDriver arg0)
Ta metoda jest uruchamiana za każdym razem, gdy na ekranie pojawia się okno alertu i jest uruchamiana po prawej stronie PO kliknięcie przycisku „ANULUJ”.
Parametry:
arg0=driver
To są wszystkie metody dostępne w WebDriverEventListener. Istnieją dwie inne metody przed i po skryptach, ale nie będziemy ich omawiać w tym samouczku.
Kroki do zaimplementowania detektorów za pomocą interfejsu „WebDriverEventListener” w Eclipse:
Krok 1: Utwórz pakiet o nazwie „Listeners”. Wewnątrz tego pakietu utwórz klasę o nazwie „ WebdriverListeners ”I niech wdroży „WebDriverEventListener” .
jak otworzyć plik torrentowany na komputerze
Interfejs użytkownika powinien wyglądać jak poniżej:
Najedź myszą na czerwoną linię z komunikatem Error, Eclipse powinno wyświetlić poniższą sugestię importowania „WebDriverEventListener”. Kliknij Importuj.
Błąd w WebDriverEventListener został zakończony, ale zobaczysz poniższy błąd w klasie „WebDriverListeners”. Najedź kursorem na błąd, a zobaczysz sugestię dodania niezaimplementowanych metod. Kliknij go, a zobaczysz, że wszystkie metody są wymienione i opisane powyżej.
Zwróć uwagę, że dodaliśmy wiersz System.out.println do każdej metody w celach demonstracyjnych.
Przykładowy kod-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: Utwórz klasę Listeners_Tests i upewnij się, że ma główną metodę wewnątrz klasy. Niech rozszerza klasę WebDriverListeners, tak aby klasa detektora mogła wykonywać operacje na poleceniach przeglądarki przypisanych do określonych zdarzeń.
Skopiuj i wklej poniższy kod w klasie Listeners_Tests. Uruchom poniższy kod, podobnie jak aplikację Java.
Przykładowy kod-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 pomyślnym zakończeniu uruchomienia sprawdź zawartość zarejestrowaną w konsoli. Będziemy chodzić na każde wydarzenie wymienione w powyższym kodzie.
Fragment nr 1 konsoli
Wydarzenie-1: To rejestruje zdarzenie przedNavigateTo i afterNavigateTo i odpowiednio wykonuje akcje zapisane w dwóch blokach.
Wydarzenie 2: To rejestruje zdarzenie przedFindBy i afterFindBy i odpowiednio wykonuje akcje zapisane w dwóch blokach. Zdarzenie po tych dwóch zdarzeniach obejmuje zdarzenia beforeClick i afterClick.
Wydarzenie-3: Rejestruje zdarzenia beforeChangeValueOf i afterChangeValue.
Wydarzenie 4: To jest to samo co Event-3
Wydarzenie-5: To rejestruje zdarzenia beforeNavigateBack i afterNavigateBack.
Wydarzenie 6: Rejestruje zdarzenia beforeNavigateForward i afterNavigateForward.
Wydarzenie-7: Rejestruje zdarzenia beforeNavigateRefresh i afterNavigateRefresh.
Wydarzenie 8: To jest to samo co Event-1
Wydarzenie 9: To jest to samo co Event-2
Fragment # 2 konsoli
Wydarzenie-10: Rejestruje zdarzenia, takie jak beforeAlertAccept i afterAlertAccept.
Wydarzenie 11: Rejestruje zdarzenia, takie jak beforeAlertDismiss i afterAlertDismiss.
Wydarzenie-12: To rejestruje zdarzenia, takie jak onException, i zgłasza komunikat.
Mam nadzieję, że krótki opis słuchaczy da ci wyobrażenie o tym, jak działają Webdriver Listeners. Jak powiedzieliśmy wcześniej, przy pomocy WebDriverEventListener musimy zaimplementować wszystkie metody dostępne w tym interfejsie.
Jednak za pomocą klasy AbstractWebDriverEventListener możemy wybrać, które zdarzenia chcemy zaimplementować.
# 2) Klasa AbstractWebDriverEventListener
Kroki implementacji detektorów za pomocą klasy „AbstractWebDriverEventListener”:
dobry darmowy program do pobierania muzyki dla Androida
Krok 1
Utwórz zajęcia „ AbstractWebDriverListener ”I niech rozszerzy klasę” AbstractWebDriverEventListener '
Jak widać, w przeciwieństwie do „ WebDriverEventListener ”, Ta klasa po rozszerzeniu nie zgłasza błędu przy dodawaniu niezaimplementowanych metod. Możesz wybrać dowolne metody, które chcesz zaimplementować w swoim projekcie.
Skopiuj i wklej poniższy kod:
Przykładowy kod-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
Utwórz nową klasę o nazwie „ AbstractListeners_Test ”I w nim utwórz wystąpienie„ AbstractWebDriverListeners ' klasa.
Skopiuj i wklej poniższy kod wewnątrz tej klasy.
Przykładowy kod-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(); } }
Ta klasa ma również zdarzenia zarejestrowane wcześniej, ale ponieważ ograniczyliśmy naszą klasę Listener do implementacji tylko sześciu zdarzeń, odrzuci ona inne i wyświetli dziennik tylko dla tych wymienionych.
Widok okna konsoli
Jak widać zaznaczone na żółto obszary na powyższym obrazku, tylko metody, które zostały zaimplementowane w AbstractWebDriverListeners Klasa została uruchomiona.
Wniosek
Odbiorniki WebDriver to interfejsy, które nasłuchują zdarzenia przeglądarki i odpowiednio na nie reagują. Jeśli zaimplementujesz to za pomocą WebDriverEventListener, musisz zaimplementować wszystkie metody związane z tym interfejsem
Jeśli zaimplementujesz Listener WebDriver za pomocą klasy AbstractWebDriverEventListener, możesz wybrać metody, które chcesz zaimplementować.
=> Odwiedź tutaj, aby nauczyć się selenu od podstaw.
rekomendowane lektury
- Cucumber Selenium Tutorial: Cucumber Java Selenium Integracja WebDriver
- Wprowadzenie do Selenium WebDriver - samouczek Selenium # 8
- Samouczek Selenium ChromeDriver: Testy Selenium Webdriver w przeglądarce Chrome
- Wdrożenie naszego pierwszego skryptu WebDriver - Selenium WebDriver Tutorial # 10
- 30+ najlepszych samouczków dotyczących selenu: naucz się selenu z prawdziwymi przykładami
- Często zadawane pytania dotyczące selenu
- Jak radzić sobie z alertami / wyskakującymi okienkami w Selenium WebDriver - Samouczek Selenium nr 16
- Niejawne i jawne oczekiwanie w Selenium WebDriver (typy czeków Selenium)