Vous êtes sur la page 1sur 53

SELENIUM

1. Qu'est-ce que le selenium et de quoi est-il composé ?


• Selenium est une suite d'outils pour les tests Web automatisés. Cela est composé de;
o Selenium IDE (environnement de développement intégré); un plugin Firefox
qui fonctionne pour l'enregistrement et la lecture.
o Selenium RC (Remote Control ) (1.0); est un outil de test et est utilisé pour
travailler sur JS pour automatiser l'application Web. (2004)
o WebDriver (2.0); est un framework d'automatisation Web et vous permet
d'exécuter vos tests dans différents navigateurs. (2011) o
o Selenium Grid; permet aux tests de s'exécuter en parallèle sur plusieurs
machines.

2. Quels sont les avantages du sélénium ?


o Selenium est open source et gratuit à utiliser sans aucun coût de licence
o Il prend en charge plusieurs langages comme Java, Ruby, Python, C # ...
o Il prend en charge les tests multi-navigateurs
o Il a une bonne quantité de ressources et aide la communauté
o Il prend en charge de nombreux systèmes d'exploitation comme Windows,
Mac, Linux ...
o Interagissez avec l'application Web
3. Quels sont les inconvénients du sélénium ?
o Selenium prend uniquement en charge les applications Web, ne prend pas en
charge les applications Windows
o Pas d'outil de reporting intégré, il a besoin d'outils tiers pour l'activité de
génération de rapports
o Impossible de travailler avec des graphiques, des captchas, des codes-barres et
des formes
o Il ne prend pas en charge la fonction de téléchargement de fichiers.
o Difficile à maîtriser, nécessite des connaissances de niveau développeur
o Difficile d’écrire de bons localisateurs
o Difficile à synchroniser
4. Quelles sont les limites du sélénium ?
o Nous ne pouvons pas tester l'application de bureau
1
o Nous ne pouvons pas tester les services Web
o Nous devons utiliser des bibliothèques et des outils externes pour effectuer des
tâches telles que le test du framework (TestNG, JUnit), la lecture de fichiers
externes (Apache POI pour Excel)
o L'automatisation du Captcha n'est pas possible avec Selenium
o Il ne prend pas en charge la fonction de téléchargement de fichiers.
5. Quels types de tests automatisez-vous avec Selenium ?
o tests fonctionnels (positifs / négatifs, UI)
o tests de fumée
o tests de régression
o tests d'intégration
o tests de bout en bout
o piloté par les données
6. Qu'est-ce que nous ne faisons pas avec le sélénium ?
o Performance, charge, tests de résistance, tests manuels ad hoc, (Ces tests sont réalisés
par des experts formés à ces outils)
o Test de base de données pure (si nous testons uniquement la base de données elle-
même),
o Tests unitaires ..., tests basés sur l'aspect et la convivialité (couleur, formes, etc.),
o tests statiques
7. Que contient l'ensemble d'outils Selenium ?
o Selenium IDE -> mis en œuvre en tant qu'extension Chrome et Firefox, et vous permet
d'enregistrer, de modifier et de déboguer des tests.
o Selenium RC -> à pour écrire des tests d'interface utilisateur d'applications Web
automatisés dans n'importe quel langage de programmation
o Selenium WebDriver -> -à exécuter vos tests sur différents navigateurs
o Selenium GRID -> à run vos tests sur différentes machines contre différents
navigateurs en parallèle.

8. question pour les versions

2
9. Implicit Wait vs Explicit Wait?

o Implicit wait est une attente qui attend pendant un temps spécifié tout en localisant un
élément avant de lancer «NoSuchElementException». Comme par défaut, le sélénium
essaie de trouver des éléments immédiatement sans aucune attente. Alors c'est bon
pour utiliser l'attente implicite. Cette attente s'appliquait à tous les éléments de
l'instance de pilote actuelle.
o Explicit wait est une attente appliquée à un élément Web particulier jusqu'à ce que la
condition ExpectedCondition spécifiée soit remplie.
o Explicit wait est simplement; si la condition est remplie avant l'expiration du délai, il
passera à l'étape suivante, si la condition n'est pas remplie dans le délai d'expiration,
lancez l'exception "No Such Element".
o Attente explicite parfois, nous devons attendre un certain événement / condition tel
que l'élément est visible, cliquable, activé

driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);

webDriverWait wait = new WebDriverWait (driver, 5);

wait.until (ExpectedConditions.visibilityOf(element);

10. Qu'est-ce que fluentWait ?


o Supposons que vous ayez un élément qui apparaît parfois en seulement 1 seconde et
quelques minutes à apparaître. Dans ce cas, il est préférable d'utiliser une attente
fluide, car cela essaiera de trouver l'élément encore et encore jusqu'à ce qu'il le trouve
ou jusqu'à ce que la minuterie finale s'épuise. Un exemple est AJAX ou JQuery
o Sous-type d’attente explicite mais vous pouvez remplacer les conditions

Wait<WebDriver>wait=new
FluentWait<Webdriver>(driver).withTimout(5,timeUnit.seconds).pollingEvery(100,ti
meunit. milliseconds).ignoring(NoSuchElementException.class);

11. Quelles sont les différentes manières de localiser un élément dans Selenium ?
o Selenium Locators à Id & name

3
o In selenium locator is a means of finding an element in the html :
o Id, name, className, xpath, css, linkText, partialLinkText, tagName
12. Pourquoi je ne trouve pas d'élément ?
o Localisateur modifié
o Il y a une iframe
o Temps d'attente :: la page se charge lentement ou l'élément est dynamique :: locator
o La page n'est pas complètement chargée / ouverte
o La page change et cet élément n’existe plus
13. Comment mettre en évidence un élément ?
o Selenium WebDriver n'a pas d'action de mise en évidence.
o Mais nous pouvons utiliser JavaScript pour le faire

JavascriptExecutor js = ((JavascriptExecutor) driver);

String bgcolor = element.getCssValue("backgroundColor");

for(inti=0;i< 10;i++){

changeColor("rgb(0,200,0)",

element,driver);//1

changeColor(bgcolor,

element,driver);//2

14. Qu'est-ce que Xpath ?


o Xpath est utilisé pour trouver l'emplacement de n'importe quel élément sur une page
Web à l'aide de la structure html.
o Nous pourrions naviguer parmi les éléments et les attributs d'un document XML pour
localiser des éléments Web tels qu'une zone de texte.
o Bouton , case à cocher, Image ext ... dans la page Web

15. Absolute (/) and Relative (//) Xpath?

o Syntax à //tagname[@attribute=`value`]

4
o Absolute xpath commence par slash simple (/), à partir de l'élément racine et
jusqu'à l'élément.
o • xpath relatif commence par double slash (//), commençant la sélection
correspondante n'importe où dans le document.

16. Comment avez-vous géré les éléments dynamiques?


o Trouvez la partie statique de l'id et écrivez un localisateur (xpath ou css) -> Et puis
utilisez Startswith, contains, EndsWith

o contains( ) -> //*[contains(@name=`btn`)]

o startwith( ) -> //label[startwith(@id, `message`)]

o text( ) -> //td[text() = `usedId`]

o or & and -> //input[@type = `submit` AND @name = `login`]

17. Comment tester une page Web dynamique?

o Il n'existe pas de solution universelle à ce problème. Nous devons très bien


comprendre l'application

 Utilisez des attentes explicites si nécessaire.

 Utiliser des xpaths et des localisateurs css personnalisé

o Xpath : contient, commence par, se termine par, contient le texte.

o En découvrant une relation de roue avec un autre élément stable en utilisant


des relations parent, enfant, fratrie

18. Comment tester une table dynamique?

o Utilisez des xpaths et des localisateurs CSS personnalisés


o Xpath: contient, commence par, se termine par, contient du texte.
o En trouvant l'élément par rapport à un autre élément stable en utilisant les relations
parent, enfant, fratrie

5
o J'ai des méthodes utilitaires qui fonctionnent avec la table. J'ai une méthode qui prend
un élément Web de table et renvoie tous les noms de colonne. J'ai une méthode qui
prend une table, un nombre et renvoie toutes les données de cette ligne.

19. Comment peut-on se passer d'un élément parental en utilisant xpath?

o En utilisant l'expression (..) dans xpath, nous pouvons passer à l'élément parent

20. Différence entre les commandesclose () etquit ()?

o driver.close () -> utilisé pour fermer le navigateur actuel


o driver.quit () -> utilisé pour fermer toutes les instances du navigateur

21. Comment peut-on déplacer un élément enfant en utilisant xpath?

o Il existe deux manières :


• En utilisant des crochets avec position d'index

Par exemple : div [2] trouvera le deuxième élément div

• En utilisant la méthode position ()

Par exemple : div [position () = 2] trouvera le deuxième élément div

22. Différence entre xpath et css selector ?

o avec xpath, nous pouvons rechercher des éléments vers l'arrière ou vers l'avant ...

tandis que le css ne fonctionne que vers l'avant

o Xpath peut fonctionner avec du texte, css ne peut pas fonctionner


o Xpath a plus de combinaisons et peut rechercher par index

css ne peut pas rechercher par index, mais css fonctionne plus rapidement que xpath.

23. Qu'est-ce que Framework ?

6
o Dans l'automatisation des tests, le framework est le modèle de l'automatisation des
tests.
o Il comprend vos structures de dossiers, où enregistrer votre bibliothèque de fonctions,
les résultats des tests, les données de test, les ressources.
o C'est essentiel car lorsque vous travaillez sur un projet d'automatisation, tout le monde
aura une ligne directrice à suivre et notre le script sera plus facile à maintenir.

24. Parlez-vous du rapport HTML pendant l'interview ?

o J'utilise plusieurs méthodes de reporting dans mon framework, le script du pilote écrit
réussite / échec dans la feuille Excel des cas de test,
o L'objet utilitaire Reporter écrit dans le rapport UFT, j'ai également développé un
moteur de rapport HTML personnalisé.
o Il envoie du code HTML au Bloc-notes et crée un joli document de rapport HTML que
les personnes non techniques peuvent facilement comprendre et utiliser.

25. How to maximize a web page?

o driver.manage().window().maximize();

26. Dans certains cas, maximisez () ne fonctionnera pas> comment va-t-il se passer ?

o Actions ou changement de version.


o ChromeOptions options = new ChromeOptions();
o options.addArguments("startmaximized");

27. Quelle est la classe clé de Selenium ?

o Nous donne la possibilité d'appuyer sur les touches du clavier


o Clé.ENTER
o DOIT ÊTRE PASSÉ À LA méthode SendKeys ()
o Ex; .sendkeys («chargeur» + keys.ENTER)

28. Et s'il y avait une fenêtre contextuelle dynamique(popup) qui apparaît au hasard

o Utilisez try / catch avec alerte

7
29. What is Thread.sleep ()?

o Ralentit le sélénium pour rattraper


o Lève une exception et doit donc la gérer ou la lancer

30. Qu'est-ce que Selenium Framework ?

o Il s'agit d'une structure de code qui facilite la maintenance du code, la lisibilité du code
et la réutilisation du code.
o Il existe principalement 3 types de frameworks créés par Selenium WebDriver pour
automatiser les cas de test:

Framework basé sur les données

• C'est l'un des frameworks d'automatisation les plus populaires du marché


• Toutes nos données de test sont générées à partir de certains fichiers externes;

 Excel
 ou aperçu du scénario dans le fichier de fonctionnalités
 TestNG data Provider

o Selenium WebDriver est un excellent outil pour automatiser les applications Web.
Mais il ne prend pas en charge les opérations de lecture et d'écriture sur les fichiers
Excel. Par conséquent, nous utilisons des API tierces comme Apache POI

Framework basé sur les mots clés

 Le test piloté par mot-clé est une technique de script qui utilise des fichiers de
données pour contenir les mots-clés liés à l'application testée.
 Les mots-clés sont écrits dans certains fichiers externes comme le fichier Excel et
le code Java appellera ce fichier et exécutera des cas de test.

Framework hybride

 Une combinaison du DDF et du KDF est communément appelée HDF.


 Les données de test et l'action de test sont conservées dans des fichiers externes.

8
31. Comment avez-vous utilisé des méthodes surchargées dans Selenium ?

o Pour affirmer si deux valeurs sont égales, j'utiliseàAssert.assertEquals (réel, attendu)


de TestNG
o Vous pouvez mettre dans les paramètres String, Objects, int, valeurs booléennes

32. Pourquoi nous obtenons NoSuchElementException?

o Vérifiez si le localisateur est correct


o Vérifiez si le timing est correct
o Vérifiez si l'élément est caché dans une iframe

33. Comment gérez-vous les alertes js?

o Si l'alerte sur le navigateur provient de JavaScript, nous utilisons la classe Alert.

Alert alert = driver.switchTo.alert();

alert.accept();
alert.dismiss();
alert.sendKeys();

alert.getText()

34. Comment gérer les cadres multiples?

o S'il y a 4 cadres, vous devez passer par chacun d'eux consécutivement pour atteindre
certains cadres. Impossible de passer à la troisième image à partir de la première
image.

35. Quelle est la différence entre driver.get () et driver.navigateto () ?

• driver.get () -> Pour ouvrir une URL et il attendra que la page entière soit chargée

• driver.navigateto () -> Pour naviguer vers une URL et il n'attendra pas que la page
entière soit chargée

36. Comment gérer les cadres en Selenium?

9
o Cadres utilisés pour intégrer une page html dans une autre
o Steps
• Localisez l'iframe
• Passer à un autre iframe avec driver.switchTo (). frame ();
• .frame () -> prendre chaîne, Integer, webElement, nom ou id directement comme
paramètre

• driver.switchTo().frame(webElement); driver.switchTo().frame();
• driver.switchTo().frame(webElement); driver.switchTo().frame();

 Maintenant que vous êtes dans la deuxième image, si vous voulez trouver un
élément en dehors de la deuxième image (sur laquelle vous êtes actuellement)
lance NosuchElementException
 Si vous devez revenir à l’image précédente

 driver.switchTo (). parentFrame () à Monte d'un niveau


 driver.switchTo (). defaultcontent () à va tout en haut

 Peut changer en utilisant count

 driver.switchTo (0) àCompte tout ce qui n'est pas le cadre par


défaut

Ces méthodes peuvent vous donner des résultats différents en fonction du


navigateur que vous utilisez

37. Comment gérez-vous les fenêtres contextuelles du navigateur ?

o void dismis () -> clic sur le bouton «Annuler» dès que la fenêtre pop-up apparaît.
o void accept () -> clic sur le bouton «Ok» dès que la fenêtre pop-up apparaît.
o String getText () -> renvoie le texte affiché sur la boîte d'alerte.
o void sendKeys (String stringToSend) -> entre le modèle de chaîne spécifié dans la
boîte d'alerte.

38. Comment gérez-vous les fenêtres / popups?

10
o Selenium ne prend pas en charge les applications Windows, c'est un outil de test
d'automatisation qui prend uniquement en charge les tests d'applications Web.
o Nous pourrions gérer les fenêtres contextuelles dans Selenium en utilisant des outils
tiers tels que AutoIT, classe Robot
o driver.getWindowHandle (); Cela gérera la fenêtre actuelle qui l'identifie de manière
unique dans cette instance de pilote.
o driver.getWindowHandles (); Pour gérer toutes les fenêtres ouvertes

39. Comment gérer le navigateur sans tête

o Navigateur sans tête: navigateur qui ne s'ouvre pas, il s'exécute en tant que service /
programme d'arrière-plan.
o Exemple: htmlunitdriver de sélénium

• WebDriver = new htmlunitdriver ()


• Pas très stable

o Phantonjsbrowser

• Plus stable
• navigateur = nouveau phantomjsbrowser ()

40. findElement vs findElements?

o FindElement> cette méthode retourne le premier WebElement!

• donne une exception si l'élément n'est pas trouvé

o FindElements> returns List <WebElement>;

• ne donne pas d'exception si l'élément non trouvé comme liste de résultats a des
valeurs nulles

41. Comment gérer plusieurs fenêtres / onglets?

o Le sélénium reste sur une fenêtre

11
o Si vous ouvrez une fenêtre et que 5 onglets se sont ouverts, le sélénium est concentré
sur la première fenêtre
o Si vous êtes dans une nouvelle fenêtre et que vous dites au sélénium d’imprimer un
élément sur la fenêtre par défaut, cela fonctionnera toujours l’utilisateur se concentre
sur la nouvelle fenêtre

o Doit passer à une nouvelle fenêtre

• Utilisez windowHandle ()
• Driver.getWindowHandle ()

 Chaque fois que Selenium ouvre un navigateur, il va donner un


identifiant d'index pour la page appelée Handles
 Renvoie lehandle / idofcurrentpage (asastring)

 driver.switchTo (). window (handle de chaîne)

 driver.getWindowHandles () pour plusieurs fenêtres


 Renvoie un ensemble de poignées de fenêtre

• Changer en utilisant les titres


• for(string handle: driver.getWindowHandles()){
o driver.switchTo().Window(handle)
• If(driver.getTitle().equals(targetTitle){
• break;
o }
• }

42. How to find all links in the page?

o List<WebElement> list = driver.findElements(By.tagName(“a”));

43. Différence entre la méthode isDisplayed (), isEnabled (). And is Selected () method in
selenium WebDriver?

12
o isDispalyed () -> pour vérifier la présence d'un élément Web dans la page Web. Si
trouvé à vrai, Si non trouvé à faux
o isDisplayed () -> vérifier la présence de toutes sortes d'éléments Web disponibles
o isEnabled () -> pour vérifier si l'élément Web est activé ou désactivé dans la page
Web.
o isEnabled () -> est principalement utilisé avec les boutons
o isSelected () -> vérifie si l'élément Web est sélectionné ou non
o isSelected () -> utilisé avec des boutons radio, des listes déroulantes et des cases à
cocher.

44. How to Drag And Drop?

o Actions action = new Actions(driver);


action.clickAndHold(driver.findElement(By.id("item"))) .moveToElement(driver.find
Element(By.id("destination")))
o .release().build()
o .perform();

45. ForScrolldown:

o WebDriver driver = new ChromeDriver(); JavascriptExecutor jse =


(JavascriptExecutor)driver; jse.executeScript("window.scrollBy(0,250)", "");
o • OR, we can do as follows:
o jse.executeScript("scroll(0, 250);");

46. For Scroll up:

o jse.executeScript("window.scrollBy(0,-250)", ""); OR, jse.executeScript("scroll(0,-


250);");

47. Comment gérer les cookies?

o Dans Selenium Webdriver, nous pouvons interroger et interagir avec les cookies avec
la méthode intégrée ci-dessous:

13
o driver.manage().getCookies(); // Return The List of all Cookies
driver.manage().getCookieNamed(arg0); //Return specific cookie according to name
driver.manage().addCookie(arg0); //Create and add the cookie
driver.manage().deleteCookie(arg0); // Delete specific cookie
driver.manage().deleteCookieNamed(arg0); // Delete specific cookie according Name
driver.manage().deleteAllCookies(); // Delete all cookies

48. Pourquoi devons-nous gérer les cookies?

o Chaque cookie est associé à un nom, une valeur, un domaine, un chemin, une date
d'expiration et l'état de sa sécurité ou non. Afin de valider un client, un serveur analyse
toutes ces valeurs dans un cookie.
o Lors du test d'une application Web à l'aide du pilote Web sélénium, il se peut que nous
devions créer, mettre à jour ou supprimer un cookie.
o Par exemple, lors de l'automatisation de l'application d'achat en ligne, nous devons
souvent automatiser des scénarios de test tels que passer une commande,
o Afficher le panier, les informations de paiement, la confirmation de commande, etc.
o Si les cookies ne sont pas stockés, nous devrons effectuer une action de connexion à
chaque fois avant d'exécuter les scénarios de test énumérés ci-dessus.
o Cela augmentera votre effort de codage et votre temps d'exécution.
o La solution consiste à stocker les cookies dans un fichier. Plus tard, récupérez les
valeurs de cookie de ce fichier et ajoutez-y votre navigateur actuel
o session. Par conséquent, vous pouvez ignorer les étapes de connexion dans chaque
scénario de test car votre session de pilote contient ces informations.
o Le serveur d'applications traite désormais votre session de navigateur comme
authentifiée et vous amène directement à l'URL demandée.

49. Stocker les cookies des informations sur les cookies

public class cookieRead extends BasePage{ public static void main(String[] args){

driver.get("http://demo.guru99.com/test/cookie/selenium_aut.php");

// Input Email id and Password If you are already Register

driver.findElement(By.name("username")).sendKeys("abc123");
driver.findElement(By.name("password")).sendKeys("123xyz");
driver.findElement(By.name("submit")).click();

14
File file = new File("Cookies.data"); // create file to store cookies

try {
file.delete(); // Delete old file if exists file.createNewFile();
FileWriter fileWrite = new FileWriter(file); BufferedWriter Bwrite = new
BufferedWriter(fileWrite);

// loop for getting the cookie information

for(Cookie ck : driver.manage().getCookies()){
Bwrite.write((ck.getName() +";"+ ck.getValue() +";"+ ck.getDomain() +";"+ ck.getPath()

+ ";" + ck.getExpiry() +";"+ ck.isSecure()));

Bwrite.newLine(); }

Bwrite.flush(); Bwrite.close(); fileWrite.close(); } catch(Exception ex) {

ex.printStackTrace(); }

}}

50. Utilisez les cookies stockés pour vous connecter aux informations

public static void main(String[] args){

try{

File file = new File("Cookies.data");


FileReader fileReader = new FileReader(file);

BufferedReader Buffreader = new BufferedReader(fileReader);

String strline;

while((strline=Buffreader.readLine())!=null){

StringTokenizer token = new StringTokenizer(strline,";");


while(token.hasMoreTokens()){

String name = token.nextToken();

String value = token.nextToken();

15
String domain = token.nextToken();

String path = token.nextToken(); Date expiry = null;

String val;

if(!(val=token.nextToken()).equals("null")) {

expiry = new Date(val);

Boolean isSecure = new Boolean(token.nextToken()).booleanValue();


Cookie ck = new Cookie(name,value,domain,path,expiry,isSecure);
System.out.println(ck);
driver.manage().addCookie(ck); // This will add the stored cookie to
current session

}catch(Exception ex){ ex.printStackTrace();

} driver.get("http://demo.guru99.com/test/cookie/selenium_aut.php");

SORTIE: Vous êtes directement redirigé vers l'écran de réussite de la connexion sans
entrer l'ID utilisateur et le mot de passe d'entrée

REMARQUE: Utilisez l'actualisation matérielle au cas où vous voyez la page de


connexion après l'exécution du script ci-dessus.

51. Utilisez-vous JavaScriptExecutor?

o Cela m'aide à écrire mon propre JavaScript. JS a bien plus de contrôle que le sélénium.
o nous pouvons envoyer des commandes JS au navigateur en utilisant cette classe

JavaScriptExecutor jsExecutor = pilote (JavaScriptExecutor);

• executeScript (); exécute la commande


• À l'intérieur du paramètre est l'endroit où vous mettez le code JS

o jsExecutor.executeScript ("alert (" ATTENTION: Ceci est un message inutile ");" ->
Ce code affichera une fenêtre contextuelle JS

16
o Vous pouvez également mettre 2 paramètres soit .executeScript («js code», élément);

• Utilisé pour le défilement (le sélénium n'est pas bon avec le défilement, vous
pouvez dire qu'un défi est lorsque je travaillais sur la page des conditions
générales, où vous devez lire la page avant de cliquer sur continuer.
• Quand j'ai essayé d'utiliser le sélénium et la classe d'actions, cela ne fonctionnait
pas, j'ai donc utilisé javaexecutor) et en cliquant sur un élément;

52. How to check if element is present/visible/enable/and to check text present?

o To check Element Present:

if(driver.findElements(By.xpath("value")).size() != 0){

System.out.println("Element is Present");

}else{
System.out.println("Element is Absent");

o Or

if(driver.findElement(By.xpath("value"))!= null){

System.out.println("Element is Present");

}else{
System.out.println("Element is Absent");

o To check Visible:

if(driver.findElement(By.cssSelector("a > font")).isDisplayed())


{ System.out.println("Element is Visible");

}else{
System.out.println("Element is InVisible"); }

o To check Enable:

if(driver.findElement(By.cssSelector("a > font")).isEnabled()){

17
System.out.println("Element is Enable");

}else{
System.out.println("Element is Disabled"); }

o To check text present

if(driver.getPageSource().contains("Text to check")){

System.out.println("Text is present");

}else{
System.out.println("Text is absent"); }

53. Comment vérifier les multiples valeurs sélectionnées dans la liste


déroulante(dropdown) ?

o Select carsList = new Select (el)


o carList.getSelectedOptions (): // renvoie les options sélectionnées une liste (List
<webelement>)
o pour chacun: carList.getSelectedOptions ()

54. Quelle classe d'action ?

o La classe Actions nous permet d'effectuer des opérations avancées sur la souris et le
clavier:
o Contrôlez la souris

o Classe qui fournit des méthodes pour les interactions utilisateur avancées

• Hovering
• Scroll
• Double click
• Drag and drop
• Right click
• mix/match operators

18
o Actions action = nouvelles actions (pilote)
o Méthodes d’action

• Double-cliquez
• Glisser-déposer
• Clic droit
• opérateurs mix / match
• cliquez sur ()
• effectuer ()
• tenir ()
• keydown () build ()
• moveToElement (élément)
• dragAndDrop (source, cible) .perform ()
• sendKeys () différent de celui que nous utilisons habituellement

 Faisons en sorte d’envoyer les touches à l’opération des


différents éléments
 L'envoi régulier de clés qui provient de la création de notre site
entraînera une exception pour quelque chose qui n'est pas en
entrée de texte. § Thelongwayis;
 actions.moveToElement (source) .clickAndHold ().
moveToElement (cible) .release (). perform ();

o Les actions ne fonctionneront que si perform () est utilisé


o Si vous chaînez des méthodes, vous devez utiliser build () avant perform ()

55. Quelle est la syntaxe de l'action de double-clic?

o Pour effectuer des actions sur un élément Web à l'aide de la classe actions, nous
devons d'abord localiser l'élément:
o WebElement el = driver.findELement
Actions actions = new Actions (driver).perform actions.doubleClick(el).perform()
actions.moveTo(el).perform actions.doubleClick.perform
actions.moveTo(el).doubleClick().build.perform()

19
56. Téléchargement et téléchargement des fichiers

o Download

• Selenium lui-même ne peut pas vérifier les téléchargements de fichiers, peut


cliquer sur le lien de téléchargement mais ne peut pas sortir du navigateur et ouvrir
le fichier téléchargé
• D'autres outils doivent être utilisés pour ce robot et AutoIT

o Upload

• Selenium gère le téléchargement, mais le fait différemment par rapport à


l'utilisateur réel
• Étapes

 Trouvez l'élément qui déclenche la fenêtre de téléchargement


 Trouvez le chemin du fichier que vous souhaitez télécharger

• Stocker dans une chaîne

 Ex: Stringàfile = "C: \\ Users \\ Andy \\ Desktop \\ folder1 \\


file.key";
 Puis driver.findElement (bouton de téléchargement) .sendkeys
(fichier);

57. Comment vérifier la valeur sélectionnée dans la liste déroulante ?

Select carsList = new Select(el)


carList.getFirstSelectedOption()
assertequals(“some text”,carList.getFirstSelectedOption().getText() )

58. Comment fonctionne avec le menu déroulant sans la balise de sélection?

o Si la liste déroulante n'a pas de balise de sélection, nous ne pouvons pas utiliser la
classe de sélection
o Traitez la liste déroulante et ses options comme des éléments séparés, localisez chaque
élément séparément

20
o Pour sélectionner une option:

• 1. Recherchez et cliquez sur la liste


• 2. Trouvez et cliquez sur l'option

59. Whatifthere'snoselecttag?

• Vous devez sélectionner l'étiquette de la liste déroulante séparément en tant qu'élément


Web.

• Ensuite, utilisez manuellement la méthode du clic

60. Parfois, sendKeys ne fonctionne pas

• Robot ou AutoIT

• bibliothèque == fichier jar == dépendance

61. Quelle est la syntaxe du cadre de commutation?

o Frame est un document html dans un autre document html.


o Le pilote Web gère une page / un document html à la fois. Pour contrôler une autre
image, nous devons toujours changer
o Driver.switchTo.frame (webelement) pour rechercher l'iframe et le passer en
paramètre
o Driver.switchTo.frame (string) pour trouver l'id ou le nom de l'iframe et le passer en
paramètre
o Driver.switchTo.frame (int) pour rechercher l'index et le passer en paramètre

62. Quelle est la syntaxe pour la commutation des fenêtres?

o Pour gérer des onglets / fenêtres séparés, nous devons passer à cet onglet
o Le pilote Web gère une page / un document html à la fois.
o Pour contrôler un autre onglet, nous devons toujours changer
o Pour pouvoir changer, nous devons d'abord obtenir la poignée de fenêtre en utilisant

getWindowHandles() method driver.switchTo.window(String) // à window handle

21
//for each loop : driverGetWIndowHandles:
Driver.switchTo.window(“handle”)
Ifdriver.getTitle==expectedtitle;
Break;

63. What is the syntax for uploading a file?

Public void fileUpload(Stirng path){


WebELement upload = driver.findELement; Upload.sendKeys(path)

o Nous devons localiser le bouton de téléchargement en html.


o L'élément aura une entrée de balise.

• Ensuite, nous faisons sendKeys en passant le chemin du fichier que nous voulons
télécharger

64. Parfois, sendKeys / path ne fonctionne pas

o Création d'un chemin dynamique pour un fichier à l'intérieur de notre projet Chemin
d'accès à l'emplacement du projet:

String projectDir= System.getProperty(“user.dir”) // project directory

String file= “src/test/resources/test_data/myfile.txt”; Element.sendKeys(projectDir+file);

65. How to input text in the textbox without calling the sendKeys()?

//Use javascriptExecutor
JavascriptExecutor JS = (JavascriptExecutor)webdriver;

//To enter username

JS.executeScript(“document.getElementById(‘User’).value= ’www.google.com’”);

//To enter password

22
JS.executeScript(“document.getElementById(‘pass’).value=’ tester’”);

66. Comment appuyer sur la touche ENTRÉE sur la zone de texte dans Selenium
WebDriver?

o Pour appuyer sur la touche Entrée à l’aide de Selenium WebDriver,


o Nous devons utiliser les clés Selenium Enum avec sa constante Entrée
o Driver.findElement (By.xpath («xpath»)). SendKeys (Keys.ENTER);

67. Avez-vous un test de navigation croisée?

o Mentionnez toujours que vous disposez d'un fichier de contrôle pour les mots-clés tels
que le type de navigateur, l'url principale, le nom d'utilisateur, le mot de passe,
l'environnement.

68. Comment résolvez-vous le problème de certification?

o CHROME, capacité IE -> DesiredCapabilities = DesiredCapabilities.chrome ();


o sur Jenkins, nous devons insérer -> .relaxedHTTPSValidation

Response response=RestAssured.given()
.contentType(ContentType.JSON)
.relaxedHTTPSValidation()
.get("https://api.got.show/api/continents");
System.out.println(response.asString());

69. Comment vérifieriez-vous la position de l'élément Web sur la page?

o element.getLocation ();
o La classe WebElement a une méthode get Location avec renvoie le coin supérieur
gauche de l'élément

70. PageFactoryclass?

o La classe Page Factory est fournie avec Selenium.


o Et il est utilisé chaque fois que nous créons des classes d'objets de page.
o Son objectif est d'initialiser les webElements qui ont été définis dans la classe.

23
71. Expliquez-moi votre flux d'exécution de test avec le cucumber.

o Runner> Feature file> Scenario> Steps> Step def> Code Selenium utilisant POM

72. Quels outils utilisez-vous pour tester les services Web UX et Restful?

o UX à Expérience utilisateur. Assurez-vous d'abord que l'UX est acceptable


manuellement.
o Après cela, puisqu'il s'agit de tests d'interface utilisateur, j'utilise Selenium WebDriver
pour l'automatiser.
o RESTFul API Automation> RestAssured Library, PostMan pour les tests manuels

73. Comment redimensionner la fenêtre du navigateur à l'aide de Selenium WebDriver?

o Pour redimensionner la fenêtre du navigateur à des dimensions particulières, nous


utilisons la classe «Dimension» pour redimensionner la fenêtre du navigateur.
o // Créer un objet de la classe Dimensions

Dimension d = new Dimension (480 620);

o // Redimensionne la fenêtre courante à la dimension donnée n

driver.manage (). window (). setSize (d);

74. Quelles sont les exceptions que vous connaissez dans le sélénium?

o J'ai souvent NoSuchElementException


o StaleElementException

 L'élément a été entièrement supprimé.


 L'élément n'est plus attaché au DOM.
 Comment nous traitons StaleElementException;

 L’élément n’est pas attaché au DOMà ‘try catch block ’dans la’
boucle for ’

Ou alors

24
 1.Actualisez la page et essayez à nouveau pour le même
élément.
 2.Attendez la roue jusqu'à ce qu'elle soit disponible

o TimeOutException

75. ASSERT (hard assert ) VS VERIFY (soft assert )

o L'assertion matérielle lève une exception AssertException immédiatement lorsqu'une


instruction d'assertion échoue et la suite de tests se poursuit avec le @Test suivant. Si
les étapes Assert échouent, l'exécution du test s'arrête à ce stade! et ira au prochain test
s'il est présent!

 (Exemple: juste simple Assert.assertTrue (boolean);)

o L'assertion logicielle collecte les erreurs pendant @Test L'assertion logicielle ne lève
pas d'exception lorsqu'une assertion échoue et continue avec l'étape suivante après
l'instruction assert. Si les étapes de vérification échouent, il signalera un échec mais
continuera l'exécution!

 Exemple: SoftAssert soft = new SoftAssert (); // pour soft create object
 soft.assertTrue (boolean);
 soft.assertAll (); // mis à la fin, il signalera ce qui échoue!

76. Quel est le point de vérification disponible en Selenium?

o Dans sélénium IDE, nous utilisons les commandes Selenium Verify et Assert comme
points de vérification
o Dans Selenium WebDriver, il n'y a pas de fonctionnalités intégrées pour les points de
vérification, cela dépend totalement de notre style de codage. Une partie des points de
vérification sont

 pour vérifier le titre de la page


 pour vérifier certains textes

25
 pour vérifier certains éléments (zone de texte, bouton, liste déroulante, etc.)

77. Vérifier que le texte existe ?

o VerifyTextPresentà renvoie TRUE si la chaîne de texte spécifiée a été TROUVÉE


quelque part dans la page ; FAUX dans le cas contraire.
o VerifyTextNotPresentà renvoie VRAI si la chaîne de texte spécifiée N'EST
TROUVÉE nulle part dans la page ; FAUX si c'était trouvé.

78. How do you find a text in a webpage?

o // nom de variable [contient (text (), ’text’)] contient certains tests


o //tagname[.=’text ’] contient du texte exact parfois ne fonctionne pas Selenium

79. Comment obtenir les paramètres précédents d’Apple ?

o Xpath: "// ul / li [contient (text (), 'Apple Mobiles')] / precedingsibling :: li"


o Cela donnera "Samsung Mobiles"

80. Comment obtenir tous les siblings d'Apple suivants ?

o Xpath: "// ul / li [contient (text (), 'Apple Mobiles')] / followingsibling :: li"


o Cela donnera à tous les frères et sœurs précédents (Nokia Mobiles, HTC Mobiles,
Sony Mobiles, Micromax mobiles)

81. Comment gérer les tables Web / grille?

o La balise de table utilisée pour les données de table est organisée dans un format de
grille

 Balise th pour le nom de la colonne Exemple –

<tr>
<th>FirstName</th> column names on the very top row <th>Lastname</th>
<th>Age</th>
</tr>

26
 </tr> balise tr utilisée pour indiquer une ligne, s'applique à la colonne entière
Balise td pour indiquer une colonne dans une ligne Exemple

<tr>
<td>Danny</td> actual_data_on_the_very_first_row <td>Smith</td>
<td>29</td>
</tr>

o Certaines tables ont tbody Utilisé pour indiquer les données de la table, n'inclut
généralement pas les noms de colonne (th)

82. How to use Excel ?

FileInputStream ExcelFile = new FileInputStream(path); excelWBook = new


XSSFWorkbook(ExcelFile);
excelWSheet = excelWBook.getSheet(sheetName);
cell = excelWSheet.getRow(rowNum).getCell(colNum);

83. HowdoyoulikeSeleniumversion3? Est-ce que le Selenium3 est radicalement différent


du Selenium2?

o Selenium 3 a des corrections de bogues à partir de sélénium 2 et il est plus axé sur
l'automatisation mobile.
o Nous visons à ce que Selenium 3 soit «un outil d'automatisation centrée sur
l'utilisateur des applications mobiles et Web».
o Voici le résumé du changement.

 Pour les utilisateurs de WebDriver, il s'agit davantage de corrections de bogues


et de remplacement instantané de 2.
 Les corrections de bogues de Selenium Grid sont également effectuées.
 Le projet Selenium ne prendra pas activement en charge uniquement l'API
WebDriver.
 Par une bizarrerie de synchronisation, Mozilla a apporté des modifications à
Firefox qui signifient qu'à partir de Firefox 48, vous devez utiliser leur
 geckodriver pour utiliser ce navigateur, que vous utilisiez Selenium 2 ou o
Comme nous le savons, Selenium 3.0 est la dernière version de Selenium Jar

27
TESTNG & JUNIT

1. Qu'est-ce que TestNG?

o Vous avez 500 cas de test → Nous créons un package Java et 500 classes pour chaque
cas de test
o Le client vous a demandé d'exécuter seulement 40 d'entre eux pour un test de fumée
→ Nous le gérons dans Jasmine avec des blocages et un mécanisme de rapport.
o TestNG est un framework de test
o Contrôleur centralisé: gérez exécuter différents cas de test puis créez des rapports, des
journaux
o Exécution par lots: 100 cas de test et exécutez-les un par un
o Exécution facultative: nous pouvons ignorer certains cas de test

28
2. Qu'est-ce que les assertions dans TestNG?

o Nous exécutons le test et le cas de test de titre a échoué. Cela n'affectera pas les autres
cas de test, donc ne voulez pas que notre script s'arrête.

 Critical -> stop/failure Assert

 Il prend un argument booléen et un message String. Il affirme


qu'une condition est vraie. Si ce n'est pas le cas, une
AssertionError, avec le message donné, est levée.

 Non critical -> failure/continue SoftAssert

 Soft Assert ne lève pas d'exception lorsqu'une assertion échoue et continue


avec l'étape suivante après le assert déclaration.

3. Difference between JUnit and TestNG

o Annotations; JUnit: @Test, @BeforeClass, @AfterClass, @Before, @After, @Ignore


 TestNG: @Test, @BeforeTest, @BeforeClass, @BeforeSuite,
@BeforeMethod, @AfterTest, @AfterClass, @AfterSuite,
@AfterMethod
o Les deux sont un cadre de test pour nous aider à exécuter des scripts d'automatisation.
o TestNG fournit un rapport html
o TestNG a l'annotation @Dataprovider identique à l'outline de scénario de cucumber
pour les tests basés sur les données.
o Dans TestNG, nous pouvons faire des tests parallèles, mais JUnit ne prend pas en
charge les tests parallèles, nous utilisons donc sauceLab pour cela.
o Test du groupe de support TestNG mais JUnit ne prend pas en charge
o TestNG et JUnit ont tous deux des tests de paramétrage, mais la configuration de test
paramétrée TestNG est très facile à configurer. Il y a deux manières de réaliser le
paramétrage dans TestNG;

 @Parameters et fichier xml TestNG


 @DataPrivider

29
4. Navigateur croisé et test parallèle

o Dans mon projet actuel, nous utilisons sauceLab pour les tests multi-navigateurs. Mais
mon projet précédent, j'ai utilisé le fichier testng.xml.
o Fondamentalement, à l'intérieur de la suite, il y a 3 clés (nom, nombre de threads,
parallèle) et j'ai créé 2 tests différents, l'un d'eux est pour
o Chrome et l'autre est pour Firefox.
o Il existe également une annotation de paramètre et inclut le nom et la valeur; le nom
est le navigateur et la valeur est Chrome.

30
<?xml version="1.0" encoding="UTF 8"?> <!DOCTYPE suite SYSTEM ...>
<suite ...>

<test name="ChromeTest" ... >


<parameter name="browser" value="chrome"/>

<classes>
<class name="testsuite..."/>

</classes> </test> <! First Test >

<test name="FireFox" ... >


<parameter name="browser" value="FireFox"/>

<classes>
<class name="testsuite...."/>

</classes> </test> <! Second Test >

</suite> <! Suite >

31
CUCUMBER & GHERKIN

1. Dites-m ‘en plus sur le cucumber, comment avez-vous décidé de commencer à utiliser
le cucumber?

o Ces dernières années, de plus en plus d'équipes informatiques suivent la méthodologie


Agile dans leur processus de développement pour s'adapter aux changements rapides
du marché. C'est également un défi pour l'équipe de test dans la gestion des cas de test
et des scripts de test qui peuvent être modifiés lorsque les exigences sont mises à jour
mensuellement. Trouver une méthode de test adaptée dès le départ est l'une des clés de
la réussite d'un projet logiciel Agile.

 De nombreuses équipes Agile ont appliqué avec succès l'approche de Behavior Driven
Development (ou BDD) dans le processus de test à l'aide de l'outil Cucumber. Alors,
qu'est-ce que le cucumber ? Et pourquoi est-ce l'une des bonnes approches des projets
Agile, utilisée avec BDD?

o Cucumber est un outil permettant d'exécuter des tests d'acceptation automatisés écrits
dans un style de développement axé sur le comportement. L'une de ses merveilleuses
caractéristiques principales est la possibilité d'exécuter une description fonctionnelle
en texte brut (écrite dans un langage nommé Gherkin) sous forme de tests automatisés.
Voici un exemple:

Feature: Update password


Scenario: Admin user can update user password
Given I am in the HR system with an Admin account
When I update password of another “user”
Then I receive a message for updating password successfully And user’s password is updated
to the new password

o Cette fonctionnalité intéressante a joué un rôle primordial dans la prise en charge de


l'approche BDD avec les avantages suivants :

 Rédaction de tests BDD dans un langage omniprésent, un langage structuré


autour du modèle de domaine et utilisé par toute l'équipe membres comprenant
des développeurs, des testeurs, des BA, etc.

32
 Construire des ponts entre les membres techniques et non techniques d'une
équipe logicielle
 Permet une interaction directe avec le code des développeurs, mais écrit dans
un langage que les parties prenantes de l’entreprise peuvent comprendre
 Dernier point mais non le moindre, Cucumber est un outil de test d'acceptation
automatisé qui exécute des tests écrits dans un style de développement (BDD).

o Cucumber Tool aide à améliorer la communication entre les membres techniques et


non techniques d'un projet.

2. Dites-moi quelles sont les choses les plus importantes dans le cucumber, qu'est-ce qui
le rend unique ?

o Features file, Step Defs, Runner Classes, Hook Class, Tags

3. Comment voir vos rapports en cucumber?

o Mon framework génère le dossier de rapports de cucumber dans le dossier Target qui
contient les rapports.
o Lorsque nous exécutons les tests sur Jenkins, Jenkins enregistre le rapport de chaque
exécution.
o La page d'accueil du travail Jenkins pointe toujours vers les derniers rapports exécutés.
o Tous les rapports des exécutions précédentes se trouvent sous le numéro de build.
o Accédez au dossier Target
o Ouvrir avec l'explorateur système
o Accédez à Target> rapport cucumber> l'index affiche les tests que vous avez exécutés

4. Qu'est-ce que Gherkin?

 Language used by feature files


 Feature, Scenario, Given, Then, When, And, But, BackGround, Scenario Outline

5. Quels sont les composants du Framework Cucumber BDD?

1. Feature files

33
 Se compose de scénarios qui testent une certaine feature ou fonctionnalité
 Feature est l'histoire principale tandis que les scénarios sont les cas de test de
l'histoire (feature)

2. Cukes Runner

 Une classe qui exécute strictement les tests, génère des codes pour la définition
des étapes
 @smoketest
 Cukesrunner → DANS CUCKESRUNNER, J'AI UN EMPLACEMENT DE
FONCTIONNALITÉ QUI MONTRE OU MA FONCTION EST SITUÉE

3. Step definition

 Une classe composée d'étapes commençant par le langage Gherkin


 Assurez-vous que la définition de l'étape est dans le même package que cukes
Runner, ou le package enfant (pas parent ou frère)

o POUR LES PPL NON-TECH À COMPRENDRE


o DÉPENDANCE BDD EST UN DÉPEN
o REPOSITORY MVN DANS LE FICHIER POM.XML
o CUCUMBER BDD DE CUCUMBER.IO
o Combinez les technologies de TDD
o Axé sur le comportement
o Exprimez le comportement client du flux → Ne vous concentrez pas sur les éléments

6. Que fait @CucumberOptions?

o Tags utilisée pour personnaliser l'exécution des tests de cucumber


o Dans @CucumberOptions, vous pouvez ajouter:

• dryRun
• Plugin

§  “Pretty”

34
o Ajoute plus d'informations dans la console -> Donne des informations sur
les balises, les scénarios et les méthodes.
o "html: target/ cucumber report" -> Génère un rapport html situé dans le
dossier du target/ cucumber report "Json: target / cucumber.json

§ Tags

o Les tags doivent être situées dans le chemin de l'entité


o Peut ajouter plusieurs balises ... tags = "@Dog, @Cat"

 Features Emplacement où se trouvent les feature files

 Glue où chercherde définition des étapes. la Hooks classe fait également


partie de la glue.

7. Comment exécuter Cucumber avec JUnit ?

o Ajouter une dépendance JUnit cucumber


o Ajout de @RunWith (Cucumber.class) au-dessus de la classe cukesRunner

8. Comment exécuter Cucumber avec TestNG?

o Ajouter une dépendance testNG cucumber


o Étendre CukesRunner à AbstractTestNG CucumberTests

9. Que se passe-t-il lorsque vous dirigez votre classe de coureurs sans tags ?

o Tous les feature files s'exécuteront de haut en bas, mais uniquement les f feature files
qui se trouvent dans @CucumberOptions «features =»

10. Que sont les Hooks dans le cucumber?

o Cucumber hook nous permet de mieux gérer le flux de travail du code et nous aide à
réduire la redondance du code. On peut dire que c'est une étape invisible, qui nous
permet de réaliser nos scénarios ou tests.
o Classe qui utilise

35
• @Before → s'exécute avant chaque scénario de cucumber
• @After → s'exécute après chaque scénario (il fonctionnera toujours, peu importe
si le scénario réussit ou échoue)

o La classe doit être dans le même package que stepDefinition


o J'ai implémenté des captures d'écran dans la classe hook
o La classe Hook ne fonctionnera pas si dryRun = true
o J'utilise Scenario comme paramètre dans ma méthode Before / After

11. Comment prend-il la capture d'écran du cucumber?

o Dans mon Aftermethod, j'utilise un code:


o J'utilise l'interface TakeScreenShot
o Vous pouvez stocker la capture d'écran sous forme d'octet ou de fichier

• @After

public void tearDown(Scenario scenario) { if(scenario.isFailed()) {


//taking a screenshot

final byte[] screenshot = ((TakesScreenshot)


Driver.getDriver()).getScreenshotAs(OutputType.BYTES);

//adding the screenshot to the report scenario.embed(screenshot, "image/png"); }

12. Comment exécuter un cucumber avec du DDT?

o J'utilise des tables de cucumber :

| Home | Emails | Documents | Projects |

o Vous obtenez la méthode avec (DataTable arg1)


o Dans le paramètre DataTable, vous pouvez le changer en

List<YourType>, List<List<E>>, List<Map<K,V>>, and Map<K,V>

36
o Imprime dans l'ordre pour la liste
o Aucune commande de map

13. Qu'est-ce que le Background ?

o Le cucumber a sa propre Before méthode


o Celui des hooks est pour java
o Une étape qui s'exécute AVANT un scénario dans les features files
o Ne peut se mettre que sur le dessus, avant tous les scénarios
o Impossible de placer les pipelines en arrière-plan (uniquement dans l'aperçu du
scénario)

14. Qu'est-ce que ScenarioOutline? vs scénario?

o Le scénario dans le cucumber s'exécute une fois.

o Utilisé pour le data driven testing

o Avoir les mêmes étapes cucumber mais nous fournissons des données après le
scénario sous forme de tableau à l'aide d'exemples de mots-clés

15. Comment limiter les types de variables que je peux transmettre ?

o Dans la parenthèse gherkin , vous pouvez ajouter (Collaboration | Ventes | Marquage,


etc.)
o Ex: @When("^I hover over the (Collaboration | Sales | Marketing | Activities | All )
menu$")

public void i_hover_over_the_Collaboration_menu(String menu) { switch(menu) {


case "Sales":

BrowserUtils.hover(dashboard.sales); break; case "Marketing":

BrowserUtils.hover(dashboard.marketing); break; case "Collaboration":

BrowserUtils.hover(dashboard.collaboration); break; case "Activities":

BrowserUtils.hover(dashboard.activities); break; case "All":

37
BrowserUtils.hover(dashboard.all); break;};

16. Quels sont les paramètres qui comportent deux paramètres (paramètre de limitation,
paramètre de table) ?

o Exemple :

• Scénario : Vérifier les options du menu Collaboration


• Étant donné que je me suis connecté à suiteCRM
• Lorsque je survole le menu Collaboration

• Ensuite, les options de menu suivantes doivent être visibles pour la collaboration :

| Home | Emails | Documents | Projects |

• Dans ce scénario, j'ai un tableau, je veux limiter la collaboration à la collaboration


et aux autres catégories de menus

o Solution :

• @Then ("^ les options de menu suivantes doivent être visibles pendant

( Collaboration | Sales | Marketing | Activities | All ):$")

• public void
following_menu_options_should_be_visisble_for_Collaboration(String menu,
List<String> options) {
• String menu represents the 5 menu options ( Collaboration | Sales | Marketing |
Activities | All ) List<String>options represents the tables; | Home | Emails |
Documents | Projects |

17. Comment utiliser le scénario du cucumber pour le DDT?

o Dans mon projet actuel, j'utilise le plan de scénario avec des exemples
o Dans mon fichier de fonctionnalités de scénario, chaque fois que j'utilise une variable
en tant que donnée, j'utilise "<variable>"
o Puis dans des exemples :

38
| variable | column name

| data1. | row1
| data2 | row2
| data3 | row3

o . Data driven

• Les données de test sont séparées du code et stockées dans des sources externes :
tableau d'exemples de cucumber, fichiers Excel, CSV fichiers, base de données.
• Si la quantité de données n'est pas si énorme, j'utilise un aperçu du scénario de
cucumber avec un tableau d'exemples.
• Et d'autres fois, je gère les données de test dans des fichiers Excel et j'utilise la
bibliothèque Apache POI pour lire et écrire des données
• Si les données proviennent d'une base de données ou que je dois effectuer une
validation de base de données, j'utilise des requêtes SQL avec la bibliothèque
JDBC en java.

18. Comment utiliser Maps dans le cucumber ?

o Utilisation d'un plan non Scenario


o Scénario : créer un contact à l'aide d'un map

• Given je me suis connecté à suite CRM


• When je crée un nouveau contact :

| first_name | John |

| last_name | Smith |

|cell_phone|8018888889 |

• Then , je devrais voir les coordonnées de "John Smith"


• Le côté gauche est la clé, et la droite est la valeur 2 colonnes uniquement

o Utilisation d'un Scenario Outline

• Scenario Outline : créer un contact à l'aide d'une carte

39
• Given je me suis connecté à suiteCRM

• When je crée un nouveau contact:

| first_name | <first_name> |
| last_name | <lname> |
| cell_phone | <cell_phone> |
| office_phone |<office_phone> |

• Then, je devrais voir les informations de contact pour "<first_name> <lname>"


• Examples: | first_name | lname | cell_phone | office_phone |

| Michael | Jackson | 1234567890 | 2345678891 |

| Bonnie | Garcia | 4569871234 | 4567890987 |

o In step def I write;

@When("^I create a new contact:$")


public void i_create_a_new_contact(Map<String,String>contact) {

// open the create contact dialog

21. Comment utiliser POJO dans le cucumber ?

o Créer la classe contactBean

• Ajouter toutes les variables


• Ajouter les getter / setters

o Créer un feature file de bean


o Créer une table avec la première ligne contenant les variables de la classe contactBean

• Ajouter des valeurs sous le tableau


• Implémenter la méthode avec paramètre (List <ContactBean> contacts)

o Scénario: Créer un contact

• Given je me suis connecté à suiteCRM


• When j'enregistre un nouveau contact:

40
| firstName | lastName | officePhone | cellphone | email
|

| Steve | Gates | 3456758888 | 1234329999 |


SteveGates123@gmail.com|

• Ensuite, je devrais voir les coordonnées de "Steve Gates"

22. Comment exécuter un groupe de cas de test en utilisant TestNG?

@Test (groups={“smokeTest”,”FunctionalTest”})

public void loginTest(){

System.out.println(“Logged in successfully”);

23. Data Driven Testing

o QUAND : chaque fois qu'une fonctionnalité ou un module d'une application nécessite


un test avec plusieurs ensembles de données (paramétrage),
o Plusieurs entrées sont nécessaires pour effectuer des tests et une automatisation basés
sur les données.
o ● Ces scénarios sont l'une des choses qui doivent être automatisées.
o ● COMMENT : Les données de test sont séparées du code et stockées dans des
sources externes : tableau d'exemples de cucumber, fichiers Excel, CSV
o fichiers, base de données.
o ● AVANTAGE : plus organisé, données centralisées, collaboration sur les données de
test - cela peut provenir de BA, MT, etc.

24. Comment pouvons-nous créer un data driven Framework à l'aide de TestNG ?

o En utilisant l'annotation @DataProvider, nous pouvons créer une structure basée sur
les données

@DataProvider(name=”getData”) Public Object[][] getData(){ Object [][] data = new


Object[2][2]; Data[0][0] = “firstUid”; Data[0][1] = “FirstPWD”;

41
Data[1][0] = “SecondUid”;
Data[1][1] = “SecondPWD”; Return data; }

25. Comment créer un groupe de groupes dans TestNG ?


o Ces groupes sont appelés métagroupes.
o Exemple : vous souhaiterez peut-être définir un groupe contenant tous smokeTest et
FunctionalTest. Modifions notre fichier testing.xml :

<groups>
<define name=”all”>

<include name =”smoke Test”/>

<include name = “functionalTest”/> </define>

<run>

</run>
</groups>

<include name = “all”/>

26. Comment exécuter des cas de test en parallèle en utilisant TestNG?


o Nous pouvons utiliser l'attribut «parallel» dans testng.xml pour exécuter des tests
parallèles dans TestNG
o L'attribut parallel de la balise suite peut accepter quatre valeurs:
• ○ Classes → Tous les cas de test à l'intérieur d'une classe java s'exécuteront en
parallèle
• ○ Méthodes → Toutes les méthodes avec l'annotation @Test s'exécuteront en
parallèle
• ○ Instances → Les cas de test dans la même instance s'exécuteront en parallèle
mais deux méthodes de deux instances différentes exécuter dans un fil différent.
<suite name = ”softwaretestingmaterial” parallel = ”methods”>
27. Comment ignorer un cas de test dans testNG?
o Pour ignorer le scénario de test, nous utilisons le paramètre enabled = false pour le
o Annotation @Test @Test (enabled = false)

42
28. Comment exclure une méthode de test particulière de l'exécution d'un scénario de
test ?
o En ajoutant la balise exclude dans le fichier testing.xml

<classes>
<class name="TestCaseName">

<methods>
<exclude name="TestMethodNameToExclude"/>

</methods>
</class>

</classes>

29. Comment exclure un groupe de test particulier de l'exécution d'un scénario de test ?
o En ajoutant la balise d'exclusion dans le fichier testing.xml

<groups>
<run>

<exclude name="TestGroupNameToExclude"/> </run>

</groups>

30. Quelles sont les différentes manières de produire des rapports pour les résultats de
TestNG?
o TestNG propose deux méthodes pour produire un rapport

• Listeners implémentent l'interface org.testng.testListener et sont notifiés en temps


réel quand un test démarre, réussit, échoue, etc ...
• Reporters implémentent l'interface org.testng.reporter et sont notifiés lorsque
toutes les suites ont été exécutées par TestNG.

o L'instance IReporter reçoit une liste d'objets décrivant l'ensemble de l'exécution du test
31. À quoi sert l'annotation @Listener dans TestNG ?
o Configurer les rapports et les logs.
o listeners largement utilisés: interface ITestListener.

43
o Il a des méthodes comme onTestStart, onTestSucess. onTestFailure, sur
TestSkipped ...
o Nous devons implémenter cette interface en créant notre propre classe d'auditeur,
o Ensuite, nous devons ajouter l'annotation des écouteurs (@Listeners) dans la classe

31. 32. Qu'est-ce qu'une expression régulière, Regexp, or Regex ?

o Une expression régulière est une chaîne de texte spéciale pour décrire un modèle de
recherche.
o Vous pouvez considérer les expressions régulières comme des caractères génériques
sur les stéroïdes.
o Vous connaissez probablement les notations génériques telles que * .txt pour
rechercher tous les fichiers texte dans un gestionnaire de fichiers.
o L'équivalent Regex est. * \. Txt.
33. Comment écrire une expression régulière dans le fichier testing.xml pour rechercher
des méthodes @Test contenant le mot-clé «smoke» ?
o L'expression régulière pour trouver la méthode @Test contenant le mot-clé "fumée"
est mentionnée ci-dessous

<methods>
<include name=".*smoke.*"/>

</methods>

34. Quelle est l'unité de temps que nous spécifions dans les suites de tests et les cas de
test?
o Nous spécifions l'unité de temps dans les suites de tests et les cas de test est en
millisecondes.
35. À quoi sert @Test (invocationCount = someInteger)?

@Test(invocationCount=10)

Public void testcase(){}

44
o // l'attribut de nombre d'appels indique combien de fois TestNG doit exécuter une
méthode de test

36. À quoi sert @Test (threadPoolSize = someInteger)?


o L'attribut threadPoolSize demande à un pool de threads d'exécuter la méthode de test
via plusieurs threads
o Remarque: cet attribut est ignoré si le nombre d'appels N'EST PAS SPÉCIFIÉ

37. Que signifie le délai d'expiration du test lors du test?


o Le nombre maximum de millisecondes qu'un scénario de test doit prendre

@Test1(threadPoolSize=3,invocationCount=10,timeOut=10000)

public void test() {}

o : // dans cet exemple: la fonction test1 sera invoquée dix fois à partir de trois threads
différents. De plus, un délai d'expiration de plusieurs secondes garantit qu'aucun des
threads ne se bloquera indéfiniment sur ce thread.

38. Que sont les annotations @Factory et @DataProvider?

o @Factory → exécute toutes les méthodes de test présentes dans une classe de test en
utilisant une instance distincte de la classe avec ensemble différent de données
o @DataProvider → une méthode de test qui utilise dataProvider sera exécutée avec
les méthodes spécifiques plusieurs nombres de heures basées sur les données fournies
par le dataProvider.

39. annotations - priority

o Peu importe le numéro que vous démarrez Ex: @Test (priorité = 0)


o DependsOnMethods = "nom de la méthode de test" Vous pouvez ajouter plusieurs
noms de test
o Si le premier échoue, le deuxième test ne s'exécutera pas du tout
o Si la première méthode a échoué, votre rapport indiquera que le deuxième test sera
ignoré
45
40. exécution parallèle dans testNG

o En écriture de fichier xml.


• parallel = "tests" thread-count = "4"
o Le nombre de threads correspond au nombre de navigateurs que vous souhaitez ouvrir
en même temps
o Dans un fichier xml, vous pouvez ajouter. * Pour tout exécuter
• Ex: <package name = ”. *”> </package>
o TestNG a ses propres rapports -Lorsque vous exécutez xml, il vous donne le rapport
dans le dossier de sortie de test
o Contient le rapport de test au format html

41. Framework Tools: Cucumber BDD framework

o Junit, Cucumber Java, Maven


o Selenium, création de rapports HTML avec captures d'écran Log4j,
o JDBC, Rest Assured, Apache POI, Git, Jenkins

42. Framework Tools : TestNG + Selenium

o Java, Maven, TestNG,


o Selenium, étendre les rapports avec des captures d'écran Log4J,
o DBC, Rest Assured, Apache POI, Git, Jenkins

43. Comment votre Framework génère-t-il des rapports?

o Notre framework Cucumber BDD génère des rapports HTML.


o Le rapport affiche la couverture réussite / échec pour les fichiers d'entités, les balises
et les étapes
o Le rapport contient toutes les étapes de chaque test Le rapport contient des captures
d'écran pour les échecs

44. Comment exécuter des tests sélectivement cucumber ?

o tags mot-clé le cukesrunner

46
o mot-clé de feature le cukesrunner
o les Tags et les features peuvent également être transmises à l'aide de la ligne de
commande
o ● mvn test -Dcucumber.options = "- tag @smoke"

45. Qu'est-ce que vous utilisez pour la logging ?

o J'utilise Log4J pour la logging. Je consigne toujours les étapes importantes de


l'exécution du test. Cela m'aide à déboguer quand il y a un échec.
o Log4J ne remplace pas les rapports HTML.

<dependency>

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j- core</artifactId>

<version>2.11.0</version>

</dependency>

46. Comment fonctionne le FEATURE FILE ?

o Feature → description de ce qui est testé @tags. Exemple de fichier de Feature ;


• Feature : fonctionnalité de connexion → Background :
• Given je suis sur la page de connexion → Scénario: 1, Scénario: 2
• Le Background s'exécute avant les deux scénarios
o Scénario → description du scénario en cours de test
• Given je suis sur la page de connexion
• And j'entre le nom d'utilisateur et le mot de passe
• When je clique sur le bouton Soumettre
• Then , je devrais pouvoir voir la photo de profil
• But le bouton d'envoi ne doit pas être affiché
o Given → une condition préalable
o When→ condition qui déclenche le résultat attendu Alors -> condition attendue

47
47. Qu'est-ce que la classe de base de test ? et comment mettez-vous en œuvre dans votre
Framework ?

o La classe Test Base est la classe dans laquelle j'ai le plus utilisé les méthodes dans mes
tests.
o Mes classes de test étendent la classe Test Base et ont ainsi accès à ces méthodes. Cela
m'aide à faire mon code réutilisable
o Méthodes de test avant / après méthodes de l'utilitaire d'attente / de synchronisation.
• SwitchToWindow (title)
• driveWebDriver;

48. Comment réexécuter les tests ayant échoué dans TestNG ?

o Dans mon framework TestNG, les tests échoués sont signalés dans le fichier
testng_failed_.xml dans le dossier cible.
o Nous pouvons ajouter ce fichier dans le fichier pom afin que maven essaie d'exécuter
les tests qui ont échoué à chaque fois.
o If ne s'exécutera qu'en cas d'échec du test.

49. Comment réexécuter les tests ayant échoué dans Cucumber ?

o Nous utilisons l'option de réexécution dans CukesRunner.


o Ajoutez la reprise à cukes runner.
o Cette option créera un fichier avec une liste des tests ayant échoué
o Créez une deuxième classe de coureurs qui pointe vers un fichier avec une liste des
tests ayant échoué
o Ajoutez le deuxième coureur dans le fichier pom

50. Comment ré-exécuter les tests ayant échoué dans Jenkins ?

o Dans Jenkins, il existe des plugins qui ré-exécutent les tests ayant échoué Cas
unitaires.
o Vous pouvez donc configurer votre exécution de compilation Maven sur Jenkins en
utilisant l'option :
o Dsurefire.rerunFailingTestsCount = 2

48
51. EXÉCUTER DES TESTS DE CUCUMBER EN PARALLÈLE?

Il existe quelques options sur la façon de faire fonctionner le framework Cucumber + JUnit en
parallèle

1. Il existe un plugin cucumber-jvm-parallel-plugin


https://github.com/temyers/cucumber-jvm-parallel-plugin
o Ce plugin génère automatiquement plusieurs fichiers de coureur cukes.
o Sur la base de la configuration, ce plugin crée un coureur cukes par fichier d'entités.
o Chaque coureur pointera vers un fichier d'entités. Et ces coureurs de cukes
fonctionneront en parallèle.
o Normalement, cucumber exécute les fichiers de caractéristiques les uns après les
autres. Lorsque nous utilisons ce plugin, il les lance en même temps. Nous pouvons
spécifier le nombre de tests exécutés en même temps

2. Option parallèle Cucumber 4.x

À partir de cucumber 4.0, le cucumber prend en charge la parallellisation de manière native.

https://cucumber.io/blog/2018/09/24/announcing-cucumber-jvm-4-0-0

Par documentation officielle, afin d'exécuter des tests en parallèle, nous devons ajouter une
option parallèle au plugin maven surefire dans le fichier pom.

<build>
<plugins>

<plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration>

<parallel>both</parallel>

<threadCount>4</threadCount> </configuration>

</plugin>
</plugins>

</build>

49
Mais dans mon projet spécifique, nous avons ajouté le plugin de sécurité maven pour nous
assurer que les tests continuent à s'exécuter même si certains échouent. Ce plugin s'assure que
les tests continuent à s'exécuter

<plugins>
<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-failsafe-plugin</artifactId>

<version>2.18</version>
<configuration>

<testFailureIgnore>true</testFailureIgnore>

<skipTests>false</skipTests>
<includes>

<include>**/runners/*TestRunner.java</include> </includes>

</configuration>

</plugin>

<plugins>

3. Le deuxième plugin est maven-surefire-plugin

Ce plugin exécute des tests en parallèle. Dans cette configuration de plugin, nous indiquons
quels fichiers runner nous voulons exécuter. Nous pouvons également indiquer comment les
tests simultanés que nous voulons exécuter.

<include>**/runners/*TestRunner*.java</include>. -> plugin will run these files


<threadCount>10</threadCount> -> this shows how many browsers we want to have in at the
same time. <parallel>classes</parallel> -> this line tells that cukes runner classes must run in
parallel

Nous avons créé des fichiers d'exécution cukes en fonction du nombre de tests que nous
voulons exécuter et de la manière dont nous voulons décomposer les tests. Chaque coureur de
cukes pointera vers certains scénarios de configuration / fichiers de fonctionnalités
50
Comment exécuter?

o Nous pouvons exécuter des tests en parallèle dans notre framework uniquement en
exécutant des tests comme une commande maven
o mvn verifyàthis exécutera les tests et générera des rapports
o mvn clean verifyàit supprimera d'abord le dossier cible, puis exécutera les tests, puis
générera des rapports

Avantages de la parallélisation :

o Réduit le temps d'exécution. Les tests d'interface utilisateur prennent généralement


beaucoup de temps, en particulier dans les tests de régression.

Les défis de la parallélisation?

o Difficile à mettre en œuvre -> pas facile à faire.


o load -> si nous ouvrons trop d'instances dans la même machine, cela peut surcharger la
machine. Il en résultera des tests en cours d'exécution lent et augmente le taux d'échec.
o Ceci peut être résolu en exécutant des tests sur différentes machines à l'aide de GRID.
o certains cas de tests n'ont pas fonctionné en parallèle dans mon projet.
o

API
1. Qu'est-ce que l'API?

o Cela signifie la connectivité. Je veux dire que l'API est le messager qui prend les
demandes et dit à un système ce que vous voulez faire, puis vous renvoie la réponse.
o API est l'acronyme d'Application Programming Interface (qui est un intermédiaire
logiciel) qui permet aux applications de communiquer entre elles.

2. API vs services Web?

o API = navigateur: Selenium WebDriver, base de données: JDBC, MsOffice: Apache


POI
o Webservices = si une API utilise Internet pour les communications, il s'agit d'un
service Web. * Tous les services Web sont des API.
o Aucune UI (interface utilisateur) à une application Web avec interface utilisateur et
nous utilisons Selenium Webdriver
o Nous utilisons:

• SOAP → XML
• REST → JSON, XML, TEXT
• Postman, Rest Assured Library

51
3. Qu'est-ce que SoapUI ? et comment l'avez-vous utilisé dans votre projet actuel ?

o SOAP UI est le principal outil de test d'API multiplateforme open source


o SOAPUI permet aux testeurs d'exécuter des tests fonctionnels, de régression, de
conformité et de charge automatisés sur différentes API Web.
o SOAPUI prend en charge tous les protocoles et technologies standard pour tester
toutes sortes d'API.
o L'interface SOAPUI est simple et permet aux utilisateurs techniques et non techniques
de l'utiliser de manière transparente.

4. Nom de certaines méthodes HTTP couramment utilisées dans l'architecture basée sur
REST?

● CREATE → POST (envoyer des données au serveur)

● Read → GET (récupère les données d'un serveur donné en utilisant un URI donné)

● UPDATE → PUT (remplace toutes les représentations actuelles de la ressource


cible par le contenu téléchargé)

● DELETE → DELETE (supprime toutes les représentations actuelles de la ressource


cible données par un URI.)

5. Codes d'état HTML?

o 1xx → Informatif
o 2xx → Succès (la demande a été acceptée avec succès) (200 → Ok, 201 → Créée, 202
→ Acceptée, 204 → Pas de contenu)
o 3xx → Redirection
o 4xx → Erreur client (400-Bad Request, 401-Unauthorized, 403-Forbidden, 404-Not
Found, 405-Method not Allowed)
o 5xx → Erreur de serveur (500-Erreur de serveur interne, 502-Passerelle incorrecte,
501-Non implémenté, 503-Service indisponible)

6. Quelle est la première chose que vous vérifiez lorsque vous obtenez une réponse ?

o Devis de statut (200 signifie toujours OK)


o Nous vérifions toujours le 404 signifie non trouvé
o rest-assured.io ==> pour l'automatisation pour trouver la machine ECS dans le type de
recherche Bureau à distance

7. Méthodes HTTP et types de requêtes

o Get ne nécessite pas de body


o Put requiert un body signifie UPDATE les informations
o Le message requiert un body signifie CREATE des informations
o DELETE ne nécessite pas de body
o GET -> READ, POST -> CREATE, PUT-> UPDATE, DELETE -> DELETE
o POST VS PUT

52
8. Paramètres api

o 2 TYPES:

• PARAMÈTRE DE CHEMIN (LA VALEUR FERA PARTIE DE L'URL) QUERY


/ REQUEST
• PARAMÈTRES (KEY+ VALUE)

9. À quoi sert Hamcrest Matcher?

• Hamcrest est un cadre d’écriture d’objets matcher permettant de définir des règles de
«correspondance» de manière déclarative.

53

Vous aimerez peut-être aussi