Prenons l'exemple de JSF dont on a pas fixé les ID des composants graphique. JSF fonctionne dans un mode par défaut où les ID qu'il génère peuvent changer en fonction de critères mystérieux.

Un de mes clients était bloqué à cause de cette raison. Il souhaitait utiliser Selenium pour cliquer sur un bouton généré par JSF. Selenium enregistrait l'ID du bouton. Lorsque l'application était redéployé, l'ID du bouton changeait. Mon client était embêté car son test ne passait plus alors que la page fonctionnait. C'était juste que l'ID changeait mais un utilisateur humain pouvait utiliser la dite page sans problèmes.

La solution à ce problème est simple lorsqu'on connait XPath. Dans le contexte de mon client, le label du bouton était fixe et ne devait pas changer. L'astuce était donc de se baser sur le label du bouton et non sur son ID.

Il suffisait donc de mettre le code suivant à la place de l'ID dans la colonne cible: //input[@value='ok']

Le code XPath ci-dessus veut dire qu'il va chercher un bouton (un élement html input) ayant l'attribut value égale à 'ok'. Selenium appliquera une commande sur le premier bouton trouvé dans le DOM du navigateur.