Sélénium: Est-il possible de concaténer un xpath avec une variable?
Question
Les xpath de mes éléments deviennent extrêmement difficiles à lire.
// div [@ id = 'content_content'] / div [2] / div [2] / div [2] / div [4] / table / tbody / tr [2] / td / form / fieldset / p [1] / entrée
Ce serait bien si je pouvais stocker la plupart de ces éléments sous forme de variable et les utiliser plus tard comme ceci:
| assertElementPresent | $ {myForm}. / fieldset / p [1] / input |
Est-ce que quelque chose comme ça est possible? Cela rendrait mes tests beaucoup plus faciles à lire!
La solution
Vous vraiment devriez plutôt ancrer vos expressions de sélénium dans les ID d'éléments. Dans deux mois, personne ne saura avoir la moindre idée de ce que pointe xpath, surtout si le test est interrompu au moment où vous devez le savoir. Nous ajoutons régulièrement les identifiants à l'élément simplement pour faciliter les tests. Nous avons appris à accepter que nous écrivions du code Java de manière spéciale pour le rendre testable, et je pense que le langage HTML convient également.
Autres conseils
Vous pouvez simplement écrire:
store | //div[@id='main_content']/div[2]/div[2]/div[2]/div[4]/table/tbody/tr[2]/td/form | myForm
assertElementPresent | xpath=${myForm}/fieldset/p[1]/input
Comme l'a dit Krosenvold, les longs xpath peuvent être assez fragiles. Si vous êtes préoccupé par la lisibilité de votre code et souhaitez que tous vos localisateurs soient dans un seul fichier où vous pouvez effectuer des modifications en cascade, vous pouvez envisager d'utiliser une mappe UI-Element.