Le problème du temps d'attente non constant
Certaines applications sont dépendantes d'éléments externes pour pouvoir poursuivre leur traitement : attente d'une réponse d'un serveur, attente des résultats d'un calcul, attente de l'affichage complet d'une page qui peut dépendre des implémentations des navigateurs, etc.
Cela pose un problème lors de la réalisation des tests fonctionnels : comment gérer correctement cette attente sans provoquer une situation d'échec des tests et sans passer trop de temps à attendre ?
La solution est de ne pas attendre un temps donné pour continuer le test, pour des raisons évidentes : vous ne savez pas combien de temps vous allez devoir attendre. De plus vous allez complètement polluer votre base de données de tests automatisés en saupoudrant ici et là des temps d'attente parfois inutiles, ce qui va considérablement ralentir l'exécution de tous vos tests.
C'est pourquoi vous ne trouverez pas de fonction "attendre" dans Agilitest ...
La solution Agilitest : faire un "contrôle de l'occurrence".
De quoi s'agit-il ?
Un contrôle d'occurrence est une action d'Agilitest qui vérifie qu'un ou plusieurs éléments sont présents ou manquants dans la page ou le logiciel testé.
Cette solution indique à Agilitest que vous voulez contrôler le nombre d'occurrences d'un objet dans votre application.

Il est applicable dans les situations suivantes :
- Nous voulons attendre que la page ait fini de se charger pour poursuivre le traitement. Dans ce cas, nous pouvons effectuer un contrôle d'occurrence sur un élément qui s'affichera en bas de la page à la fin du chargement.
- Nous voulons attendre une modification de la page qui va supprimer les éléments déjà imprimés. Dans ce cas, nous effectuons un contrôle d'occurrence égal à 0 (contrôle d'absence) sur un élément qui doit disparaître avant de poursuivre le test.
Dans les deux cas et tant que les conditions de réussite du contrôle d'occurrence ne sont pas remplies, Agilitest commencera à se considérer "en situation d'échec potentiel" du test, et multiplieradonc les contrôles pour éviter de générer un faux négatif.
Au terme de son contrôle, Agilitest produira une situation d'échec du test, sauf si, entre-temps, les conditions de réussite du contrôle sont réunies, et donc que les éléments que nous attendions sont présents ou ont été retirés.

L'astuce consiste à indiquer à Agilitest le nombre d'essais qu'il devra effectuer pour attendre les conditions de la vérification. Cela se fait en sélectionnant un nombre d'essais maximum qu'il devra effectuer avant de considérer "être en échec" sur cette action.
Chaque action a la possibilité d'attendre et de réessayer plusieurs fois. Cela contribue grandement à la robustesse des tests lorsque vous savez que votre serveur peut être dans une situation où il ne livre pas la page désirée immédiatement.
Le nombre maximum d'essais est limité à 50, mais le temps d'attente entre chaque essai suit une courbe exponentielle : cela permet de vérifier rapidement les conditions de réussite lorsqu'elles sont réunies, mais aussi d'attendre "un certain temps" qu'un traitement long soit effectué.
En utilisant cette solution, nous pourrions même demander d'attendre la fin d'une bande-annonce sur une application Android diffusant de la vidéo ...
Comment attendre encore pour une période déterminée ?
Il y a toujours une solution avec Agilitest, et dans ce cas, elle consiste à utiliser un morceau de code Java, voici comment :
- Dans l'explorateur Agilitest, sélectionnez le répertoire java dans src / main au même niveau que vos fichiers .ats .
- Faites un clic droit et sélectionnez : Créer un script java.
- L'éditeur ouvre une popup pour demander le nom du script, entrez attendre et cliquez sur OK.
- L'éditeur ouvre une fenêtre d'édition de code java, collez le code suivant dans la fonction testMain () :
try {
final int ms = Integer.parseInt(prm(0, "1000"));
Thread.sleep(ms);
} catch (Exception e) {}
- Glissez-déposez le script "wait.java" de l'explorateur Agilitest à l'endroit où vous voulez l'appeler dans votre test.
ASTUCE : Si vous voulez pouvoir spécifier le temps d'attente directement à partir de votre script ATS dans Agilitest, vous pouvez déclarer un paramètre passé par valeur au script et ensuite utiliser le code suivant :
try {
final int ms = getParameter(0).toInt();
Thread.sleep(ms);
} catch (Exception e) {}