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

  1. Opération sur l’interface (click, ouverture de menus ou de tâche, focus sur champs, etc…)
  2. Opération sur les champs (Saisie de filtre, saisie de champs)
  3. 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 macros permet de facilement créer des fichiers de script automatique qui vont piloter le logiciel

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

  1. Nouveau fichier
  2. Ouvrir un fichier existant
  3. Sauvegarder le fichier en cours ou définir son emplacement de sauvegarde
  4. Le Picker permet de selectionner des éléments de l’interface pour connaitre leur nom (voir la section dédiée au Picker)
  5. Nom du composant selectionné avec le Picker
  6. Ouvre l’importeur de macros à partir d’écran xml
  7. permet de lancer le script courant de l’éditeur dans le lecteur de macros
  8. 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'importeur de xml permet de facilement créer des fichiers de script automatique qui vont piloter le logiciel

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

  1. Coller dans cette zone le xml de l’écran à importer
  2. 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
  3. Le bouton Import permet de regénérer le script à droite basé sur l’entrée XML de gauche
  4. 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

Ce chapitre document quelques exemples de macros client.

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();
    }

    // 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;
}

ADRX2 - Création d’une nouvelle page et vérification dans un onglet de super-tâche

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;
}