Macros de test client
Les macros clients sont un outil qui permet de piloter automatiquement le logiciel afin de lui faire réaliser des opérations de test en condition réelles de comportement client.
Le language d’execution et de programmation de ces macros est le SASL
, language
de script de base du logiciel.
Des fonctions spécifiques aux macros viennent augmenter le language afin
de pouvoir éxecuter des commandes sur l’écran et vérifier des valeurs.
Objectifs de fonctionnement
Les macros se déroulent toujours selon trois types d’opérations
- Opération sur l’interface (click, ouverture de menus ou de tâche, focus sur champs, etc…)
- Opération sur les champs (Saisie de filtre, saisie de champs)
- Analyse du comportement dit
assert
qui permettent de vérifier le contenu et les valeurs de l’écran
Disponibilité des macros
La disponibilité des macros est régie par une propriété SYS22
client.enable.macros
Lorsque cette valeur est à 1
, il est alors possible de lancer l’éditeur de macros
ou le lecteur de macros depuis la console.
Lecteur de macros
La commande macroplayer
dans la console SAINet permet d’ouvrir le lecteur de
macros.
La documentation complète du lecteur de macros est disponible ici.
Editeur de macros
La commande macroeditor
dans la console SAINet permet d’ouvrir l’éditeur de
macros.
L’éditeur de macro permet de créer des fichiers de macros qui pourront ensuite être manuellement intégrés dans des séquences. Voici les différents éléments de l’interface
- Nouveau fichier
- Ouvrir un fichier existant
- Sauvegarder le fichier en cours ou définir son emplacement de sauvegarde
- Le
Picker
permet de selectionner des éléments de l’interface pour connaitre leur nom (voir la section dédiée auPicker
) - Nom du composant selectionné avec le
Picker
- Ouvre l’importeur de macros à partir d’écran xml
- permet de lancer le script courant de l’éditeur dans le lecteur de macros
- Zone d’édition du script. C’est dans cette zone que le script va être rédigé. L’editeur
propose de l’autocompletion sur les actions et sur le contenu des fonctions. Par exemple
lors de l’action
executeAction()
, si on se met au niveau des parenthèses, le système proposera"Fill"
,"Click"
, etc…
Pipette d'interface 'Picker'
La pipette d’interface introduite dans l’éditeur de macros permet de selectionner des éléments de l’écran qui ne proviennent pas du paramétrage xml de l’application.
En effet, lorsqu’on veut remplir un champ de l’écran, il suffit de le remplir en
l’identifiant par son datafield. Dans le cas du bouton permettant de créer une
nouvelle page, il n’est pas possible de le nommer ainsi. Il faut donc récupérer
son nom techique et décider ce qu’on va faire avec (Click
, RightClick
par exemple).
Lorsqu’on appuye sur le mode pipette, l’interface du client ne répond plus aux actions mais à la place chaque composant va introduire le nom technique de son objet clické dans le champ à coté du picker dans l’éditeur de macro. Ceci permet de cliquer sur plein d’éléments de l’interface pour connaitre leurs noms sans risquer de déclencher les opérations.
Lorsqu’on veut arréter le mode picker, il suffit d’appuyer sur la touche echap
pour
que tout redevienne normal. A noter que lorsqu’on appuye sur echap
, le picker va
introduire le dernier élément cliqué dans le script. Ceci permet de rapidement créer
des scripts en plaçant son curseur à l’endroit ou on souhaite insérer le texte.
Importeur de xml
L’importeur de xml accessible à travers l’éditeur permet de transformer un descripteur d’écran xml en une série d’opération permettant de créer le script de remplissage de l’écran en question
L’éditeur de macro permet de créer des fichiers de macros qui pourront ensuite être manuellement intégrés dans des séquences. Voici les différents éléments de l’interface
- Coller dans cette zone le xml de l’écran à importer
- Selectionner les différentes opérations souhaitées à intégrer dans le processus. Par exemple dans le cas d’une descripteur concernant l’ADR02, le système ouvrira l’ADR02 à travers l’action correspondante
- Le bouton
Import
permet de regénérer le script à droite basé sur l’entrée XML de gauche - Le script résultat est une macro exécutable. A noter que suivant les actions demandées, ce script peut avoir des manques d’entrées. Il n’est pas possible de remplir un écran si il n’a pas été créé/ouvert avant.
Asserts
Afin de vérifier que les valeurs dans les différents champs de l’écran,
les pages disponibles, les valeurs dans les grilles, etc… soient correctes,
il est possible d’utiliser un système d’assert
qui compare la valeur
donnée avec la valeur récupérée et retourne une erreur si la comparaison
n’est pas correcte.
L’utilisation est la suivante : assert(
, suivi du type de comparaison à
appliquer, de la valeur courante, de la valeur souhaitée puis finalement
d’un booléen indiquant si l’erreur doit interrompre l’exécution ou seulement
être signalée dans les logs.
Quelques exemples :
assert("STRING_EQ", ADR02.FICHEADMIN.ADR_ADRPNOM1, "Dossier 1", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.ADR_ADRPNOM2, "Test 1", "true");
assert("NUMBER_EQ", ADR02.FICHEADMIN.PARENT_OCC_2, 0, "true");
assert("STRING_EQ", ADR02.RESSANTE.NOM, "Sylvestre", "true");
assert("STRING_EQ", ADR02.RESSANTE.CANTON, "VD Vaud", "true");
Accès aux champs de l’écran
Les champs de l’écran sont disponibles soit en utilisant soit leur datafield, soit leur identifiant de champ.
Par datafield, les champs seront de la forme ADRDOS.DLABEL
ou
ADRDOS.RESSANTE.NOM
pour les champs de page.
Par identifiant de champ, la forme est Tâche.Champ
, par exemple ADR02.NOM
ou Tâche.Page.Champ
pour les champs de page, par exemple
ADR02.FICHEADMIN.ADR_ADRPNOM1
. Cette forme permet de préciser le champ
exact à récupérer, dans le cas où plusieurs champs partagent le même datafield
(par exemple si des level
sont utilisés afin de présenter plusieurs entrées
provenant de la même table.
Comparaisons disponibles
Comparaisons de nombres
- NUMBER_EQ
- Egalité de nombres. La vérification réussi si les deux nombres sont égaux.
assert("NUMBER_EQ", ADR02.FICHEADMIN.PARENT_OCC_2, 0, "true");
- NUMBER_NOTEQ
- Inégalité de nombres. La vérification réussi si les deux nombres sont différents.
assert("NUMBER_NOTEQ", ADR02.FICHEADMIN.PARENT_OCC_2, 0, "true");
- NUMBER_LESS
- Inégalité de nombres. La vérification réussi si le nombre de gauche est plus petit que le nombre de droite.
assert("NUMBER_LESS", ADR02.FICHEADMIN.PARENT_OCC_2, 5, "true");
- NUMBER_GREATER
- Inégalité de nombres. La vérification réussi si le nombre de gauche est plus grand que le nombre de droite.
assert("NUMBER_GREATER", ADR02.FICHEADMIN.PARENT_OCC_2, 5, "true");
- NUMBER_LESSEQ
- Inégalité de nombres. La vérification réussi si le nombre de gauche est plus petit que ou égal au nombre de droite.
assert("NUMBER_LESSEQ", ADR02.FICHEADMIN.PARENT_OCC_2, 5, "true");
- NUMBER_GREATEREQ
- Inégalité de nombres. La vérification réussi si le nombre de gauche est plus grand que ou égal au nombre de droite.
assert("NUMBER_GREATEREQ", ADR02.FICHEADMIN.PARENT_OCC_2, 5, "true");
Comparaisons de chaînes de charactères
- STRING_EQ
- Egalité de chaînes de charactère. La vérification réussi si la chaîne de gauche est égale à la chaîne de droite.
assert("STRING_EQ", ADR02.FICHEADMIN.ADR_ADRPNOM1, "Dossier 1", "true");
- STRING_NOTEQ
- Inégalité de chaînes de charactère. La vérification réussi si la chaîne de gauche est différente de la chaîne de droite.
assert("STRING_NOTEQ", ADR02.FICHEADMIN.ADR_ADRPNOM1, "Dossier 1", "true");
- STRING_CONTAINS
- Inclusion de chaînes de charactère. La vérification réussi si la chaîne de gauche est contenue dans la chaîne de droite.
assert("STRING_CONTAINS", ADR02.FICHEADMIN.ADR_ADRPNOM1, "Dossier", "true");
- STRING_NOTCONTAINS
- Non-inclusion de chaînes de charactère. La vérification réussi si la chaîne de gauche n’est pas contenue dans la chaîne de droite.
assert("STRING_NOTCONTAINS", ADR02.FICHEADMIN.ADR_ADRPNOM1, "Plateau", "true");
- STRING_EMPTY
- Chaîne vide. La vérification réussi si la chaîne fournie est vide.
assert("STRING_EMPTY", ADR02.FICHEADMIN.ADR_ADRPNOM1, "true");
- STRING_NOTEMPTY
- Chaîne non-vide. La vérification réussi si la chaîne fournie est a une longueur plus grande que zéro.
assert("STRING_NOTEMPTY", ADR02.FICHEADMIN.ADR_ADRPNOM1, "true");
- STRING_MATCH
- Pattern. La vérification réussi si la chaîne fournie est matchée par l’expression régulière fournie.
assert("STRING_MATCH", , ,"true");
Vérifications sur l’état des champs
- FIELD_STATE_IS
- Etat du champ. La vérification réussi si le paramètre d’état fourni sur le champ donné contient le bon paramètre.
assert("FIELD_STATE_IS", "METHODECATEGORIE_NA", "Enabled", "false", "true");
assert("FIELD_STATE_IS", "METHODEITEM_NA", "Enabled", "true", "true");
Vérifications sur les pages
- PAGE_IN_FOLDER
- Présence de la page. La vérification réussi si la page demandée existe dans le dossier courant.
assert("PAGE_IN_FOLDER", "FICHEADMIN", "true");
- PAGE_NOT_IN_FOLDER
- Présence de la page. La vérification réussi si la page demandée n’est pas présente dans le dossier courant.
assert("PAGE_NOT_IN_FOLDER", "FICHEADMIN", "true");
- PAGE_CAN_CREATE
- Création de la page. La vérification réussi si la page demandée peut être créée dans le dossier courant par l’utilisateur.
assert("PAGE_CAN_CREATE", "FICHEADMIN", "true");
- PAGE_CAN_NOT_CREATE
- Création de la page. La vérification réussi si la page demandée ne peut pas être créée dans le dossier courant par l’utilisateur.
assert("PAGE_CAN_NOT_CREATE", "FICHEADMIN", "true");
Vérifications sur les grilles
- GRID_EMPTY
- Grille de résultat vide. La vérification réussi si la grille courante est vide. Cette vérification doit être appelée sur une tâche de vue après avoir lancé la récupération des données.
assert("GRID_EMPTY", "true");
- GRID_NOTEMPTY
- Grille de résultat non-vide. La vérification réussi si la grille courante n’est pas vide. Cette vérification doit être appelée sur une tâche de vue après avoir lancé la récupération des données.
assert("GRID_NOTEMPTY", "true");
- GRID_HAS_VALUES
- Recherche de texte. La vérification réussi si la grille courante contient, dans n’importe quelle ligne et colonne, le texte donné.
assert("GRID_HAS_VALUES", "Dossier de test", "true");
- GRID_HAS_NOT_VALUES
- Recherche de texte. La vérification réussi si la grille courante ne contient pas, dans n’importe quelle ligne et colonne, le texte donné.
assert("GRID_HAS_NOT_VALUES", "Dossier de planche", "true");
- GRID_LINE_HAS_VALUES
- Recherche de texte dans une ligne. La vérification réussi si la ligne à l’indice précisé contient le texte donné. Les lignes sont indicées à 0.
assert("GRID_LINE_HAS_VALUES", 128, "Dossier de test", "true");
- GRID_LINE_HAS_NOT_VALUES
- Recherche de texte dans une ligne. La vérification réussi si la ligne à l’indice précisé ne contient pas le texte donné. Les lignes sont indicées à 0.
assert("GRID_LINE_HAS_NOT_VALUES", 128, "Dossier de planche", "true");
- GRID_COLUMN_HAS_VALUES
- Recherche de texte dans une colonne. La vérification réussi si la colonne à l’indice précisé contient le texte donné. Les colonnes sont indicées à 0.
assert("GRID_COLUMN_HAS_VALUES", 4, "Dossier de test", "true");
- GRID_COLUMN_HAS_NOT_VALUES
- Recherche de texte dans une colonne. La vérification réussi si la colonne à l’indice précisé ne contient pas le texte donné. Les colonnes sont indicées à 0.
assert("GRID_COLUMN_HAS_NOT_VALUES", 4, "Dossier de planche", "true");
Vérifications sur les navigateurs
- NAVIGATOR_NB_ROWS_EQ
- Egalité du nombre de lignes du navigateur. La vérification réussi si le nombre de lignes dans le navigateur est exactement le nombre donné.
assert("NAVIGATOR_NB_ROWS_EQ", 12, "true");
- NAVIGATOR_CURRENT_ROW_ID_EQ
- Egalité de l’indice de la ligne sélectionnée du navigateur. La vérification réussi si l’indice de la ligne actuellement sélectionnée est égal au nombre donné.
assert("NAVIGATOR_CURRENT_ROW_ID_EQ", 12, "true");
- NAVIGATOR_CURRENT_ROW_COL_VALUE_EQ
- Egalité de la valeur à la colonne de la ligne sélectionnée. La vérification
réussi si la valeur à la ligne actuellement sélectionnée et à la colonne
spécifiée est la même que celle précisée.
La comparaison utilisée est un
STRING_EQ
. Les lignes et colonnes sont indicées à 0.
assert("NAVIGATOR_CURRENT_ROW_COL_VALUE_EQ", 2, "Dossier de test", "true");
- NAVIGATOR_ROW_COL_VALUE_EQ
- Egalité de la valeur à la ligne et la colonne spécifiée. La vérification
réussi si la valeur à la ligne et la colonne spécifiée est la même que celle précisée.
La comparaison utilisée est un
STRING_EQ
. Les lignes et colonnes sont indicées à 0.
assert("NAVIGATOR_ROW_COL_VALUE_EQ", 18, 2, "Dossier de test", "true");
- NAVIGATOR_NB_COLS_EQ
- Egalité du nombre de colonnes. La vérification réussi si le nombre de colonnes dans le navigateur courant est égal au nombre précisé.
assert("NAVIGATOR_NB_COLS_EQ", 5, "true");
- NAVIGATOR_COL_ID_EQ
- Egalité de l’identifiant de colonne. La vérification réussi si l’identifiant de la colonne à l’index spécifié est égal à la valeur donnée. Les colonnes sont indicées à 0.
assert("NAVIGATOR_COL_ID_EQ", 1, "NOM", "true");
- NAVIGATOR_COL_DATAFIELDID_EQ
- Egalité de datafield de colonne. La vérification réussi si le datafield de la colonne à l’index spécifié est égal à la valeur donnée. Les colonnes sont indicées à 0.
assert("NAVIGATOR_COL_DATAFIELDID_EQ", 2, "ADRDOS.DLABEL", "true");
Divers
- GLOBAL_NB_ACTIVE_TASK
- Egalité du nombre de tâches actives. La vérification réussi si le nombre de tâches actuellement ouvertes est égal au nombre donné. Ceci permet par exemple de vérifier que toutes les tâches ouvertes ont bien été fermées.
assert("GLOBAL_NB_ACTIVE_TASK", 1, "true");
Exemples
Dans cette section, nous allons prendre et documenter quelques exemples de macros complètes.
ADR02 - Création d’une page et vérification de l’état du dossier
Le but de cette macro est d’ouvrir une super-tâche, d’ouvrir un dossier de test, de créer une nouvelle page puis de vérifier que d’autres pages aient bien été mises à jour par du code métier.
// Toutes les macros doivent commencer par un tag "Macro" qui permet au
// logiciel de trouver le début de la macro et se terminer par la fermeture
// de la section Macro.
Macro:
{
// Défini la taille de la fenêtre de log, ceci est utile pour
// le développement de la macro afin de pouvoir suivre chaque opération
// lors du déroulement
setConsoleBufferWidth(100);
setConsoleCheckColumnPos(85);
// Définition de deux variables afin de simplifier les réutilisation
// du code de changement de société et d'ouverture du dossier de test.
DossierID = "DT-00001";
DomainID = "ORT";
// Vérification du domaine courant. Si le domaine courant n'est pas le
// même que le domaine désiré pour les tests, la macro va ouvrir le
// panel de changement de société et basculer sur la société désirée.
if (CURRENT_DOMAIN != DomainID)
{
executeAction("Click", "Changementdelasocitutilise1");
executeAction("Fill", "SocCombo", DomainID);
executeAction("Click", "ValidateBtn");
macroWaitOnActiveTasks();
}
// On commence une nouvelle section du test. Les sections permettent
// de séparer les différentes parties d'un test afin de plus facilement
// lire les logs lors de la rédaction d'un nouveau test et de son exécution.
consoleBeginCheckLine("Test 01 - Ouverture ADRX2...");
{
// On ouvre la tâche ADRX2 et attend qu'elle soit bien chargée
callTask("ADRX2");
macroWaitOnActiveTasks();
}
// Fin de la section de test. Si aucune erreur n'est survenue depuis
// le début de la section, les logs dans la console SAINet afficheront
// SUCCESS en vert à côté du titre de section, sinon WARNING ou ERROR seront
// affichés.
consoleEndCheckLine();
// Nouvelle section du test avec un titre.
consoleBeginCheckLine("Test 01 - Ouverture du dossier de test 00001");
// Chaque entrée dans le système est identifié par une clé au format XML.
// Dans notre cas, ADR02/ADRX2 opère sur la table ADRDOS et la clé est
// dans la colonne ID_PK. L'identifiant du dossier a été stocké dans la
// variable DossierID au début de notre macro.
// On cherche donc à ouvrir l'entrée ADRDOS.ID_PK = DossierID
KeyXML = "<Key><DataField DataFieldID=\"ADRDOS.ID_PK\">" :: DossierID :: "</DataField></Key>";
// On sélectionne l'entrée par sa clé XML et vérifie si elle a bien
// été trouvée. La fonction retourne true si l'entrée a bien été trouvée,
// false si elle n'a pas été trouvée.
KeyFound = selectRecord(KeyXML);
// Si le dossier de test n'est pas présent, on arrête directement le test.
if (KeyFound == false)
{
consoleError("Le dossier de test n'est pas présent. Arrêt du test.");
return;
}
consoleEndCheckLine();
// Nouvelle section du test qui va tenter de créer une nouvelle page
// Fiche d'admission
consoleBeginCheckLine("Test 01 - Création d'une nouvelle Fiche d'admission");
{
// On clique sur le bouton Nouvelle Page dans la tâche
executeAction("Click", "NewPageBtn");
// On sélectionne le mode "Thème" afin de pouvoir facilement sélectionner
// d'abord le thème puis la page
executeAction("Click", "ThemesRadio");
// On récupère du paramétrage le nom du thème et de la page que
// nous allons créer afin de pouvoir ensuite les retrouver dans
// l'écran de sélection. En passant par les libellés, nous sommes
// sûrs de faire exactement les mêmes opérations que les utilisateurs
// pour créer une nouvelle page.
ficheAdminThemeLabel = getThemeLabel("ADRDOS", "TH_2005");
ficheAdminPageLabel = getDataPageLabel("ADRDOS", "FICHEADMIN");
// Sélection du thème et passage à l'écran suivant
executeAction("ListViewSelect", "ThemesList", ficheAdminThemeLabel);
executeAction("Click", "NewPageDialogOKBtn");
// Sélection de la page et validation de la création
executeAction("ListViewSelect", "PagesList", ficheAdminPageLabel);
executeAction("Click", "NewPageDialogOKBtn");
// Cette méthode de création est la plus complexe et la plus complète.
// Il serait également possible de passer par l'appel script pour
// créer une nouvelle page : createNewPage("FICHEADMIN")
// On vérifie ensuite que tous les champs de la page soient exactement
// comme attendus. La page Fiche Admission doit récupérer lors de
// sa création un certain nombre d'informations.
// assert permet de facilement comparer une valeur de l'écran
// à une valeur fixe et d'arrêter le test si les valeurs ne correspondent
// pas.
assert("STRING_EQ", ADR02.FICHEADMIN.ADR_ADRPNOM1, "Dossier 1", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.ADR_ADRPNOM2, "Test 1", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.ADR_DATNAIS, "30/07/1991", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.ADR_SECUSOC1, "756.7913.6382.85", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.INFOSDIV_PAYS, "CHE Suisse", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.PARENT_NOMPRENOM_1, "Bertholet Marie 1", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.PARENT_TITREADRESSE_1, "1 Madame", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.PARENT_RUE_1, "Rue du Lac 1", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.PARENT_NPVILLE_1, "1000", "true");
assert("NUMBER_EQ", ADR02.FICHEADMIN.PARENT_OCC_2, 0, "true");
// La caisse est obligatoire pour pouvoir valider la page, nous
// allons donc remplir ce champ avec une valeur de test.
executeAction("Fill", "ASSURANCES_NOMCAISSE", "Caisse de test");
// On attache un nouveau médecin au dossier
executeAction("Fill", "RESSANTE_LIENADRESSE_1", "1461829508382");
// On vérifie que les champs liés au nouveau médecin ont été
// remplis automatiquement suite à la saisie
assert("STRING_EQ", ADR02.FICHEADMIN.RESSANTE_LIENADRESSENA_1, "Dr Sylvestre", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.RESSANTE_TEL_PROF_1, "024 455 16 16", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.RESSANTE_ADRESSE_1, "Av. des Alpes 18 D", "true");
assert("STRING_EQ", ADR02.FICHEADMIN.RESSANTE_NPLOCALITE_1, "1450", "true");
// On valide la création de la page Fiche Admission avec le nouveau
// médecin. Une nouvelle page doit être créée par le serveur à ce
// moment-là.
executeAction("Click", "ButtonsPanel.ValidateBtn");
}
consoleEndCheckLine();
// On ferme le dossier puis on le réouvre à nouveau
executeAction("Click", "ButtonsPanel.CloseRecordBtn");
KeyFound = selectRecord(KeyXML);
consoleBeginCheckLine("Test 01 - Vérification de la page Santé");
{
selectPage("RESSANTE", "1");
macroWaitOnActiveTasks();
assert("STRING_EQ", ADR02.RESSANTE.LIENADRESSE, "1461829508382", "true");
assert("STRING_EQ", ADR02.RESSANTE.NOM, "Sylvestre", "true");
assert("STRING_EQ", ADR02.RESSANTE.CANTON, "VD Vaud", "true");
// On ferme la page Santé
executeAction("Click", "ButtonsPanel.CancelBtn");
}
consoleEndCheckLine();
// A la fin du test, on ferme le dossier et la tâche que l'on a ouverte.
executeAction("Click", "ButtonsPanel.CloseRecordBtn");
executeAction("Click", "ButtonsPanel.CloseTaskBtn");
return;
}
ADRX2 - Création d’une nouvelle page et vérification dans un onglet de super-tâche
Dans cet exemple nous allons ouvrir une super-tâche, créer une nouvelle page dans un dossier de test et vérifier que les informations soient bien reprises dans le deuxième onglet de la super-tâche.
// Toutes les macros doivent commencer par un tag "Macro" qui permet au
// logiciel de trouver le début de la macro et se terminer par la fermeture
// de la section Macro.
Macro:
{
// Défini la taille de la fenêtre de log, ceci est utile pour
// le développement de la macro afin de pouvoir suivre chaque opération
// lors du déroulement
setConsoleBufferWidth(100);
setConsoleCheckColumnPos(85);
// Définition de deux variables afin de simplifier les réutilisation
// du code de changement de société et d'ouverture du dossier de test.
DossierID = "DT-00007";
DomainID = "ORT";
// Vérification du domaine courant. Si le domaine courant n'est pas le
// même que le domaine désiré pour les tests, la macro va ouvrir le
// panel de changement de société et basculer sur la société désirée.
if (CURRENT_DOMAIN != DomainID)
{
executeAction("Click", "Changementdelasocitutilise1");
executeAction("Fill", "SocCombo", DomainID);
executeAction("Click", "ValidateBtn");
}
// On commence une nouvelle section du test. Les sections permettent
// de séparer les différentes parties d'un test afin de plus facilement
// lire les logs lors de la rédaction d'un nouveau test et de son exécution.
consoleBeginCheckLine("Test 07 - Ouverture ADRX2...");
{
callTask("ADRX2");
macroWaitOnActiveTasks();
}
consoleEndCheckLine();
consoleBeginCheckLine("Test 07 - Ouverture du dossier de test 00007");
// Chaque entrée dans le système est identifié par une clé au format XML.
// Dans notre cas, ADR02/ADRX2 opère sur la table ADRDOS et la clé est
// dans la colonne ID_PK. L'identifiant du dossier a été stocké dans la
// variable DossierID au début de notre macro.
// On cherche donc à ouvrir l'entrée ADRDOS.ID_PK = DossierID
KeyXML = "<Key><DataField DataFieldID=\"ADRDOS.ID_PK\">" :: DossierID :: "</DataField></Key>";
// On sélectionne l'entrée par sa clé XML et vérifie si elle a bien
// été trouvée. La fonction retourne true si l'entrée a bien été trouvée,
// false si elle n'a pas été trouvée.
KeyFound = selectRecord(KeyXML);
// Si le dossier de test n'est pas présent, on arrête directement le test.
if (KeyFound == false)
{
consoleError("Le dossier de test n'est pas présent. Arrêt du test.");
return;
}
consoleEndCheckLine();
consoleBeginCheckLine("Test 07 - Création d'une nouvelle page Objectif Socio-Professionnel");
{
// On clique sur le bouton Nouvelle Page dans la tâche
executeAction("Click", "NewPageBtn");
// On sélectionne le mode "Thème" afin de pouvoir facilement sélectionner
// d'abord le thème puis la page
executeAction("Click", "ThemesRadio");
// On récupère du paramétrage le nom du thème et de la page que
// nous allons créer afin de pouvoir ensuite les retrouver dans
// l'écran de sélection. En passant par les libellés, nous sommes
// sûrs de faire exactement les mêmes opérations que les utilisateurs
// pour créer une nouvelle page.
objectifSocioThemeLabel = getThemeLabel("ADRDOS", "TH_2020");
objectifSocioPageLabel = getDataPageLabel("ADRDOS", "OBJSOCPR");
// Sélection du thème et passage à l'écran suivant
executeAction("ListViewSelect", "ThemesList", objectifSocioThemeLabel);
executeAction("Click", "NewPageDialogOKBtn");
// Sélection de la page et validation de la création
executeAction("ListViewSelect", "PagesList", objectifSocioPageLabel);
executeAction("Click", "NewPageDialogOKBtn");
// On rempli les champs de la page avec des dates et libellés
// prédéfinis. Ces libellés devront être retrouvés plus tard
// dans l'écran suivant.
executeAction("Fill", "DATE", "15.09.2018");
executeAction("Fill", "DATEFIN", "30.10.2018");
executeAction("Fill", "OBJGENERAL", "Objectif OBJ GEN n.2");
executeAction("Fill", "OBJOAI", "Objectif OBJ SP n.2");
// On valide la création de la page.
executeAction("Click", "ButtonsPanel.ValidateBtn");
}
consoleEndCheckLine();
// Nouvelle section du test dans laquelle nous allons vérifier que les
// données de la page soient bien reprises dans le deuxième onglet de
// la super-tâche.
consoleBeginCheckLine("Test 07 - Vérification des informations du bénéficiaire dans le journal");
{
// On bascule sur le deuxième onglet de la super-tâche. Les onglets
// sont indicés à 0. Lors de l'ouverture de la tâche, on se retrouve
// sur l'onglet 0.
switchToSuperTaskTab(1);
macroWaitOnActiveTasks();
// Dans le deuxième onglet, un script passe la tâche de saisie en
// mode création d'une nouvelle entrée. Certains champs reprennent
// automatiquement les données du dossier.
assert("STRING_EQ", ADR40.ASS_TELEPHONE, "048 / 843 30 03", "true");
assert("STRING_EQ", ADR40.ASS_DOB, "23/12/1995", "true");
assert("STRING_EQ", ADR40.ASS_RVSYN, "01/11/2018 10:00:00", "true");
assert("STRING_EQ", ADR40.ASS_PRPOB, "Objectif OBJ GEN n.2", "true");
assert("STRING_EQ", ADR40.ASS_OBJSP, "Objectif OBJ SP n.2", "true");
// On annule la nouvelle entrée
executeAction("Click", "ButtonsPanel.CancelBtn");
}
consoleEndCheckLine();
// On ferme la tâche ADRX2
executeAction("Click", "ButtonsPanel.CloseTaskBtn");
return;
}