Comment gérer l'appel AJAX dans Selenium Webdriver

Table des matières:

Anonim

Qu'est-ce que l'Ajax?

AJAX signifie Asynchronous JavaScript & XML, et il permet à la page Web de récupérer de petites quantités de données du serveur sans recharger la page entière.

Ajax est une technique utilisée pour créer des pages Web rapides et dynamiques. Cette technique est asynchrone et utilise une combinaison de Javascript et de XML.

Il mettra à jour la / les partie (s) d'une page Web sans recharger la page entière.

Certaines des applications célèbres qui utilisent la technique AJAX sont Gmail, Google Maps, Facebook, Youtube, etc.

Dans ce didacticiel, vous apprendrez-

  • Qu'est-ce que l'Ajax?
  • Comment fonctionne Ajax?
  • Comment gérer l'appel Ajax à l'aide de Selenium Webdriver
  • Défis dans la gestion des appels Ajax dans Selenium Webdriver

Comment fonctionne Ajax?

Par exemple, lorsque vous cliquez sur le bouton Soumettre, JavaScript fera une demande au serveur, interprétera le résultat et mettra à jour l'écran actuel sans recharger la page Web.

  • Un appel Ajax est une requête asynchrone initiée par le navigateur qui n'entraîne pas directement une transition de page. Cela signifie que si vous lancez une requête Ajax, l'utilisateur peut toujours travailler sur l'application pendant que la requête attend une réponse.
  • AJAX envoie des requêtes HTTP du client au serveur, puis traite la réponse du serveur, sans recharger la page entière. Ainsi, lorsque vous passez un appel AJAX, vous n'êtes pas sûr du temps mis par le serveur pour vous envoyer une réponse .

Du point de vue d'un testeur, si vous vérifiez le contenu ou l'élément à afficher, vous devez attendre d'avoir la réponse. Lors de l'appel AJAX, les données sont stockées au format XML et récupérées sur le serveur.

Comment gérer l'appel Ajax à l'aide de Selenium Webdriver

Le plus grand défi dans la gestion des appels Ajax est de connaître le temps de chargement de la page Web. Étant donné que le chargement de la page Web ne durera qu'une fraction de secondes, il est difficile pour le testeur de tester une telle application via un outil d'automatisation. Pour cela, Selenium Webdriver doit utiliser la méthode wait sur cet appel Ajax.

Ainsi, en exécutant cette commande wait, le sélénium suspendra l'exécution du scénario de test actuel et attendra la valeur attendue ou nouvelle. Lorsque la nouvelle valeur ou le nouveau champ apparaît, les cas de test suspendus seront exécutés par Selenium Webdriver.

Voici les méthodes d'attente que Selenium Webdriver peut utiliser

  1. Thread.Sleep ()
  • Thread.Sleep () n'est pas un choix judicieux car il suspend le thread en cours pendant la durée spécifiée.
  • Dans AJAX, vous ne pouvez jamais être sûr du temps d'attente exact. Ainsi, votre test échouera si l'élément n'apparaît pas dans le délai d'attente. De plus, cela augmente la surcharge car l'appel de Thread.sleep (t) fait que le thread actuel est déplacé de la file d'attente en cours vers la file d'attente.
  • Une fois le temps 't' atteint, le thread actuel passera de la file d'attente à la file d'attente prête, puis il faut un certain temps pour être sélectionné par le CPU et être en cours d'exécution.
  1. Attente implicite ()
  • Cette méthode indique au pilote Web d'attendre si l'élément n'est pas disponible immédiatement, mais cette attente sera en place pendant toute la durée d'ouverture du navigateur. Ainsi, toute recherche des éléments sur la page peut prendre le temps que l'attente implicite est définie.
  1. Attente explicite ()
  • L'attente explicite est utilisée pour geler l'exécution du test jusqu'à ce qu'une condition particulière soit remplie ou que le temps maximum s'écoule.
  1. WebdriverWait
  • Il peut être utilisé pour toutes les conditions. Ceci peut être réalisé avec WebDriverWait en combinaison avec ExpectedCondition
  • La meilleure façon d'attendre dynamiquement un élément est de vérifier la condition toutes les secondes et de passer à la commande suivante dans le script dès que la condition est remplie.

Mais le problème avec toutes ces attentes est que vous devez mentionner l'unité de temporisation. Que faire si l'élément n'est toujours pas présent dans le temps imparti? Il y a donc une autre attente appelée Attente Fluent.

  1. Attente fluide
  • Il s'agit d'une implémentation de l'interface Wait ayant son délai d'expiration et son intervalle d'interrogation. Chaque instance FluentWait détermine la durée maximale d'attente d'une condition, ainsi que la fréquence à laquelle vérifier la condition.

Défis dans la gestion des appels Ajax dans Selenium Webdriver

  • L'utilisation de la commande "pause" pour gérer l'appel Ajax n'est pas totalement fiable. Un long temps de pause rend le test trop lent et augmente le temps de test. Au lieu de cela, "waitforcondition" sera plus utile pour tester les applications Ajax.
  • Il est difficile d'évaluer le risque associé à des applications Ajax particulières
  • La liberté totale des développeurs pour modifier l'application Ajax rend le processus de test difficile
  • La création d'une demande de test automatisée peut être difficile pour les outils de test car une telle application AJAX utilise souvent une technique de codage ou de sérialisation différente pour soumettre des données POST.

Un exemple pour Ajax HANDLING

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.Assert;import org.testng.annotations.BeforeClass;import org.testng.annotations.Test;classe publique Ajaxdemo {URL de chaîne privée = "http://demo.guru99.com/test/ajax.html";Pilote WebDriver;WebDriverWait wait;@Avant les courspublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// créer une instance de chromepilote = nouveau ChromeDriver ();driver.manage (). window (). maximiser ();driver.navigate (). to (URL);}@Testpublic void test_AjaxExample () {Par conteneur = By.cssSelector (". Container");wait = new WebDriverWait (pilote, 5);wait.until (ExpectedConditions.presenceOfElementLocated (conteneur));// Récupère le texte avant d'effectuer un appel ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Cliquez sur le bouton radiodriver.findElement (By.id ("oui")). click ();// Cliquez sur le bouton Vérifierdriver.findElement (By.id ("buttoncheck")). click ();/ * Récupère le texte après l'appel ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Vérifiez les deux textes avant l'appel ajax et après le texte d'appel ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Appel Ajax effectué");String expectedText = "Le bouton radio est coché et sa valeur est Oui";/ * Vérifier le texte attendu avec le texte mis à jour après l'appel ajax * /Assert.assertEquals (textAfter, attenduText);driver.close ();}}

Résumé:

  • AJAX permet à la page Web de récupérer de petites quantités de données du serveur sans recharger la page entière.
  • Pour tester l'application Ajax, différentes méthodes d'attente doivent être appliquées
    • ThreadSleep
    • Attente implicite
    • Attente explicite
    • WebdriverWait
    • Attente fluide
  • La création d'une demande de test automatisée peut être difficile pour les outils de test car une telle application AJAX utilise souvent une technique de codage ou de sérialisation différente pour soumettre des données POST.