2009-04-20 13 views
0

Je suis nouveau dans le domaine du sélénium et des tests. J'essaye de capturer l'id d'un élément de lien hypertexte qui est dynamiquement généré par partie. L'action click est enregistrée comme ci-dessous quand je clique sur sélénium, les parties en gras sont générées dynamiquement, elles sont nombreuses sur ma page et peuvent différer d'un site à l'autre (je suis en train de tester cms). J'aimerais capturer et cliquer sur n'importe qui. C'est ce que j'ai essayé de faire depuis:En cliquant sur plusieurs parties de liens générées dynamiquement

storeAttribute | // bouton @click onclick = " setLocation (javascript {baseUrlSelection()} ['/ checkout/panier/ajouter/uenc/(a-zA-Z0-9) /product/(0-9)]' ') " | myid


echo | $ {myid} |


clickAndWait | $ {Myid [0]}

Il ne fonctionne pas Mes liens ressemble à ceci lorsque l'action de clic est enregistré en sélénium: buton [@ onclick = "setLocation (» http://localhost/mydomaine/index.php/checkout/cart/add/uenc/aHR0cDovL2xvY2FsaG9zdC9NYWdlbnRvSGls

YWlyZURlbW9WMi9tYWdlbnRvZGVtb0hpbGFpcmVWMi9pbmRleC5waHAvY2F0ZWdvcmllMS5odG1sP19fX1NJRD1V/product// ') "> Veuillez nous aider.

+0

Avez-vous obtenu ce tri? –

Répondre

0

Vous pouvez utiliser XPath contains() fonction pour localiser les éléments:

storeAttribute | //input[contains(@onclick,"setLocation('http://localhost/mydomaine/index.php/checkout/cart/add/uenc/")]@class | myid 
echo | ${myid} 
clickAndWait | //input[contains(@onclick,"setLocation('http://localhost/mydomaine/index.php/checkout/cart/add/uenc/")]@class 

Il est aussi une bonne idée de référencer les éléments par autre chose que leur attribut onclick. Id ou nom serait de bons choix.

1

Utilisez-vous l'IDE Selenium? Il serait probablement beaucoup plus facile de faire quelque chose en utilisant les autres environnements de développement, mais si vous voulez vraiment faire une boucle: Get the looping user-extension from this page et lancez un script comme celui-ci.

store | 0 | myCurrent 
storeEval | var pattern=new RegExp("\\w*http://localhost/mydomaine/index.php/checkout/cart/add\\w*");var i=0;var total=0;while(i<window.document.getElementsByTagName('input').length){if (window.document.getElementsByTagName('input')[i].id.match(pattern)){window.document.getElementsByTagName('input')[i].id = 'testID_' + total;total=total+1;}i=i+1;}total; | myTotal 
while | storedVars.myCurrent < storedVars.myTotal 
storeAttribute | //input[contains(@id,'testID_${myCurrent}')]@class | myid 
echo | ${myid} 
clickAndWait | //input[contains(@id,'testID_${myCurrent}')] 
store | javascript{storedVars.myCurrent++} 
endWhile 

Que fait le clic sur ces boutons? Est-ce qu'il publie la page ou quelque chose comme ça? Si c'est le cas, vous devez déplacer le storeEval | var pattern .... dans la boucle while. Ce que le javascript fait est de renommer toutes les entrées sur la page qui correspondent au modèle RegEx (que vous devrez probablement changer pour correspondre à votre ID de bouton) à un ID séquentiel afin que vous puissiez les parcourir facilement. S'il existe un modèle différent que vous pouvez exploiter, n'hésitez pas à le faire.

Javascript adapté de here