web-dev-qa-db-fra.com

Comment utiliser la fonction d'élément de clic avec la structure de robot lorsque l'élément n'a pas d'identifiant ou de nom?

J'utilise actuellement la bibliothèque Selenium2 dans un framework de robot pour automatiser certains tests Web. Actuellement, je ne parviens pas à automatiser le clic d'un bouton de connexion avec la fonction Click Element.

C'est l'élément que je voudrais utiliser:

<a class="transparentBtn loginLink ng-scope" ng-click="commonService.gigyaRaasLogin()" translate="BTN_ADMIN_LOGIN_WATCHLIST">LOGIN</a>

et ceci est le xpath si je copie depuis la console: //*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a

J'ai du mal à trouver le localisateur à utiliser si je veux cliquer sur cet élément.

Voici certaines des choses que j'ai essayées jusqu'à présent:

  1. Click Element css=a.loginLink
  2. Click Element link=LOGIN
3
Zubair

Essayez de localiser css unique (1 nœud correspondant) ou essayez ceci

Wait Until Element Is Visible   xpath=//*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a      10
Click Element    xpath=//*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a
3
Sachhya

Je recommande d'être un peu plus flexible. La bonne approche si vous trouvez l’équilibre entre définir flexible et unique. Sinon, le plus petit changement de site rompra votre test.

L'exemple suivant doit correspondre à l'exemple précédent:

  • Correspond à tout lien contenant du texte LOGIN

    Click Element       //a[contains(text(),'LOGIN')]
    
  • Correspond à tout élément contenant du texte LOGIN

    Click Element       //*[contains(text(),'LOGIN')]
    
  • Correspond à tout élément où l'attribut de classe est égal à "transparentBtn loginLink ng-scope"

    Click Element       //a[@class="transparentBtn loginLink ng-scope"]
    
  • Vous pouvez vérifier plusieurs attributs en même temps

    Click Element       //a[@class='transparentBtn loginLink ng-scope' and @ng-click='commonService.gigyaRaasLogin()']
    
  • Vous pouvez utiliser contains () pour vérifier si une partie chaîne de l'attribut de classe

    Click Element       //a[contains(@class,'loginLink')]
    
4
Krisz

Pour répondre à la question dans le titre, la bibliothèque Selenium2Library prend en charge de nombreux localisateurs différents. Le plus expressif est xpath, qui peut être utilisé pour trouver à peu près n'importe quoi. Voir la section Localisation ou spécification d’éléments dans la documentation Selenium2Library

Dans votre cas, si vous cliquez sur un lien, click link link=LOGIN devrait fonctionner. Si ce n'est pas le cas, il se peut que le lien se trouve dans un iframe ou qu'il soit caché par des CSS (certains frameworks comme angular et react masquent des éléments et les remplacent par leurs propres éléments)

0
Bryan Oakley