Premier script Selenium Webdriver: exemple de code JAVA

Table des matières:

Anonim

En utilisant la classe Java "myclass" que nous avons créée dans le tutoriel précédent, essayons de créer un script WebDriver qui:

  1. chercher la page d'accueil de Mercury Tours
  2. vérifier son titre
  3. imprimer le résultat de la comparaison
  4. fermez-le avant de terminer tout le programme.

Code WebDriver

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

Remarque: à partir de Firefox 35, vous devez utiliser le pilote gecko créé par Mozilla pour utiliser le pilote Web. Selenium 3.0, gecko et firefox ont des problèmes de compatibilité et les configurer correctement pourrait devenir une tâche ardue. Si le code ne fonctionne pas, passez à la version 47 ou inférieure de Firefox. Vous pouvez également exécuter vos scripts sur Chrome. Selenium est prêt à l'emploi pour Chrome. Il vous suffit de changer 3 lignes de code pour que votre script fonctionne avec Chrome ou Firefox

package newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// commente la ligne ci-dessus et décommente la ligne ci-dessous pour utiliser Chrome// import org.openqa.selenium.chrome.ChromeDriver;classe publique PG1 {public static void main (String [] args) {// déclaration et instanciation d'objets / variablesSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pilote WebDriver = nouveau FirefoxDriver ();// commentez les 2 lignes ci-dessus et supprimez les commentaires en dessous de 2 lignes pour utiliser Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// Pilote WebDriver = nouveau ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String expectedTitle = "Bienvenue: Mercury Tours";String actualTitle = "";// lance Fire fox et dirige-le vers l'URL de basedriver.get (baseUrl);// récupère la valeur réelle du titreactualTitle = driver.getTitle ();/ ** comparez le titre réel de la page avec celui attendu et imprimez* le résultat comme "Réussi" ou "Échec"* /if (actualTitle.contentEquals (attenduTitle)) {System.out.println ("Test réussi!");} autre {System.out.println ("Le test a échoué");}// fermer Renard de feudriver.close ();}}

Expliquer le code

Importer des 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.FirefoxDriver - contient la classe FirefoxDriver nécessaire pour instancier un pilote spécifique à Firefox 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 plus de packages.

Instancier des objets et des variables

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

Une classe FirefoxDriver sans paramètres signifie que le profil Firefox par défaut sera lancé par notre programme Java. Le profil Firefox par défaut est similaire au lancement de 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

La méthode get () de WebDriver est utilisée pour lancer une nouvelle session de navigateur et la dirige vers l'URL que vous spécifiez comme paramètre.

Obtenir le titre réel de la page

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

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.

Terminer une session de navigateur

La méthode " close () " est utilisée pour fermer la fenêtre du navigateur.

Mettre fin à l'ensemble du programme

Si vous utilisez cette commande sans d'abord fermer toutes les fenêtres du navigateur, tout votre programme Java se terminera en laissant la fenêtre du navigateur ouverte.

Exécution du test

Il existe deux façons d'exécuter du code dans Eclipse IDE.

  1. Dans la barre de menus d'Eclipse, cliquez sur Exécuter> Exécuter.
  2. Appuyez sur Ctrl + F11 pour exécuter l'intégralité du code.

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

Localisation des éléments de l'interface graphique

La localisation des éléments dans WebDriver s'effectue à l'aide de la méthode " findElement (By. Locator ()) ". La partie «localisateur» du code est la même que tous les localisateurs décrits précédemment dans les chapitres Selenium IDE de ces didacticiels. En fait, il est recommandé de localiser les éléments de l'interface graphique à l'aide de l'EDI et, une fois identifié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;classe publique PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pilote WebDriver = nouveau 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é la méthode getTagName () pour extraire le nom de balise de cet élément particulier dont l'id est "email". Lorsqu'il est exécuté, ce code devrait être capable d'identifier correctement le nom de la balise «input» et l'imprimera sur la fenêtre de la console d'Eclipse.

Résumé de la localisation des éléments

Variation Description Échantillon
Par. nom du cours trouve des éléments en fonction de la valeur de l'attribut "class" findElement (By.className ("someClassName"))
Par. cssSelector trouve des éléments en fonction du moteur de sélection CSS sous-jacent du pilote findElement (By.cssSelector ("input # email"))
Par. identifiant localise les éléments par la valeur de leur attribut "id" findElement (By.id ("someId"))
Par. linkText trouve un élément de lien par le texte exact qu'il affiche findElement (By.linkText ("ENREGISTREMENT"))
Par. Nom localise les éléments par la valeur de l'attribut "nom" findElement (By.name ("someName"))
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 IDE Selenium ci-dessous -

Dans Selenium IDE ci-dessus, tout le 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 ().

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. *".

Cliquer sur un élément

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

Les choses suivantes 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 qu'une nouvelle page se charge, 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 avec lesquelles vous devez être familier.

Commandes Usage
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 objet String .
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 coupé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 que le navigateur regarde
getText () Exemple d'utilisation:
  • Récupère le texte intérieur de l'élément que vous spécifiez

Naviguer dans les commandes

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

Browse (). to () 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.
  • Elle fait exactement la même chose que la méthode get ().
naviguer (). refresh () Exemple d'utilisation:
  • Ne nécessite aucun paramètre.
  • Il actualise la page actuelle.
naviguer (). back () 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 sur l'historique du navigateur.

Fermeture et fermeture des fenêtres du navigateur

close () Exemple d'utilisation:
  • Ne nécessite aucun paramètre
  • Il ferme uniquement la fenêtre du navigateur que WebDriver contrôle actuellement .
quit () Exemple d'utilisation:
  • Ne nécessite aucun paramètre
  • Il ferme toutes les fenêtres ouvertes par WebDriver.

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.

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

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

package newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;classe publique PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pilote WebDriver = nouveau FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // en utilisant QUIT toutes les fenêtres se fermeront}}

Basculer entre les cadres

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

Cette page comporte 3 cadres dont les attributs "nom" sont indiqués ci-dessus. Nous souhaitons accéder au lien "obsolète" entouré de jaune ci-dessus. Pour ce faire, nous devons d'abord demander à WebDriver de passer au cadre "classFrame" en utilisant la méthode "switchTo (). Frame ()" . 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;classe publique PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pilote WebDriver = nouveau FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Obsolète")). 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 réussi à accéder au lien «obsolète».

Basculer entre les fenêtres contextuelles

WebDriver permet d'afficher des fenêtres contextuelles telles que des alertes, contrairement à Selenium IDE. Pour accéder aux éléments de l'alerte (comme le message qu'elle contient), nous devons utiliser la méthode "switchTo (). Alert ()" . Dans le code ci-dessous, nous utiliserons cette méthode pour accéder à la boîte d'alerte puis récupérer son message en utilisant la méthode "getText ()" , puis fermer automatiquement la boîte d'alerte en utilisant le "switchTo (). Alert (). Accept () " méthode.

Tout d'abord, rendez-vous sur http://jsbin.com/usidix/1 et cliquez manuellement sur "Go!" bouton là et voyez par vous-même le texte du message.

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");Pilote WebDriver = nouveau 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 la console Eclipse, notez que le message d'alerte imprimé est:

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ée pour définir le temps d'attente pour une instance particulière uniquement

Attente implicite

  • Il est plus simple de 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 devez importer ce package dans votre code.

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

Attente explicite

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

Étape 1

Importez ces deux packages:

Étape 2

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

Étape 3

Utilisez myWaitVar avec ExpectedConditions sur les parties où vous avez besoin que l'attente explicite se produise. Dans ce cas, nous utiliserons une attente explicite sur l'entrée "username" (Mercury Tours HomePage) avant de taper le texte "tutorial" dessus.

Conditions

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

  • isEnabled () est utilisé lorsque vous souhaitez vérifier si un certain élément est activé ou non avant d'exécuter une commande.
  • isDisplayed () est utilisé lorsque vous souhaitez vérifier si un certain élément est affiché ou non avant d'exécuter une commande.
  • isSelected () est utilisé lorsque vous souhaitez vérifier si une certaine case à cocher, bouton radio ou option dans une liste déroulante est sélectionnée. Cela ne fonctionne pas sur d'autres éléments.

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.

Voici quelques-unes des méthodes ExpectedConditions les plus courantes.

  • alertIsPresent () - attend jusqu'à ce qu'une boîte d'alerte s'affiche.
  • elementToBeClickable () - Attend jusqu'à ce 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 devienne visible et activé avant d'attribuer cet élément en tant que variable WebElement nommée "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - Attend jusqu'à ce que l'image donnée soit déjà disponible, puis y bascule automatiquement.

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 lèvera une 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"));essayer{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("tutoriel");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

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

Résumé

  • Pour commencer à utiliser l'API WebDriver, vous devez importer au moins ces deux packages.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • La méthode get () est l'équivalent de la commande "open" de Selenium IDE.
  • La localisation des éléments dans WebDriver s'effectue à l'aide de la méthode findElement () .
  • Voici les options disponibles pour localiser des éléments dans WebDriver:
  • Par. nom du cours
  • Par. cssSelector
  • Par. identifiant
  • Par. linkText
  • Par. Nom
  • Par. partialLinkText
  • Par. tagName
  • Par. xpath
  • Le By.cssSelector () ne prend pas en charge la fonctionnalité «contient» .
  • Vous pouvez instancier un élément à l'aide de la classe WebElement .
  • Cliquer sur un élément se fait en utilisant la méthode click () .
  • WebDriver fournit ces commandes get utiles :
  • obtenir()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver fournit ces commandes de navigation utiles
  • naviguer (). avancer ()
  • naviguer (). retour ()
  • aller vers()
  • naviguer (). refresh ()
  • Les méthodes close () et quit () sont utilisées pour fermer les fenêtres du navigateur. Close () est utilisé pour fermer une seule fenêtre; while quit () est utilisé pour fermer toutes les fenêtres associées à la fenêtre parente que l'objet WebDriver contrôlait.
  • Les méthodes switchTo (). Frame () et switchTo (). Alert () sont utilisées pour diriger le focus de WebDriver sur un cadre ou une alerte, respectivement.
  • Les attentes implicites sont utilisées pour définir le temps d'attente tout au long du programme, tandis que les attentes explicites ne sont utilisées que sur des portions spécifiques.
  • Vous pouvez utiliser les méthodes isEnabled (), isDisplayed (), isSelected () et une combinaison des méthodes WebDriverWait et ExpectedConditions 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 lèvera une NoSuchElementException .
  • Lorsque les méthodes WebDriverWait et ExpectedConditions étaient appelées alors que l'élément n'existait pas, WebDriver lançait une exception TimeoutException .

Noter:

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

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