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.

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 :
- org.openqa.selenium.*โ contient la classe WebDriver nรฉcessaire pour instancier un nouveau navigateur chargรฉ avec un pilote spรฉcifique
- 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
- On Eclipsedans la barre de menu de, cliquez sur Exรฉcuter > Exรฉcuter.
- Presse 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 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.
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 โ
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().
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 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.
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: |
|
| getTitle ()
Exemple d'utilisation: |
|
| getPageSource()
Exemple d'utilisation: |
|
| getCurrentUrl()
Exemple d'utilisation: |
|
| getText ()
Exemple d'utilisation: |
|
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: |
|
| naviguer().refresh()
Exemple d'utilisation: |
|
| naviguer().retour()
Exemple d'utilisation: |
|
| naviguer().forward()
Exemple d'utilisation: |
|
Fermer et quitter le navigateur Windows
| Fermer()
Exemple d'utilisation: |
|
| quitter()
Exemple d'utilisation: |
|
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 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
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.
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 :
Attend
Il existe deux types d'attente.
- Attente implicite โ utilisรฉe pour dรฉfinir le temps d'attente par dรฉfaut tout au long du programme
- 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.
Ensuite, dans la partie instanciation de votre code, ajoutez ceci.
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 :
รtape 2 :
Dรฉclarez une variable WebDriverWait. Dans cet exemple, nous utiliserons ยซ myWaitVar ยป comme nom de variable.
ร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.
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.
- est affichรฉ() est utilisรฉ lorsque vous souhaitez vรฉrifier si un certain รฉlรฉment est affichรฉ ou non avant d'exรฉcuter une commande.
- 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.
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.
- 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".
- frameToBeAvailableAndSwitchToIt() โ Attend que la trame 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 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 ยป.

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)