Selenium Pilote Web Java Exemple de programme

⚡ Résumé intelligent

Selenium pilote web Java L'exemple de programme vous guide pas à pas dans la création de votre premier script d'automatisation de bout en bout. LessCes modules couvrent la configuration de l'environnement, la localisation des éléments, l'envoi d'entrées, la navigation, la validation, les attentes, la gestion des exceptions et les meilleures pratiques pour des tests WebDriver fiables.

  • ⚙️ Configuration de l'environnement : Installer Java, Eclipse ou IntelliJ, configurez Selenium bibliothèques, et choisissez le bon pilote binaire pour votre version de navigateur.
  • 🧭 Localisateurs d'éléments : Utilisez l'ID, le nom, la classe, XPath, le sélecteur CSS et linkText pour identifier les éléments de manière stable sur tous les navigateurs et toutes les versions.
  • ️ Actions et saisie : WebDriver prend en charge les événements de clic, d'envoi de touches, de soumission, de sélection dans les listes déroulantes et les événements clavier pour une interaction complète de type utilisateur.
  • ⏳ Attentes intelligentes : Remplacez Thread.sleep par des attentes implicites, explicites et fluides pilotées par ExpectedConditions afin d'éliminer les tests instables.
  • ???? Gestion des exceptions: Interceptez les exceptions NoSuchElementException, TimeoutException et StaleElementReferenceException pour garantir la résilience des suites d'automatisation.
  • 🤖 Génération de tests par IA : Les assistants IA génèrent des scripts WebDriver standard, suggèrent des localisateurs et réparent automatiquement les sélecteurs lorsque le DOM change.

Selenium pilote web Java Programme

Selenium Java Exemple

Le Java classe « myclass » que nous avons créée dans le tutoriel précédent, essayons de créer un script WebDriver qui :

Étape 1 : rapporter Mercury Page d'accueil des visites
Étape 2 : vérifier son titre
Étape 3 : imprimer le résultat de la comparaison
Étape 4 : fermez-le avant de terminer tout le programme.

Selenium Exemple de WebDriver Code

Vous trouverez ci-dessous le code WebDriver réel pour la logique présentée par le scénario ci-dessus

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.">driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

Remarque : Démarrage Firefox 35, vous devez utiliser le pilote gecko créé par Mozilla pour utiliser Web Driver. Selenium 3.0, gecko et firefox ont des problèmes de compatibilité et les configurer correctement peut devenir une tâche ardue. Si le code ne fonctionne pas, rétrogradez vers Firefox version 47 ou inférieure. Alternativement, vous pouvez exécuter vos scripts sur Chrome. Selenium fonctionne immédiatement pour Chrome. Il vous suffit de modifier 3 lignes de code pour que votre script fonctionne avec Chrome ou Firefox

Explication du code

Importation de packages

Pour commencer, vous devez importer les deux packages suivants :

  1. org.openqa.selenium.*– contient la classe WebDriver nécessaire pour instancier un nouveau navigateur chargé avec un pilote spécifique
  2. org.openqa.selenium.firefox.FirefoxChauffeur – contient le FirefoxClasse de pilote nécessaire pour instancier un Firefox-pilote spécifique sur le navigateur instancié par la classe WebDriver

Si votre test nécessite des actions plus compliquées telles que l'accès à une autre classe, la prise de captures d'écran du navigateur ou la manipulation de fichiers externes, vous devrez certainement importer davantage de packages.

Instanciation d'objets et de variables

Normalement, c’est ainsi qu’un objet pilote est instancié.

WebDriver driver = new FirefoxDriver();

A FirefoxLa classe de pilote sans paramètres signifie que la valeur par défaut Firefox profil sera lancé par notre Java programme. La valeur par défaut Firefox le profil est similaire au lancement Firefox en mode sans échec (aucune extension n'est chargée).

Par commodité, nous avons conservé la base URL et le titre attendu comme variables.

Lancement d'une session de navigateur

WebDriver's get () Cette méthode permet de lancer une nouvelle session de navigation et de la diriger vers le URL que vous spécifiez comme paramètre.

driver.get(baseUrl);

Obtenez le titre réel de la page

La classe WebDriver a le getTitle () méthode qui est toujours utilisée pour obtenir le titre de la page actuellement chargée.

actualTitle = driver.getTitle();

Comparez les valeurs attendues et réelles

Cette partie du code utilise simplement une base Java structure if-else pour comparer le titre réel avec celui attendu.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Terminer une session de navigateur

L'événement Fermer()" La méthode est utilisée pour fermer la fenêtre du navigateur.

driver.close();

Mettre fin à l'intégralité du programme

Si vous utilisez cette commande sans fermer toutes les fenêtres du navigateur au préalable, l'ensemble de votre Java le programme se terminera en laissant la fenêtre du navigateur ouverte.

System.exit(0);

Exécution du test

Il existe deux manières d'exécuter du code dans Eclipse IDE

  1. On Eclipsedans la barre de menu de, cliquez sur Exécuter > Exécuter.
  2. Presse Ctrl + F11 pour exécuter l'intégralité du code.

Exécution du test

Si vous avez tout fait correctement, Eclipse afficherait « Test réussi ! »

Exécution du test

Localisation des éléments de l'interface graphique

La localisation des éléments dans WebDriver se fait en utilisant le « findElement(Par.localisateur())" méthode. La partie « localisateur » du code est la même que n'importe lequel des localisateurs évoqués précédemment dans le Selenium IDE chapitres de ces tutoriels. En fait, il est recommandé de localiser les éléments de l'interface graphique à l'aide de l'IDE et, une fois identifiés avec succès, d'exporter le code vers WebDriver.

Voici une Selenium Exemple de code permettant de localiser un élément par son identifiant. Facebook est utilisé comme référence. URL.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.facebook.com";
        String tagName = "";
        
        driver.get(baseUrl);
        tagName = driver.findElement(By.id("email")).getTagName();
        System.out.println(tagName);
        driver.close();
        System.exit(0);
}
}

Nous avons utilisé le getTagName() méthode pour extracle nom de la balise de cet élément particulier dont l'identifiant est « email ». Lors de son exécution, ce code devrait pouvoir identifier correctement le nom de la balise « input » et l'afficher. EclipseLa fenêtre de la console.

Localisation des éléments de l'interface graphique

Résumé pour localiser les éléments

Variation Description Échantillon
Par.className trouve des éléments en fonction de la valeur de l'attribut « class » findElement(By.className("someClassName"))
Par.cssSelector trouve des éléments basés sur le moteur de sélection CSS sous-jacent du pilote findElement(Par.cssSelector(“input#email”))
Par.id localise les éléments par la valeur de leur attribut « id » findElement(Par.id("someId"))
 
Par.linkText trouve un élément de lien par le texte exact qu'il affiche findElement(By.linkText(« INSCRIPTION »))
 
De nom localise les éléments par la valeur de l'attribut "name" findElement(Par.nom("unNom"))
 
Par.partialLinkText localise les éléments qui contiennent le texte du lien donné findElement(By.partialLinkText("REG"))
 
Par.tagName localise les éléments par leur nom de balise findElement(By.tagName("div"))
 
Par.xpath localise les éléments via XPath findElement(By.xpath(“//html/body/div/table/tbody/tr/td[2]/table/
tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]”))

Remarque sur l'utilisation de findElement(By.cssSelector())

By.cssSelector() ne prend pas en charge la fonctionnalité « contient ». Prendre en compte Selenium Code IDE ci-dessous –

Remarque sur l'utilisation de findElement(By.cssSelector())

In Selenium IDE ci-dessus, l'intégralité du test a réussi. Cependant dans le Selenium Script WebDriver ci-dessous, le même test a généré une erreur car WebDriver ne prend pas en charge le mot-clé « contient » lorsqu'il est utilisé dans la méthode By.cssSelector().

Remarque sur l'utilisation de findElement(By.cssSelector())

Commandes communes

Instanciation d'éléments Web

Au lieu d'utiliser la longue syntaxe « driver.findElement(By.locator()) » à chaque fois que vous accéderez à un élément particulier, nous pouvons instancier un objet WebElement pour celui-ci. La classe WebElement est contenue dans le package « org.openqa.selenium.* ».

Instanciation d'éléments Web

Cliquer sur un élément

Le clic est peut-être le moyen le plus courant d’interagir avec les éléments Web. Le click() La méthode est utilisée pour simuler le clic sur n'importe quel élément. La méthode suivante Selenium Java un exemple montre comment click() a été utilisé pour cliquer sur Mercury Bouton « Connexion » de Tours.

Cliquer sur un élément

Les éléments suivants doivent être notés lors de l’utilisation de la méthode click().

  • Il ne prend aucun paramètre/argument.
  • La méthode attend automatiquement le chargement d’une nouvelle page, le cas échéant.
  • L'élément sur lequel on clique doit être visible (la hauteur et la largeur ne doivent pas être égales à zéro).

Obtenir des commandes

Les commandes Get récupèrent diverses informations importantes sur la page/l'élément. Voici quelques commandes « get » importantes que vous devez connaître.

Commandes Utilisation
get ()

Exemple d'utilisation:

  • Il ouvre automatiquement une nouvelle fenêtre de navigateur et récupère la page que vous spécifiez entre ses parenthèses.
  • C'est la contrepartie de Selenium Commande « ouvrir » de l'IDE.
  • Le paramètre doit être un Chaîne objet.
getTitle ()

Exemple d'utilisation:

  • Ne nécessite aucun paramètre
  • Récupère le titre de la page actuelle
  • Les espaces blancs de début et de fin sont supprimés
  • Renvoie une chaîne nulle si la page n'a pas de titre
getPageSource()

Exemple d'utilisation:

  • Ne nécessite aucun paramètre
  • Renvoie le code source de la page sous forme de valeur String
getCurrentUrl()

Exemple d'utilisation:

  • Ne nécessite aucun paramètre
  • Récupère la chaîne représentant le courant URL que le navigateur examine
getText ()

Exemple d'utilisation:

  • Récupère le texte interne de l'élément que vous spécifiez

Commandes de navigation

Ces commandes vous permettent d'actualiser, d'accéder et de basculer entre différentes pages Web.

aller vers()

Exemple d'utilisation:

  • Il ouvre automatiquement une nouvelle fenêtre de navigateur et récupère la page que vous spécifiez entre ses parenthèses.
  • Cela fait exactement la même chose que le get() méthode.
naviguer().refresh()

Exemple d'utilisation:

  • Ne nécessite aucun paramètre.
  • Il actualise la page actuelle.
naviguer().retour()

Exemple d'utilisation:

  • Ne nécessite aucun paramètre
  • Vous ramène d'une page sur l'historique du navigateur.
naviguer().forward()

Exemple d'utilisation:

  • Ne nécessite aucun paramètre
  • Vous fait avancer d'une page dans l'historique du navigateur.

Fermer et quitter le navigateur Windows

Fermer()

Exemple d'utilisation:

  • Ne nécessite aucun paramètre
  • Il ferme uniquement la fenêtre du navigateur que WebDriver contrôle actuellement.
quitter()

Exemple d'utilisation:

  • Ne nécessite aucun paramètre
  • Il ferme toutes les fenêtres ouvertes par WebDriver.

Fermer et quitter le navigateur Windows

Pour illustrer clairement la différence entre close() et quit(), essayez d'exécuter le code ci-dessous. Il utilise une page Web qui ouvre automatiquement une fenêtre lors du chargement de la page et en ouvre une autre après la sortie.

Fermer et quitter le navigateur Windows

Notez que seule la fenêtre du navigateur parent a été fermée et non les deux fenêtres contextuelles.

Fermer et quitter le navigateur Windows

Mais si vous utilisez quit(), toutes les fenêtres seront fermées – pas seulement celle parent. Essayez d'exécuter le code ci-dessous et vous remarquerez que les deux fenêtres contextuelles ci-dessus seront également automatiquement fermées.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

Basculer entre les images

Pour accéder aux éléments de l'interface graphique dans un cadre, nous devons d'abord demander à WebDriver de se concentrer sur le cadre ou la fenêtre contextuelle avant de pouvoir accéder aux éléments qu'ils contiennent. Prenons par exemple la page Web https://demo.guru99.com/selenium/deprecated.html

Basculer entre les images

Cette page comporte 3 cadres dont les attributs « nom » sont indiqués ci-dessus. Nous souhaitons accéder au lien « Obsolète » entouré ci-dessus en jaune. Pour ce faire, nous devons d'abord demander à WebDriver de passer au frame « classFrame » en utilisant le "switchTo().frame()" méthode. Nous utiliserons l'attribut name du frame comme paramètre pour la partie « frame() ».

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
	  public static void main(String[] args) {
		  	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

Après avoir exécuté ce code, vous verrez que le cadre « classFrame » est redirigé vers la page « API obsolète », ce qui signifie que notre code a pu accéder avec succès au lien « Obsolète ».

Basculer entre les fenêtres contextuelles Windows

WebDriver permet d'afficher des fenêtres pop-up comme des alertes, contrairement à Selenium IDE. Pour accéder aux éléments de l'alerte (comme le message qu'elle contient), il faut utiliser le "switchTo().alert()" méthode. Dans le code ci-dessous, nous allons utiliser cette méthode pour accéder à la boîte d'alerte puis récupérer son message à l'aide du "getText()" méthode, puis fermez automatiquement la boîte d'alerte à l'aide de la "switchTo().alert().accept()" méthode.

Tout d’abord, rendez-vous sur https://output.jsbin.com/usidix/1 et cliquez manuellement sur « Go ! » bouton ici et voyez par vous-même le texte du message.

Basculer entre les fenêtres contextuelles Windows

Voyons le Selenium exemple de code pour faire cela-

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

Sur le Eclipse console, notez que le message d'alerte imprimé est :

Basculer entre les fenêtres contextuelles Windows

Attend

Il existe deux types d'attente.

  1. Attente implicite – utilisée pour définir le temps d'attente par défaut tout au long du programme
  2. Attente explicite – utilisé pour définir le temps d'attente pour une instance particulière uniquement

Attente implicite

  • C'est plus simple à coder que les attentes explicites.
  • Il est généralement déclaré dans la partie instanciation du code.
  • Vous n’aurez besoin que d’un seul package supplémentaire à importer.

Pour commencer à utiliser une attente implicite, vous devrez importer ce package dans votre code.

Attente implicite

Ensuite, dans la partie instanciation de votre code, ajoutez ceci.

Attente implicite

Attente explicite

Les attentes explicites sont effectuées à l'aide des classes WebDriverWait et ExpectedCondition. Pour ce qui suit Selenium Par exemple WebDriver, nous attendrons jusqu'à 10 secondes qu'un élément dont l'identifiant est « username » devienne visible avant de passer à la commande suivante. Voici les étapes.

Étape 1 :

Importez ces deux packages :

Attente explicite

Étape 2 :

Déclarez une variable WebDriverWait. Dans cet exemple, nous utiliserons « myWaitVar » comme nom de variable.

Attente explicite

Étape 3 :

Utilisez myWaitVar avec ExpectedConditions sur les parties où vous avez besoin qu'une attente explicite se produise. Dans ce cas, nous utiliserons une attente explicite sur le « nom d’utilisateur » (Mercury Tours HomePage) avant de saisir le texte « tutoriel » dessus.

Attente explicite

Conditions

Les méthodes suivantes sont utilisées dans les instructions conditionnelles et les instructions de lecture.ping opérations —

  • est autorisé() est utilisé lorsque vous souhaitez vérifier si un certain élément est activé ou non avant d'exécuter une commande.

Les conditions sontEnabled()

  • est affiché() est utilisé lorsque vous souhaitez vérifier si un certain élément est affiché ou non avant d'exécuter une commande.

Les conditions sont affichées ()

  • est sélectionné() est utilisé lorsque vous souhaitez vérifier si un certain case à cocher, bouton radio ou option dans une liste déroulante est sélectionné. Cela ne fonctionne pas sur les autres éléments.

Les conditions sont sélectionnées ()

Utilisation des conditions attendues

La classe ExpectedConditions offre un ensemble plus large de conditions que vous pouvez utiliser conjointement avec la méthode Until() de WebDriverWait.

Vous trouverez ci-dessous quelques-unes des méthodes ExpectedConditions les plus courantes.

  • alertIsPresent() – attend qu'une boîte d'alerte s'affiche.

Utilisation des conditions attendues alertIsPresent()

  • elementToBeClickable() – Attend qu'un élément soit visible et en même temps activé. L'échantillon Selenium Code Le code ci-dessous attendra que l'élément avec l'id="username" devienne visible et activé avant de lui attribuer une variable WebElement nommée "txtUserName".

Utilisation des conditions attendues

  • frameToBeAvailableAndSwitchToIt() – Attend que la trame donnée soit déjà disponible, puis y bascule automatiquement.

Utilisation de l'élément ExpectedConditionsToBeClickable()

Attraper les exceptions

Lors de l'utilisation de isEnabled(), isDisplayed() et isSelected(), WebDriver suppose que l'élément existe déjà sur la page. Sinon, il lancera un NoSuchElementException. Pour éviter cela, nous devons utiliser un bloc try-catch afin que le programme ne soit pas interrompu.

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

Si vous utilisez des attentes explicites, le type d'exception que vous devez intercepter est « TimeoutException ».

Attraper les exceptions

FAQ

Installez JDK, un IDE tel que Eclipse ou IntelliJ, le Selenium Java bibliothèques et le pilote de navigateur correspondant. Outils d'automatisation de la construction comme Maven ou Gradle Simplifier la gestion des dépendances.

L'IA répare automatiquement les localisateurs, génère des cas de test à partir des récits utilisateurs et identifie les tests instables. Des plateformes comme TestimMabl et Applitools intègrent l'IA pour une création, une exécution et une validation visuelle plus intelligentes.

Oui. GitHub Copilot, Cursor et JetBrains L'IA génère Java Selenium Les scripts, composés d'étapes en langage naturel, incluant les attentes, les assertions et les objets de page, réduisent considérablement le code répétitif pour les nouveaux scénarios de test.

La méthode `findElement` renvoie le premier élément WebElement correspondant ou lève une exception `NoSuchElementException`. Elle renvoie une liste de tous les éléments correspondants et une liste vide si aucun n'est trouvé, sans jamais lever d'exception.

La méthode Thread.sleep suspend l'exécution pendant une durée fixe, indépendamment de l'état de la page, ce qui ralentit les traitements rapides et peut entraîner l'échec des traitements lents. Utilisez WebDriverWait avec ExpectedConditions pour n'attendre que le temps nécessaire.

Selenium prend en charge ChromeDriver et GeckoDriver pour Firefox, EdgeDriver, SafariDriver et IEDriverServer. Selenium Dans la version 4, le gestionnaire télécharge automatiquement le pilote approprié.

Configurez les ChromeOptions ou FirefoxObjet Options avec setAcceptInsecureCerts(true). Ceci indique au navigateur d'ignorer les certificats invalides afin que la session WebDriver puisse se poursuivre.

WebDriverManager télécharge et configure automatiquement le pilote de navigateur approprié à votre version de navigateur installée, supprimant ainsi la maintenance manuelle des pilotes et réduisant le temps d'installation pour les nouveaux contributeurs.

Résumez cet article avec :