Test Selenium IDE – quelques fonctionnalités utiles

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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *