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()
, entre les 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, pour remplir un champ de l’écran, il suffit de le pointer 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’il faut faire avec (Click
, RightClick
par exemple).
Lorsque la pipette est utilisée, 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.
Pour arrêter le mode picker, il suffit d’appuyer sur la touche echap
pour
que tout redevienne normal. A noter que lorsque la touche echap
est utilisée, 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 le texte doit être inséré.
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");
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.
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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
Ce chapitre document quelques exemples de macros client.
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();
}
// Début d'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...");
{
// Ouverture 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 ce 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 la macro.
// Le but est d'ouvrir l'entrée ADRDOS.ID_PK = DossierID
KeyXML = "<Key><DataField DataFieldID=\"ADRDOS.ID_PK\">" :: DossierID :: "</DataField></Key>";
// Sélection de 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, arrêt du 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");
{
// Clique sur le bouton Nouvelle Page dans la tâche
executeAction("Click", "NewPageBtn");
// Sélection du mode "Thème" afin de pouvoir facilement sélectionner
// d'abord le thème puis la page
executeAction("Click", "ThemesRadio");
// Récupération dans le paramétrage du nom du thème et de la page que
// qui va être créé afin de pouvoir ensuite les retrouver dans
// l'écran de sélection. En passant par les libellés, il est assuré
// 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")
// Vérification 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, il faut
// donc remplir ce champ avec une valeur de test.
executeAction("Fill", "ASSURANCES_NOMCAISSE", "Caisse de test");
// Attache un nouveau médecin au dossier
executeAction("Fill", "RESSANTE_LIENADRESSE_1", "1461829508382");
// Vérification 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");
// Validation de 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();
// Fermeture du dossier puis réouverture de ce dernier
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");
// Fermeture la page Santé
executeAction("Click", "ButtonsPanel.CancelBtn");
}
consoleEndCheckLine();
// A la fin du test, fermeture du dossier et de la tâche
executeAction("Click", "ButtonsPanel.CloseRecordBtn");
executeAction("Click", "ButtonsPanel.CloseTaskBtn");
return;
}
Dans cet exemple le but est d’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");
}
// Début d'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 ce 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 la macro.
// Le but est d'ouvrir l'entrée ADRDOS.ID_PK = DossierID
KeyXML = "<Key><DataField DataFieldID=\"ADRDOS.ID_PK\">" :: DossierID :: "</DataField></Key>";
// Sélection de 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, arrêt du 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");
{
// Clique sur le bouton Nouvelle Page dans la tâche
executeAction("Click", "NewPageBtn");
// Sélection du mode "Thème" afin de pouvoir facilement sélectionner
// d'abord le thème puis la page
executeAction("Click", "ThemesRadio");
// Récupération dans le paramétrage du nom du thème et de la page qui
// va être créée afin de pouvoir ensuite les retrouver dans
// l'écran de sélection. En passant par les libellés, il est assuré
// 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");
// Les champs de la page sont remplis 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");
// Valide la création de la page.
executeAction("Click", "ButtonsPanel.ValidateBtn");
}
consoleEndCheckLine();
// Nouvelle section du test dans laquelle sera vérifié 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");
{
// 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, l'onglet 0 est ouvert.
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");
// Annulation la nouvelle entrée
executeAction("Click", "ButtonsPanel.CancelBtn");
}
consoleEndCheckLine();
// Fermeture la tâche ADRX2
executeAction("Click", "ButtonsPanel.CloseTaskBtn");
return;
}