Selenium Pilote Web Java Exemple de 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 :
- 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).
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 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 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 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 ยป.
Rรฉsumรฉ
- Pour commencer ร utiliser l'API WebDriver, vous devez importer au moins ces deux packages.
- org.openqa.selenium.*
- org.openqa.selenium.firefox.FirefoxChauffeur
- Le
get()mรฉthode est l'รฉquivalent de Selenium Commande ยซ ouvrir ยป de l'IDE. - La localisation des รฉlรฉments dans WebDriver se fait ร l'aide de l'outil
findElement()mรฉthode. - Voici 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" .
- 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 les fenรชtres du navigateur.
Close()est utilisรฉ pour fermer une seule fenรชtre ; alors quequit()est utilisรฉ pour fermer toutes les fenรชtres associรฉes ร la fenรชtre parent que l'objet WebDriver contrรดlait. - Le
switchTo().frame()etswitchTo().alert()Les mรฉthodes sont utilisรฉes pour diriger le focus de WebDriver sur une trame ou une alerte, respectivement. Implicit waitssont utilisรฉs pour rรฉgler le temps d'attente tout au long du programme, tandis queexplicit waitsne 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.
ร noter:
driver.get():Cette mรฉthode est utilisรฉe pour naviguer vers un site Web particulier. Cependant, elle ne conserve pas l'historique du navigateur ni les cookies. Par consรฉquent, les boutons Suivant et Prรฉcรฉdent ne fonctionneront pas et cliquer dessus ne programmera pas la navigation sur la page.
driver.navigate():Cette mรฉthode est รฉgalement utilisรฉe pour naviguer vers un site Web particulier, mais elle conserve l'historique du navigateur et les cookies. Cela permet d'utiliser les boutons avant et arriรจre pour la navigation entre les pages lors du codage d'un cas de test.

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

.png)


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

.png)
.png)
.png)