Exemple de programme Java Selenium Webdriver (exemple de code)

Exemple Java de sélénium

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: récupérer la page d'accueil de Mercury Tours
É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.

Exemple de code Selenium WebDriver

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 = "http://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. Sélénium 3.0, gecko et firefox a des problèmes de compatibilité et les configurer correctement pourrait 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. Le sélénium fonctionne à partir du box 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 followlowing deux forfaits :

  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.FirefoxTournevis – 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 Le profil sera lancé par notre programme Java. Le défaut Firefox le profil est similaire au lancement Firefox en mode sans échec (aucune extension n'est chargée).

Pour plus de commodité, nous avons enregistré l'URL de base et le titre attendu en tant que variables.

Lancement d'une session de navigateur

WebDriver's get () La méthode est utilisée pour lancer une nouvelle session de navigateur et la dirige vers l'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 structure Java if-else de base 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

Le "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 tous les navigateurs windows Tout d'abord, l'ensemble de votre programme Java 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. Actualités 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 Sélénium 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 un exemple de code Selenium qui localise un élément par son identifiant. Facebook est utilisé comme URL de base.

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 extraire le nom de balise de cet élément particulier dont l'identifiant est "email». Une fois exécuté, ce code devrait être capable d'identifier correctement le nom de la balise « input » et l'imprimera sur 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(By.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 ». Considérez le code Selenium IDE ci-dessous –

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

Dans Selenium IDE ci-dessus, l’intégralité du test a réussi. Cependant, dans le script Selenium 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 de n’importe quel élément. Le suiviwing L'exemple Java Selenium montre comment click() a été utilisé pour cliquer sur le bouton « Connexion » de Mercury Tours.

Cliquer sur un élément

Following les choses doivent être notées 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 le pendant de la commande « open » de Selenium 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 l'URL actuelle consultée par le navigateur
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
  • Ça ferme tout windows que WebDriver a ouvert.

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 pop-up windows.

Fermer et quitter le navigateur Windows

Mais si vous utilisez quit(), tout windows sera fermé – pas seulement celui du 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 http://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("http://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 autorise les pop-ups windows comme les alertes à afficher, 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 utiliserons cette méthode pour accéder à l'alerte box puis récupérez son message à l'aide du "getText()" méthode, puis fermez automatiquement l'alerte box utilisant l' "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 l'exemple de code Selenium pour ce faire.

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 le suiviwing Exemple Selenium 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 l'entrée « nom d'utilisateur » (Mercury Tours HomePage) avant de taper le texte « tutoriel » dessus.

Attente explicite

Conditions

Following les méthodes sont utilisées dans les opérations conditionnelles et en boucle -

  • 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 vérifier box, un bouton radio ou une option dans une liste déroulante box 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 une alerte box est affiché.

Utilisation des conditions attendues alertIsPresent()

  • elementToBeClickable() – Attend qu'un élément soit visible et en même temps activé. L'exemple de code Selenium ci-dessous attendra que l'élément avec id = "nom d'utilisateur" devienne visible et activé avant d'attribuer cet élément en tant que 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. Autrewise, 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

Résumé

  • Pour commencer à utiliser l'API WebDriver, vous devez importer au moins ces deux packages.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.FirefoxTournevis
  • Le get() La méthode est l'équivalent de la commande « open » de Selenium IDE.
  • La localisation des éléments dans WebDriver se fait à l'aide de l'outil findElement() méthode.
  • Le following sont les options disponibles pour localiser des éléments dans WebDriver :
  • Par.className
  • Par.cssSelector
  • Par.id
  • Par.linkText
  • De nom
  • Par.partialLinkText
  • Par.tagName
  • Par.xpath
  • Le By.cssSelector() ne collecte soutenir la "contient" fonction.
  • Vous pouvez instancier un élément à l'aide de la classe WebElement.
  • Cliquer sur un élément se fait en utilisant le click() méthode.
  • WebDriver fournit ces commandes get utiles :
  • get ()
  • getTitle ()
  • getPageSource()
  • getCurrentUrl()
  • getText ()
  • WebDriver fournit ces commandes de navigation utiles
  • naviguer().forward()
  • naviguer().retour()
  • aller vers()
  • naviguer().refresh()
  • Les méthodes close() et quit() sont utilisées pour fermer le navigateur windows. Close() est utilisé pour fermer une seule fenêtre ; alors que quit() est utilisé pour fermer tout windows associé à la fenêtre parent que l'objet WebDriver contrôlait.
  • Le switchTo().frame() et switchTo().alert() Les méthodes sont utilisées pour diriger le focus de WebDriver sur une trame ou une alerte, respectivement.
  • Implicit waits sont utilisés pour régler le temps d'attente tout au long du programme, tandis que explicit waits ne sont utilisés que sur des portions spécifiques.
  • Vous pouvez utiliser isEnabled(), isDisplayed(),isSelected() et une combinaison de WebDriverAttendez et Conditions attendues méthodes lors de la vérification de l’état d’un élément. Cependant, ils ne vérifient pas si l'élément n'existe pas.
  • Lorsque isEnabled(), isDisplayed() ou isSelected() a été appelé alors que l'élément n'existait pas, WebDriver lancera un NoSuchElementException.
  • Lorsque les méthodes WebDriverWait et ExpectedConditions étaient appelées alors que l'élément n'existait pas, WebDriver lançait un TimeoutException.

Remarque:

driver.get(): Il est utilisé pour accéder à un site Web particulier, mais il ne conserve pas l'historique du navigateur et les cookies, nous ne pouvons donc pas utiliser les boutons avant et arrière. Si nous cliquons dessus, la page ne recevra pas de calendrier.

driver.navigate(): il est utilisé pour accéder à un site Web particulier, mais il conserve l'historique du navigateur et les cookies, nous pouvons donc utiliser les boutons avant et arrière pour naviguer entre les pages pendant le codage de Testcase