*** Settings *** Documentation Fonctions et méthodes de traitement *** Keywords *** Wait Until All JavaScript Finished [Tags] utils [Documentation] Vérifie 3 conditions qui sont censées indiquer ensemble ... que toutes les requètes réseau et traitements JavaScript sont finis. ... 1. Pas de requète XHR/Ajax en cours (partie réseau, pas callbacks) ... 2. Ressources de la page chargées (css, images) qui sinon n'est pas ... convert par les autres vérifications. ... 3. Message(event) queue vide. ... On vérifie que tous les évenements *déclenchés* sont finis: onClick, ... onChange, onLoad, etc et n'importe quel callback en attente. Pas ... ceux qui attendent un timer(setTimeout) ou le retour d'une XHR. ... Quand le timer/XHR finisent, là les callbacks sont mis dans la queue. ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#Adding_messages ... Attention: ne prend pas en compte le cas d'un traitement déclenché par ... un setTimeout(). Si les 3 conditions passent à true avant que le timer ... soit fini, c'est perdu ! ... Dépends de jQuery pour 1. mais il doit y avoir moyen de faire sans. ${js}= catenate SEPARATOR=\n ... // 1. ... if($.active !== 0) return false; ... // ... // 2. ... if(document.readyState !== "complete") return false; ... // ... // 3. Pour ce faire, on ajoute un message dans la queue et on attend ... // qu'il soit traité. ... // Le flag est stocké sur window pour en faire une variable globale. ... setTimeout(function() { window.allEventsFinished = true }, 0); ... if(window.allEventsFinished !== true) return false; ... // ... // On met le flag à null pour que cela puisse servir plus d'une fois. ... // Ce qui est utile en cas d'alternance d'XHR et callbacks où on risque ... // d'avoir besoin que le check 2 et 3 bloquent alternativement. ... window.allEventsFinished = null; ... return true; // Tout devrait être terminé! Wait For Condition ${js} ${TIMEOUT} Isolation d'un contexte [Tags] utils [Arguments] ${values} [Documentation] Permet d'isoler un contexte avec la création : ... - d'une collectivité mono et de son param minimum (dep, com et insee) ... - d'une direction ... - d'une division ... - d'un utilisateur avec le profil "GUICHET UNIQUE" ... - d'un utilisateur avec le profil "INSTRUCTEUR" et de son instructeur ... - d'une affectation automatique de l'instructeur sur les PCI ... ### ... Liste des valeurs à passer dans le dictionnaire en argument : ... om_collectivite_libelle ... departement ... commune ... insee ... direction_code ... direction_libelle ... direction_chef ... division_code ... division_libelle ... division_chef ... guichet_om_utilisateur_nom ... guichet_om_utilisateur_email ... guichet_om_utilisateur_login ... guichet_om_utilisateur_pwd ... instr_om_utilisateur_nom ... instr_om_utilisateur_email ... instr_om_utilisateur_login ... instr_om_utilisateur_pwd Ajouter la collectivité depuis le menu ${values.om_collectivite_libelle} mono Ajouter le paramètre depuis le menu departement ${values.departement} ${values.om_collectivite_libelle} Ajouter le paramètre depuis le menu commune ${values.commune} ${values.om_collectivite_libelle} Ajouter le paramètre depuis le menu insee ${values.insee} ${values.om_collectivite_libelle} Ajouter la direction depuis le menu ${values.direction_code} ${values.direction_libelle} null ${values.direction_chef} null null ${values.om_collectivite_libelle} Ajouter la division depuis le menu ${values.division_code} ${values.division_libelle} null ${values.division_chef} null null ${values.direction_libelle} Ajouter l'utilisateur depuis le menu ${values.guichet_om_utilisateur_nom} ${values.guichet_om_utilisateur_email} ${values.guichet_om_utilisateur_login} ${values.guichet_om_utilisateur_pwd} GUICHET UNIQUE ${values.om_collectivite_libelle} Ajouter l'utilisateur depuis le menu ${values.instr_om_utilisateur_nom} ${values.instr_om_utilisateur_email} ${values.instr_om_utilisateur_login} ${values.instr_om_utilisateur_pwd} INSTRUCTEUR ${values.om_collectivite_libelle} Ajouter l'instructeur depuis le menu ${values.instr_om_utilisateur_nom} ${values.division_libelle} instructeur ${values.instr_om_utilisateur_nom} &{args_affectation} = Create Dictionary ... instructeur=${values.instr_om_utilisateur_nom} (${values.division_code}) ... om_collectivite=${values.om_collectivite_libelle} ... dossier_autorisation_type_detaille=Permis de construire pour une maison individuelle et / ou ses annexes Ajouter l'affectation depuis le menu ${args_affectation} Depuis le contexte d'un enregistrement [Tags] generic [Arguments] ${args} [Documentation] GENERIC - Accède à la fiche de consultation de ... l'enregistrement. ... Liste des valeurs à déclarer dans le dictionnaire **args** : ... * obj (objet de l'enregistrement) ... * selection_col (colonne pour la recherche simple) ... * search_value (valeur pour la recherche simple) ... * click_value (valeur à cliquer) Depuis le listing ${args.obj} Use Simple Search ${args.selection_col} ${args.search_value} Click Element Until No More Element link:${args.click_value} Saisir l'enregistrement [Tags] generic [Arguments] ${values} [Documentation] GENERIC - Saisie un enregistrement. ... Chaque élément de la liste **values** est une liste contenant trois ... valeurs (l'ordre de déclaration est important) : ... * le libelle du champ à saisir ... * la valeur à saisir ... * le keyword à utiliser pour la saisie de la valeur :FOR ${item} IN @{values} \ Run Keyword ${item[2]} ${item[0]} ${item[1]} Ajouter l'enregistrement depuis le menu [Tags] generic [Arguments] ${args} ${values} [Documentation] GENERIC - Ajoute un enregistrement. ... Liste des valeurs à déclarer dans le dictionnaire **args** : ... * obj (objet de l'enregistrement) ... * msg (message de réussite à la validation du formulaire) ... Chaque élément de la liste **values** est une liste contenant trois ... valeurs (l'ordre de déclaration est important) : ... * le libelle du champ à saisir ... * la valeur à saisir ... * le keyword à utiliser pour la saisie de la valeur Depuis le listing ${args.obj} Click On Add Button Saisir l'enregistrement ${values} Click On Submit Button ${exist} = Run Keyword And Return Status Dictionary Should Contain Key ${args} msg Run Keyword If ${exist} == True Valid Message Should Contain ${args.msg} Modifier l'enregistrement depuis le menu [Tags] generic [Arguments] ${args} ${values} [Documentation] GENERIC - Modifie un enregistrement. ... Liste des valeurs à déclarer dans le dictionnaire **args** : ... * obj (objet de l'enregistrement) ... * selection_col (colonne pour la recherche simple) ... * search_value (valeur pour la recherche simple) ... * click_value (valeur à cliquer) ... * msg (message de réussite à la validation du formulaire) ... Chaque élément de la liste **values** est une liste contenant trois ... valeurs (l'ordre de déclaration est important) : ... * le libelle du champ à saisir ... * la valeur à saisir ... * le keyword à utiliser pour la saisie de la valeur Depuis le contexte d'un enregistrement ${args} Click On Form Portlet Action ${args.obj} modifier Saisir l'enregistrement ${values} Click On Submit Button ${exist} = Run Keyword And Return Status Dictionary Should Contain Key ${args} msg Run Keyword If ${exist} == True Valid Message Should Contain ${args.msg} Supprimer l'enregistrement depuis le menu [Tags] generic [Arguments] ${args} [Documentation] GENERIC - Supprime l'enregistrement. ... Liste des valeurs à déclarer dans le dictionnaire **args** : ... * obj (objet de l'enregistrement) ... * selection_col (colonne pour la recherche simple) ... * search_value (valeur pour la recherche simple) ... * click_value (valeur à cliquer) ... * msg (message de réussite à la validation du formulaire) Depuis le contexte d'un enregistrement ${args} Click On Form Portlet Action ${args.obj} supprimer Click On Submit Button ${exist} = Run Keyword And Return Status Dictionary Should Contain Key ${args} msg Run Keyword If ${exist} == True Valid Message Should Contain ${args.msg}