Retour sur deux fonctionnalités utiles de Selenium IDE : la récupération de la valeur de l'attribut href d'une liste d'éléments et l'utilisation de conditions If dans la commande gotoif.
-
Récupérer la valeur de l’attribut href d’une liste d’éléments et les ouvrir une à une dans une fenêtre
Pour récupérer des valeurs de même nature dans une liste, il faut utiliser une boucle. La commande while/endWhile de Selenium IDE est nécessaire pour cela. Si on prenait la structure HTML suivante :
On voudrait récupérer la valeur de l’attribut href de toutes les balises ayant pour classe « lien-livres ».
On va stocker dans une variable mylink la valeur de l’attribut href du sélecteur //div[3]/div/div/a, à savoir de la première balise div de classe "view-row-odd" et "views-row-first" ou encore le div après div[3].storeAttribute | //div[3]/div/div/a@href | mylink
Il nous faut donc boucler la boucle au niveau de ce deuxième div pour avoir toutes les valeurs de tous les a. On utilise le sélecteur de position dans le div de la manière suivante,
storeAttribute | //div[3]/div[position()=${j}]/div/a@href | mylink
où la variable j est la position du div. Ici donc on bouclera 3 fois la boucle pour obtenir toutes les valeurs href de la balise a.
Ensuite on récupère le nombre de div ayant la classe views-row, une classe commune à tous les div qu’on veut boucler.
Nous avons également besoin de la commande suivante pour marquer la page courante en lui donnant un nom window, ainsi nous pourrons sélectionner la page du div à boucler par la suite :storeEval | selenium.getAllWindowNames()[1] | window
Enfin, si on met bout à bout tous ces codes, on obtient le résultat suivant :
store | 1 | j
storeXpathCount | xpath=(//div[contains(@class,"results-data")]/div[contains(@class,"views-row")]) | elem
storeEval | selenium.getAllWindowNames()[1] | mainWindow
while | storedVars.j <= storedVars.elem
storeAttribute | //div[3]/div[position()=${j}]/div/a@href | mylink
openWindow | / ${mylink}
selectWindow | ${mainWindow}
store | javascript{storedVars.j++;}
endWhile
Et voilà.
-
Selenium IDE – Utilisation de condition If avec gotoIf
Selenium IDE possède la commande gotoIf pour simuler le if condition elseif. Voici les lignes de commandes :
1 gotoIf | [condition1] | label1
2 gotoIf | [condition2] | label2
3 label | label1
4 [instructions1]
5 goto | end
6 label | label2
7 [instructions2]
8 label | end
Comme Selenium lit de ligne en ligne, il faudrait que l’on puisse passer à d’autres lignes inférieures pour ne pas exécuter les lignes concernant la condition elseif. Goto et gotoIf permettent de sauter des lignes et d’aller au label spécifié par eux.Sur la première ligne, on dit à Selenium d’aller à label1 si la condition1 est vérifiée, label1 étant spécifié à la ligne 3. De même sur la deuxième ligne, si la condition2 est vérifiée, on va au label2, après avoir exécuté les instructions du label1 on saute les instructions du label2.
Exemple concret :
un test qui voudrait parcourir un tableau (avec pagination) à la recherche d’une valeur et quand on l’aura trouvée, on clique sur la valeur.
Supposons que le tableau a pour id « idTab » et possède 5 colonnes et 10 lignes maximum par pagination et que la pagination est contenu dans un div dont le id est « tabTache_paginate ». On voudrait trouver la valeur « valexacte » dans la troisième colonne du tableau. Une fois la valeur trouvée, on clique dessus.Nous aurons besoin de :
- parcourir chaque ligne du tableau
nous avons besoin du nombre de ligne de la page affichée pour pouvoir boucler une boucle sur ces lignes avec la commande while/endWhilestoreXpathCount | xpath= //table[@id='IdTab']/tbody/tr | tceci permet de compter le nombre de tr du tableau ayant pour ID « IdTab » et de stocker dans la variable t ce nombre, on a ainsi le nombre de ligne du tableau. - Comparer la valeur parcourue dans le tableau et celle recherchée
et si elle correspond, aller à l’opération clic sinon continuer la recherche et la comparaison. C’est ici qu’on aura besoin de gotoIf. - Une fois la première page parcourue, parcourir chaque page (pagination) du tableau
donc il faut connaitre le nombre de page total pour pouvoir boucler une boucle sur chaque pagestoreText | //div[@id='tabTache_paginate']/span/a[last()] | mici il s’agit de lire la valeur du contenu du lien a de la pagination pour obtenir le nombre de page de pagination.
Résultat final :
store | 1 | k
store | 1 | a
//trouver le nombre de page du tableau
storeText | //div[@id='tabTache_paginate']/span/a[last()] | m
//boucler sur toutes les pages de pagination
while | storedVars[‘a’]<=storedVars[‘m’]
//récupérer le nombre de lignes du tableau
storeXpathCount | xpath=//table[@id=’IdTab’]/tbody/tr | t
//boucler sur chaque ligne du tableau
while | storedVars[‘k’]<=storedVars[‘t’]
//récupérer la valeur de chaque ligne et la comparer avec la valeur recherchée
storeText | //table[@id=’IdTab’]/tbody/tr[position()=${k}]/td[3] | d
//if condition elseif
gotoIf | storedVars[‘d’]== ‘valexact’ | match
gotIf | storedVars[‘d’] !== ‘valexact’ | next
label | next
store | javascript{storedVars.k++}
endWhile
store | javascript{storedVars.a++}
click | link=${a}
endWhile
goto | end
label | match
//cliquer sur le lien qui correspond
click | link=${d}
label | end - parcourir chaque ligne du tableau