webdriver listeners selenium
Que sont les écouteurs WebDriver? Pourquoi avons-nous besoin d'auditeurs dans les tests d'automatisation Selenium? Ce didacticiel répond en détail à ces questions avec des exemples de code:
Les auditeurs, comme son nom l'indique, «écoutent» tout événement qui est prescrit dans le code Selenium. Par exemple, si vous voulez savoir ce qui se passe avant de cliquer sur un élément; avant et après avoir accédé à un élément, ou ce qui se passe lorsqu'une exception est levée et que le test échoue, les écouteurs sont utiles.
L'utilisation pratique des écouteurs dans Selenium Automation Testing pourrait être de consigner l'ordre des actions et de prendre la capture d'écran au fur et à mesure qu'une exception est levée. Cela facilite le débogage dans les étapes ultérieures de l'exécution des tests.
=> Consultez TOUS les tutoriels Selenium ici.
Ce que vous apprendrez:
Implémentation des écouteurs Webdriver
Il existe principalement deux types d'auditeurs:
- Auditeurs Webdriver
- Auditeurs TestNG
Nous allons d'abord comprendre comment fonctionnent les écouteurs Webdriver. Dans ce didacticiel, nous nous concentrerons sur l'écouteur d'événements Webdriver.
Pourquoi utilisons-nous Webdriver Event Listener?
Avec l'aide de Webdriver, nous sommes en mesure de déclencher de nombreux événements sur le navigateur et les éléments Web. Il garde une trace de tous les événements déclenchés pendant l'exécution et peut nous aider à déboguer lorsque l'exécution est terminée.
Nous pouvons implémenter les écouteurs d'événements Webdriver de deux manières:
- WebDriverEventListener qui est une interface qui a des méthodes prédéfinies pour suivre les événements Webdriver. Cela nous oblige à mettre en œuvre TOUT les méthodes prédéfinies dans l'interface.
- AbstractWebDriverEventListener, classe ce qui nous donne la possibilité de mettre en œuvre uniquement les méthodes qui nous intéressent.
#1) Interface WebDriverEventListener
Les méthodes prédéfinies utilisées pour implémenter l'interface WebDriverEventListener sont répertoriées ci-dessous:
(i) void beforeChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Cette méthode est déclenchée lorsque nous exécutons l'opération sendKeys () ou clear () sur l'élément Web. (Par exemple, driver.findElement (By.id (“Login”)). Clear ()), et est déclenché AVANT QUE exécution de l'opération sur l'élément Web.
Paramètres:
arg0= Web Element arg1=driver
(ii) void afterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Cette méthode est déclenchée lorsque nous exécutons l'opération sendKeys () ou clear () sur l'élément Web. (Par exemple, driver.findElement (By.id (“Login”)). Clear ()), et est déclenché APRÈS exécution de l'opération sur l'élément Web.
Paramètres:
arg0= Web Element arg1=driver
(iii) void beforeClickOn (WebElement arg0, WebDriver arg1)
Cette méthode est déclenchée AVANT QUE nous cliquons sur n'importe quel élément Web.
Paramètres:
arg0= Web Element arg1=driver
(iv) void afterClickOn (WebElement arg0, WebDriver arg1)
test en ligne gratuit pour les tests manuels
Cette méthode est déclenchée APRÈS nous cliquons sur n'importe quel élément Web.
Paramètres:
arg0= Web Element arg1=driver
(v) void beforeNavigateTo (chaîne arg0, WebDriver arg1)
Cette méthode est déclenchée lorsque nous utilisons naviguer (). To (String URL) (Par exemple, navigate (). To ('https: // www.google.com ”)), Et est déclenché AVANT QUE accéder à l'URL.
Paramètres:
arg0= URL arg1=driver
(vi) void afterNavigateTo (chaîne arg0, WebDriver arg1)
Cette méthode est déclenchée lorsque nous utilisons naviguer (). To (String URL) (Par exemple, navigate (). To ('https: // www.google.com ”)), Et est déclenché APRÈS accéder à l'URL.
Paramètres:
arg0= URL arg1=driver
(vii) void beforeNavigateBack (WebDriver arg0)
Cette méthode est déclenchée lorsque nous utilisons la commande navigate (). Back (). Elle a lieu AVANT QUE redirigeant l'utilisateur vers la page précédente.
Paramètres:
arg0=driver
(viii) void afterNavigateBack (WebDriver arg0)
Cette méthode est déclenchée lorsque nous utilisons la commande navigate (). Back (). Elle a lieu APRÈS redirigeant l'utilisateur vers la page précédente.
Paramètres:
arg0=driver
(ix) void beforeNavigateForward (WebDriver arg0)
Cette méthode est déclenchée lorsque nous utilisons la commande navigate (). Forward (). Elle a lieu AVANT QUE redirigeant l'utilisateur vers la page suivante.
Paramètres:
arg0=driver
(x) void afterNavigateBack (WebDriver arg0)
Cette méthode est déclenchée lorsque nous utilisons la commande navigate (). Forward (). Elle a lieu APRÈS redirigeant l'utilisateur vers la page suivante.
Paramètres:
arg0=driver
(xi) void beforeNavigateRefresh (WebDriver arg0)
Cette méthode est déclenchée lorsque nous utilisons la commande navigate (). Refresh (). Elle a lieu AVANT QUE actualisation de la page actuelle.
Paramètres:
arg0=driver
(xii) void afterNavigateRefresh (WebDriver arg0)
Cette méthode est déclenchée lorsque nous utilisons la commande navigate (). Refresh (). Elle a lieu APRÈS actualisation de la page actuelle.
Paramètres:
arg0=driver
(xiii) void beforeFindBy (Par arg0, WebElement arg1, WebDriver arg2)
Cette méthode est déclenchée lorsque nous utilisons la commande driver.findElement (By.id ('Some id or any other locator')) . Elle a lieu AVANT QUE recherchez l'élément Web.
Paramètres:
arg0=locator arg1=Web Element arg2=driver
(xiv) void afterFindBy (Par arg0, WebElement arg1, WebDriver arg2)
Cette méthode est déclenchée lorsque nous utilisons la commande driver.findElement (By.id ('Some id or any other locator')) . Elle a lieu APRÈS recherchez l'élément Web.
Paramètres:
arg0=locator arg1=Web Element arg2=driver
(xv) void onException (Throwable arg0, WebDriver arg1)
Cette méthode est levée chaque fois qu'une exception est levée. Par exemple, si le Webdriver n'est pas en mesure de trouver l'élément, il déclenchera cette méthode et exécutera tout le code qui y est écrit.
Paramètres:
telecharger VPN Japon
arg0=Exception arg1= driver
(xvi) void beforeAlertAccept (WebDriver arg0)
Cette méthode est déclenchée chaque fois qu'une boîte d'alerte est affichée à l'écran et est déclenchée à droite AVANT QUE en cliquant sur le bouton «OK ou ACCEPTER».
Paramètres:
arg0=driver
(xvii) void afterAlertAccept (WebDriver arg0)
Cette méthode est déclenchée chaque fois qu'une boîte d'alerte est affichée à l'écran et est déclenchée à droite APRÈS en cliquant sur le bouton «OK ou ACCEPTER».
Paramètres:
arg0=driver
(xviii) void beforeAlertDismiss (WebDriver arg0)
Cette méthode est déclenchée chaque fois qu'une boîte d'alerte est affichée à l'écran et est déclenchée à droite AVANT QUE en cliquant sur le bouton «ANNULER».
Paramètres:
arg0=driver
(xix) void afterAlertDismiss (WebDriver arg0)
Cette méthode est déclenchée chaque fois qu'une boîte d'alerte est affichée à l'écran et est déclenchée à droite APRÈS en cliquant sur le bouton «ANNULER».
Paramètres:
arg0=driver
Ce sont toutes les méthodes disponibles avec WebDriverEventListener. Il existe deux autres méthodes beforeScript et afterScript mais nous n'allons pas les couvrir dans ce tutoriel.
Étapes pour implémenter des écouteurs à l'aide de l'interface «WebDriverEventListener» dans Eclipse:
Étape 1: Créez un package avec le nom «Listeners». Dans ce package, créez une classe appelée ' WebdriverListeners »Et laissez-le mettre en œuvre «WebDriverEventListener» .
L'interface utilisateur devrait ressembler à ci-dessous:
Passez votre souris sur la ligne rouge avec Erreur, l'Eclipse devrait lancer la suggestion ci-dessous pour importer «WebDriverEventListener». Cliquez sur Importer.
L'erreur sur le WebDriverEventListener est quittée, mais vous verrez l'erreur ci-dessous sur la classe «WebDriverListeners». Déplacez le curseur sur l'erreur et vous verrez une suggestion pour ajouter des méthodes non implémentées. Cliquez dessus et vous verrez que toutes les méthodes sont répertoriées et décrites ci-dessus.
Veuillez noter que nous avons ajouté la ligne System.out.println à chaque méthode à des fins de démonstration.
Exemple de code-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); } }
Étape 2: Créez la classe Listeners_Tests et assurez-vous qu'elle contient la méthode principale à l'intérieur de la classe. Laissez-le étendre la classe WebDriverListeners afin que la classe d'écouteur puisse effectuer une opération sur les commandes de navigateur prescrites pour certains événements.
Veuillez copier-coller le code ci-dessous dans la classe Listeners_Tests. Exécutez le code ci-dessous comme l'application Java.
Exemple de code-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(); } }
Une fois l'analyse terminée, veuillez vérifier le contenu enregistré dans la console. Nous irons à chaque événement répertorié dans le code ci-dessus.
Extrait n ° 1 de la console
Événement-1: Cela enregistre l'événement beforeNavigateTo et afterNavigateTo, et exécute les actions écrites dans les deux blocs en conséquence.
Événement-2: Cela enregistre l'événement beforeFindBy et afterFindBy et effectue les actions écrites dans les deux blocs en conséquence. L'événement après ces deux événements couvre les événements beforeClick et afterClick.
Événement-3: Cela enregistre les événements beforeChangeValueOf et afterChangeValue.
Événement-4: C'est la même chose que Event-3
Événement-5: Cela enregistre les événements beforeNavigateBack et afterNavigateBack.
Événement-6: Cela enregistre les événements beforeNavigateForward et afterNavigateForward.
Événement-7: Cela enregistre les événements beforeNavigateRefresh et afterNavigateRefresh.
quel est le meilleur os pour pc
Événement-8: C'est la même chose que Event-1
Événement-9: C'est la même chose que Event-2
Extrait n ° 2 de la console
Événement-10: Cela enregistre les événements comme beforeAlertAccept et afterAlertAccept.
Événement-11: Cela enregistre les événements comme beforeAlertDismiss et afterAlertDismiss.
Événement-12: Cela enregistre les événements comme onException et lance le message.
J'espère que la brève description des auditeurs vous donnera une idée du fonctionnement des écouteurs Webdriver. Comme nous l'avons dit précédemment, avec l'aide de WebDriverEventListener, nous devons implémenter toutes les méthodes disponibles avec cette interface.
Cependant, avec l'aide de la classe AbstractWebDriverEventListener, nous pouvons choisir les événements que nous voulons implémenter.
# 2) Classe AbstractWebDriverEventListener
Étapes pour implémenter des écouteurs à l'aide de la classe «AbstractWebDriverEventListener»:
Étape 1
Créer une classe ' RésuméWebDriverListener 'Et laissez-le étendre la classe' AbstractWebDriverEventListener '
Comme vous pouvez le voir, contrairement à ' WebDriverEventListener », Cette classe lorsqu'elle est étendue ne renvoie pas d'erreur pour ajouter des méthodes non implémentées. Vous pouvez sélectionner les méthodes que vous souhaitez implémenter dans votre projet.
Copiez et collez le code ci-dessous:
Exemple de code-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); } }
Étape 2
Créez une nouvelle classe avec le nom ' AbstractListeners_Test 'Et à l'intérieur, créez l'instance de' RésuméWebDriverListeners ' classer.
Copiez-collez le code ci-dessous dans cette classe.
Exemple de code-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(); } }
Cette classe a également les événements enregistrés plus tôt, mais comme nous avons limité notre classe Listener pour implémenter seulement six événements, elle en supprimera les autres et n'affichera le journal que pour ceux mentionnés.
Vue de la fenêtre de la console
Comme vous pouvez voir les zones marquées en jaune dans l'image ci-dessus, seules les méthodes qui ont été implémentées dans le RésuméWebDriverListeners La classe a été déclenchée.
Conclusion
Les écouteurs WebDriver sont les interfaces qui écoutent un événement du navigateur et y répondent en conséquence. Si vous l'implémentez à l'aide de WebDriverEventListener, vous devez implémenter toutes les méthodes impliquées dans cette interface
Si vous implémentez WebDriver Listener à l'aide de la classe AbstractWebDriverEventListener, vous pouvez choisir les méthodes que vous souhaitez implémenter.
=> Visitez ici pour apprendre le sélénium à partir de zéro.
lecture recommandée
- Tutoriel Cucumber Selenium: Intégration Cucumber Java Selenium WebDriver
- Introduction à Selenium WebDriver - Tutoriel Selenium # 8
- Tutoriel ChromeDriver Selenium: Tests Selenium Webdriver sur Chrome
- Implémentation de notre premier script WebDriver - Tutoriel Selenium WebDriver # 10
- 30+ meilleurs tutoriels sur Selenium: Apprenez le sélénium avec de vrais exemples
- FAQ sur le sélénium
- Comment gérer les alertes / fenêtres contextuelles dans Selenium WebDriver - Tutoriel Selenium # 16
- Attente implicite et explicite dans Selenium WebDriver (types d'attentes Selenium)