Comment obtenir nœud parent dans le Capybara?
Je travaille avec de nombreux plugins jQuery, qui créent souvent des éléments du DOM sans id ou l'identification d'autres propriétés, et la seule façon de les obtenir dans le Capybara (pour cliquant par exemple) - est d'obtenir leur voisin (un autre enfant de son ancêtre) en premier. Mais je n'ai pas trouver n'importe où, n'Capybara soutenir de telles choses, par exemple:
find('#some_button').parent.fill_in "Name:", :with => name
?
- Aussi, il sera très utile pour moi, si vous le dites, ne Capybara générer cliquez sur les éléments avec { display: hidden }, et est-il un moyen de trouver des éléments dans une certaine étendue, où display != caché ?
- C'est une question distincte, mais il dépend du pilote que vous utilisez. webrat trouverez des choses cachées heureusement, mais le sélénium n'est pas aussi heureux pour cliquer sur les éléments que vous ne pouvez pas voir.
InformationsquelleAutor sandrew | 2011-02-01
Vous devez vous connecter pour publier un commentaire.
J'ai vraiment trouvé jamuraa réponse utile, mais pour plein de xpath m'a donné un cauchemar d'une chaîne de caractères dans mon cas, donc j'ai heureusement fait usage de la possibilité de concaténer trouver dans le Capybara, ce qui me permet de mélanger les css et xpath sélection. Votre exemple ressemblerait alors à ceci:
Capybara la mise à jour 2.0:
find(:xpath,".//..")
sera probablement entraîner uneAmbiguous match
erreur. Dans ce cas, utilisezfirst(:xpath,".//..")
à la place..//..
à trouver le parent - juste..
suffit, et ce n'est jamais ambiguë soit.Il n'y a pas un moyen de le faire avec capybara et CSS. J'ai utilisé XPath dans le passé pour atteindre cet objectif, cependant, qui n'ont un moyen d'obtenir de l'élément parent et est pris en charge par Capybara:
find(:xpath, '//*[@id="some_button"]/..')
J'ai trouvé ce qui ne fonctionne pas:
Capybara a été mis à jour à l'appui de cette.
https://github.com/jnicklas/capybara/pull/505
Si vous avez trébuché à travers ce que d'essayer de comprendre comment trouver n'importe quel parent (comme dans ancêtre) nœud (comme signalé dans @vrish88 commentaire de @Pascal Lindelauf réponse):
Je suis en utilisant une approche différente par trouver le parent de l'élément en utilisant d'abord le texte à l'intérieur de cet élément parent:
C'est peut-être utile dans une situation similaire.
Cette réponse se rapporte à la façon de manipuler un élément frère qui est ce que je crois à la question d'origine est en faisant allusion à
Votre question hypothèse fonctionne avec un mineur tweak. Si le champ générée dynamiquement ressemble à cela et ne pas avoir un id:
Votre question serait alors:
Si l'généré dynamiquement entrée ne viennent attachés avec un id d'élément (être prudent avec ces si comme dans angulaire, ils ont l'habitude de changer basée sur l'ajout et la suppression d'éléments), il serait quelque chose comme ceci:
Espère que ça aide.
J'ai besoin de trouver un ancêtre avec une classe css, même s'il est de durée indéterminée si la cible ancêtre avait un ou plusieurs classes css présent, donc je ne vois pas un moyen de faire un déterministe requête xpath. J'ai travaillé ce jusqu'à la place:
Avertissement: à utiliser avec parcimonie, il pourrait vous coûter beaucoup de temps dans les tests, donc assurez-vous que l'ancêtre est à seulement quelques sauts.
break if ancestor[:class].split(" ").include?(css_class)
.Ici, il est
http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Base:parent
Il y a une méthode parent présent;)