- Exemple de test (après avoir installé un Paheko sur sa machine, sur
le vhost “paheko.localhost”, sans base de données) :
- se rendre à l’adresse http://testpaheko.local.bzh
- remplir le formulaire d’installation
- valider le formulaire (cliquer sur le bouton en bas de page)
- sur la page suivante cliquer ensuite sur “configuration” dans le menu
- vérifier que les informations de l’association indiquées lors l’installation se retrouvent exactement dans les champs de la configuration
- cliquer sur le menu “Membres”
- vérifier que le membre par défaut est bien dans la liste
- cliquer sur la fiche du membre
- vérifier que l’adresse e-mail et autres infos remplies à l’installation sont bien là
- mdp admin : interpeller noircir colis allumer
- Catégorie : choisir parmi les possibilités
- Rattacher à un membre : non / choisir un membre
- Numéro : par défaut ou à saisir
- Nom & prénom (oblig)
- Adresse E-Mail
- Adresse postale
- Code postal
- Ville
- Numéro de téléphone
- Inscription à la lettre d’information
- Date d’inscription
- vérifier catégorie du membre créé
- utiliser et vérifier le numéro du responsable
- gérer le cas où les membres occupent plus d’une page
- ¿ vérifier si on peut supprimer un tri inutile ?
Le nouveau tri est comme ceci : colonne IS NULL DESC, colonne DESC, numero DESC (DESC est remplacé par ASC pour un tri croissant) Autre changement du coup : les champs non-vides sont placés en dernier pour un tri croissant, en premier pour un tri décroissant.
Tri par ville
- ville (dé)croissant, numéro membre (dé)croissant
- ville vide en fin(début), numéro membre (dé)croissant
- le test pour savoir s’il y a plus d’un parent qui correspond à la recherche (lignes 64+) ne fonctionne plus
- pour la colonne “rattaché à” : on met un tri sur la qualité de
parent, puis le nom du parent en premier, puis le nom du membre,
puis son numéro :
- id_parent IS NULL ASC, nom_parent DESC, nom_membre DESC, numero DESC
- parent (dé)croissant, nom membre (dé)croissant, numéro (dé)croissant
- parent vide à la fin, nom membre (dé)croissant, numéro (dé)croissant
- id_parent IS NULL ASC, nom_parent DESC, nom_membre DESC, numero DESC
- is_parent ASC, nom_membre DESC, numero DESC
- si la recherche trouve un seul résultat, elle affiche directement la fiche du membre
- s’il y a plusieurs résultats, la recherche affiche l’onglet « Recherche avancée » avec les résultats
- s’il n’y a aucun résultat, la recherche affiche l’onglet « Recherche avancée » avec une liste de résultats vide
- garantir l’unicité du nom cherché
- => fiche membre
- => onglet « Recherche avancée »
La recherche rapide ne se fait plus que dans les catégories non cachées !!!
- => onglet « Recherche avancée »
- NB : le tri des membres ne change pas après suppression
- le runner ne trouve pas le bouton suppriùmer du dialogue de confirmation de suppression
- si un seul membre => en créer un deuxième
- chercher le premier numéro disponible
- chercher puis modifier le premier membre de numéro différent de 1
- modifier les différents champs
- numéro
- catégorie
- nom, prénom
- courriel
- adresse
- code postal
- ville
- téléphone
- lettre info
- date inscription
- enregistrer
- vérifier les infos
- sélectionner un membre actif (pas ancien, car pas le droit de se connecter)
- cliquer Définir mdp
- saisir deux fois un mdp généré
- mémoriser nom et adresse courriel
- déconnecter
- connexion avec
- adresse courriel
- mdp
- vérifier Nom présent page accueil
- vérifier numéro membre sur fiche membre
- créer deux membres et mémoriser leurs numéros
- rattacher le premier au deuxième à l’aide de son numéro
- vérifier les deux membres
- Si déjà tu peux tester qu’un fichier CSV donné s’importe bien, c’est déjà génial je pense
- ¿ Tester les possiblités d’ignorer certains champs ?
- Tous les membres trouvés dans le fichier seront créés.
- Cela peut amener à avoir des membres en doublon si on réalise plusieurs imports du même fichier.
- Les membres présents dans le fichier qui mentionnent un numéro de membre seront mis à jour en utilisant ce numéro.
- Si une ligne du fichier mentionne un numéro de membre qui n’existe pas ou n’a pas de numéro de membre, l’import échouera.
- Met à jour la fiche d’un membre si son numéro existe, sinon crée un membre si le numéro de membre indiqué n’existe pas ou n’est pas renseigné.
- Je ne sais pas ce que permet Selenium, mais si déjà tu peux tester que ça produit bien un fichier de plus de 0 octets ça sera bien.
- Résultat avec le runner : le fichier exporté est placé dans le
répertoire ~/Downloads ; parfois l’export échoue
- MAIS l’ajout d’une opération après le déclenchement de l’enregistrement permet sa bonne terminaison
- créer un membre
- lui attribuer un mot de passe
- mettre la durée de conservatin à 0
- déconnexion admin
- connexion du membre
- vérifier journal connexion vide
- déconnexion
- connexion admin
- vérification absence membre dans journal
- vérifier ensuite que les champs membre ajoutés fonctionnent bien dans la fiche du membre (et ce pour chaque type de champ ?) et apparaissent dans la liste des membres
- les champs prédéfinis s’ajoutent avant les champs personnalisés et semble-t-il de temps en temps, le nouveau champ (perso) est ajouté en avant-dernière position !
- avec le driver de chrome :
- saisir le mois
- envoyer le code de la touche de tabulation
- saisir l’année
fonctionne avec runner et le driver de chrome mais probablement pas avec celui de firefox
- utilise le fichier /tmp/cv.pdf
- PB : dans la fiche membre, le nom du fichier comporte un « ­ » avant le point
- utilise les fichiers /tmp/cv.pdf et /tmp/cv2.pdf
- PB : dans la fiche membre, le nom du fichier comporte un « ­ » avant le point
- question : ce mot de passe ne sert pas à se connecter, donc à quoi sert-il ?
- pour vérifier le mot de passe, il faut :
- connecter le membre
- modifier les infos personnelles
- afficher le mot de passe :
- NB : le mdp qui s’affiche (en fonctionnement interactif) est celui enregistré par le navigateur pour l’admin !!
- NB : en mode runner, le champ est vide =>impossible de vérifier le mdp
- Remarque : la modification du mot de passe est prise en compte mais on ne peut le voir qu’en exportant les données de la fiche membre
- Pour définir le pays par défaut, il faut indiquer son code à deux lettres et non son nom complet => à documenter ou à changer
- c’est un champ calculé à partir de la date d’inscription
- utilise le fichier /tmp/photo.jpg
- ajouter année naissance
- ajouter âge
- tenir compte du cas où il y a déjà un champ âge/date naissance
- ajouter date naissance
- ajouter âge
- tenir compte du cas où il y a déjà un champ âge/année naissance
- récupérer l’identifiant d’un champ déjà présent
- messages d’erreur différents selon le champ :
- Ce nom de champ est déjà utilisé par un autre champ : adresse, code_postal,
ville, telephone, lettre_infos_1, date_inscription
- numero : Aucun champ de numéro de membre n’existe
- nom : Aucun champ de nom de membre n’existe
- email : Aucun champ d’identifiant de connexion n’existe
Pas sûr qu’on puisse : la saisie des champs est contrôlée (partiellement ?)
Même si on ne saisit pas un numéro, il sera automatiquement affecté
- le test est-il pertinent ?
- faut-il empêcher cette modification ?
- la modification n’est plus possible
- après « se connecter à sa place » :
- clic « Mes infos personnelles » échoue
- impossible ensuite de se connecter en tant qu’admin
- réinstallation nécessaire !
- avec attribution d’un mot de passe, changement email possible, mais :
- attente trèès longue lors enregistrement
- fonctionne, mais temps d’attente long lors de l’enregistrement du nouveau mot de passe
- est-ce utile de tester d’autres changements d’ordre ?
- interdire la connexion d’une catégorie
- ajouter un membre dans cette catégorie
- lui attribuer un mot de passe
- essayer de connecter le membre
- vérifier l’échec
- interdire la connexion d’une catégorie
- ajouter un membre dans cette catégorie
- lui attribuer un mot de passe
- essayer de connecter le membre
- vérifier l’échec
- vérifier que le droit lecture/écriture/administration fonctionne bien, notamment via le bouton “connexion à la place du membre”
- Gestion des membres
- Pas d’accès
- Lecture uniquement (peut voir les informations personnelles de tous les membres, y compris leurs inscriptions à des activités)
- Lecture & écriture (peut ajouter et modifier des membres, peut changer de catégorie un membre d’une catégorie ayant des droits égaux ou moindres, ne peut pas supprimer des membres, peut inscrire des membres à des activités, peut envoyer des messages collectifs)
- Administration (peut tout faire)
- certains champs dépendent d’un autre : âge dépend de l’année de naissance => on ne peut supprimer année si âge est présent !
- PROBLÈME : le clic sur le bouton de confirmation de la suppression est pris en compte par l’IDE mais pas toujours par le runner
- même problème en utilisant du code javascript pour ouvrir le dialogue de confirmation dans un onglet plutôt qu’une popup ; dans ce cas, c’est la case à cocher qui n’est pas cochée !
- échec => inutile de perdre davantage de temps !!!
- cas normal
- choix du PC
- dates exercice
- vérifications
- nombre d’écritures
- PC
- dates exercice
- tester erreur saisie dates
- tester modif pays
Un autre test pour la compta :
- se rendre à l’adresse http://testpaheko.local.bzh/admin/ (après avoir été connecté dans un test précédent, que je ne détaille pas ici)
- cliquer sur le menu “Saisie” dans la compta
- cliquer sur “recette”
- renseigner un libellé, un montant, les comptes, autres champs etc.
- valider le formulaire
- sur la page de détail de l’écriture, vérifier que toutes les mentions, comptes et montants correspondent à ce qui a été saisi
- se rendre sur la page compte de résultat
- vérifier que le montant de la recette apparaît bien dans les produits, que le nom du compte est bon, etc.
- il faut absolument fermer le dropdown avant de cliquer ailleurs
- compter le nombre d’éléments de la table => nb_elem
- itérer avec un compteur (while) => num
- accéder à l’élément courant grâce au compteur //tr[${num}]
| Command | Target | Value |
|---|---|---|
| storeXpathCount | xpath=//table[@class="list"]/tbody/tr/th//span | nb_elem |
| executeScript | return 1 | num |
| while | ${num} <= ${nb_elem} | |
| storeText | xpath=//table[@class="list"]/tbody/tr[${num}]/th//span | nom |
| echo | ${nom} | |
| execute script | return ${num} + 1 | num |
| end |
if (${nb_parents} >= 2)
{ ... }
else if (${nb_total_membres} > 2)
// ce bloc est exécuté même si nb_parents >= 2
{ ... }**Contournement**
if (${nb_parents} >= 2)
{ ... }
else if ${nb_parents} < 2 && ${nb_total_membres} > 2
{ ... }- pas d’apostrophe dans les éléments de tableau, sinon problème
- si apostrophe dans une chaîne => lors de l’appel d’un script : problème avec l’IDE mais pas avec le runner
Il y a un bug, référenceé ici : SeleniumHQ/selenium-ide#1819 qui affiche un message d’erreur après une longue pause :
l’ajout de « detectOpenHandles » est strictement sans effet… D’où la tentative de contournement dans runtest
Les valeurs récupérées sur une page sont des chaînes => à convertir en nombre avec Number pour faire une comparaison numérique (ex : numéro de membre)
Impossible de sélectionner un élément avec l’attribut **display:none** ; il faut préalablement lui mettre l’attribut **display:block**
- **Attention**, un numéro qui commence par 0 est formatté avec un espace entre les paires de chiffres !!
// refusé par IDE mais accepté par runner
return ${t}[${i}]voir SeleniumHQ/selenium-ide#1603
- Syntaxe accès aux objets : ${objet}.attribut ou ${objet}.methode
// refusé par le runner
return ${membre.nom}
// accepté
return ${membre}.nom;Pour (dés)activer un <input type=”checkbox”, il faut utiliser **(un)check** car le runner (de chrome ?) n’aime pas **click**
L’appel de fonction définie dans le script avec une variable de l’IDE en param ne fonction qu’avec Chrome. NB : vérifier exactement ce qui ne fonctionne pas avec firefox ?
- Ne fonctionne qu’avec chrome
- insérer (type) le chemin du fichier dans le champ de saisie du nom
- cliquer le bouton d’envoi
- Important : Ne pas cliquer sur le bouton d’ouverture du sélecteur de fichier : il ne se refermera pas et masquera les éléments de la fenêtre précédente qui ne pourront plus être activés
- dans la commande qui ouvre une nouvelle fenêtre ou un nouvel onglet,
cliquer l’icône « Add new window configuration » tout à droite de la
commance ; saisir un nom de fenre qu’on pourra utiliser plus loin
pour sélectionner la fenêtre quand elle sera ouverte avec la
commande :
select window | handle=${nom_fenêtre} - voir 13-01 suppression adresse
- les libellés des boutons du menu principal n’apparaissent pas et ne sont donc pas trouvés, ni par un chemin xpath, ni par un chemin css ; il faut donc utiliser un chemin qui s’arrête à l’url du lien correspondant.
- les sous-menus n’apparaissent pas => pas d’accès direct => il faut procéder par étape : menu puis sous-menu
- lors de l’ajout d’un membre, le bouton Enregistrer n’est pas visible
et ne peut être cliqué ; pour le rendre visible, il faut passer
d’une rubrique à l’autre avec la touche Tab ou avec PageDown, par
exemple après avoir saisi la date.... **mais** :
- avec navigateur chrome : pas de sélecteur de date ! => il faut ruser :(
- même ainsi, il se peut que le bouton ne puisse recevoir le clic (voir ci-dessous) ; apparemment le webdriver firefox ne réagit pas à PageDown et celui de chrome réagit à Tab, mais ça ne suffit pas à rendre cliquable le bouton Enregistrer
Bref, ce qui marche pour le driver chrome ne marche pas pour celui de firefox et vice-versa..
> selenium-side-runner -c "browserName=firefox" -f "mobile" paheko_v4.side
Element <button class="main icn-btn" name="save" type="submit"> is not clickable
at point (125,633) because another element <ul> obscures itquand l’inspecteur est ouvert, le clic sur le sélecteur d’identité des membres (Configuration/Membres/Préférences) déclenche une exception javascript (TypeError: document.querySelector(…) is null) sur l’instruction :
document.querySelector('input').focus();- OK avec l’IDE
- échec systématique avec le runner => c’est l’admin qui est connecté, pas le membre choisi
- OK avec l’IDE
- échecs aléatoires avec le runner
- le clic sur le bouton de confirmation de la suppression n’est pas
pris en compte
- même problème en utilisant du code javascript pour ouvrir le
dialogue de confirmation dans un onglet plutôt qu’une popup ; dans ce cas, c’est la case à cocher qui n’est pas cochée !
