Bonjour à tous,
J'utilise le xpath (1.0) afin de rechercher des éléments dans une page HTML (Pour l'automatisation d'une appli sous Selenium, mais peu importe)
Voici un exemple pour mieux comprendre la suite
Mon but est de pouvoir retrouver l'input dont l'id correspond au for du label recherché
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <html> <label for="xxx">Mon label xxx</label> <input type="text" id="xxx" placeholder="Value for xxx"><br> <label for="yyy">Mon label yyy</label> <input type="text" id="yyy" placeholder="Value for yyy"><br> <label for="zzz">Mon label zzz</label> <input type="text" id="zzz" placeholder="Value for zzz"><br> <label for="test">Mon label test</label> <input type="text" id="test" placeholder="Value for test"><br> <label for="pppppp">Mon label autre</label> <input type="text" id="pppppp" placeholder="Value for autre"><br> </form>
Par exemple si je cherche Mon label test, dont l'attribut for fait référence à test je dois pouvoir retrouver l'input <input type="text" id="test" placeholder="Value for test">
Forcément là c'est simple il est juste après...
Mais dans la fabuleuse appli sur laquelle je travaille, ils peuvent être à des niveaux complètement différents, ce qui est abjecte j'entends bien
Du coup voici mes différents tests
Retrouver le for... facile !
Sa valeur, pas de soucis non plus
Code : Sélectionner tout - Visualiser dans une fenêtre à part //*[text()='Mon label test']/@for
De l'autre côté, retrouver un input text par son id...
Code : Sélectionner tout - Visualiser dans une fenêtre à part string(//*[text()='Mon label test']/@for)
De là je me suis dit, et bien plus qu'à mixer les 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 //input[@id='test'] //input[@id=string('test')]
Et bien... non
Code : Sélectionner tout - Visualiser dans une fenêtre à part //input[@id=string(//*[text()='Mon label test']/@for)]
Après diverses recherches, j'ai essayé d'imbriquer la recherche afin de le forcer à exécuter la recherche sur le label avant, par exemple
Mais là encore il se fiche complètement du label et me ramène tous les inputs de la page
Code : Sélectionner tout - Visualiser dans une fenêtre à part //input[@id[starts-with(.,string(//*[text()='Mon label test']/@for))]]
Voilà hummm quoi d'autre... non c'est tout
Auriez-vous quelques idées à me soumettre ?
Merci d'avance pour votre aide
Partager