2017-10-04 12 views
0

J'ai le problème suivant dans mon environnement Capybara:Capybara: Trouver élément par attribut contenant quelque chose PAS

J'ai besoin de rechercher un élément. Cet élément contient un attribut unique. L'attribut est modifié de manière asynchrone. J'ai besoin du contenu de cet attribut, mais quand je cherche juste l'attribut, je reçois un zéro.

je pouvais attendre jusqu'à ce que l'attribut a la propriété, mais puisque c'est le travail Capybaras, je pensais qu'il pourrait y avoir un sélecteur possible, qui permet de rechercher quelque chose comme:

find('button[uniqueattribute] != nil') 

Toute idée comment faire cela ?

Merci déjà!

Répondre

0

Si l'attribut est ajouté à l'élément de bouton (ne pas l'attribut à l'origine), vous pouvez juste faire

find('button[attribute_name]') 

qui attendra (jusqu'à secondes Capybara.max_default_wait_time pour un élément de bouton avec cet attribut soit sur la page -. https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors pour attendre et obtenir le contenu/valeur de cet attribut que vous pourriez faire

find('button[attribute_name]')['attribute_name'] 

Si vous voulez juste attendre que l'attribut est soit pas là ou pas vide alors vous peut faire

find('button:not([attribute_name=""])') 

Si vous devez vous assurer l'attribut est là, mais n'est pas vide, il serait

find('button[attribute_name]:not([attribute_name=""])') 
+0

Son aspect bien, mais malheureusement dans mon cas l'attribut semble déjà être attaché à l'élément quand il est chargé, mais vide. Puis de manière asynchrone, il est mis à jour avec un contenu que je ne connais pas, donc je ne peux pas chercher le contenu sauf qu'il ne doit pas être vide – MJohnyJ

+0

@MJohnyJ Mise à jour avec CSS si l'attribut est déjà là mais vide. –

+0

Ça fonctionne très bien, le dernier l'a fait pour moi. Vraiment cool! – MJohnyJ

0

J'ai trouvé une solution possible: Vous pouvez vérifier la longueur d'un élément par Xpath (ce qui est génial) avec une longueur de chaîne. Donc, dans mon cas, la solution est:

find(:xpath, ".//button[@unique_attribute_name[string-length() != 0]]") 

maintenant Capybara attend jusqu'à ce que l'attribut a une valeur. S'il y a plus de jolies solutions, dites-le moi.

+0

Le XPath que vous affichez n'est pas valide XPath (les noms d'attributs sont précédés de @ dans XPath- donc vous ne savez pas vraiment comment cela fonctionne pour vous.) Lorsque vous utilisez XPath dans Capybara, vous devez toujours démarrer votre XPath avec./- sinon vous rejetez toute portée - https://github.com/teamcapybara/capybara#beware-the-xpath--trap. Donc './/button[string-length(@unique_attribute_name)! = 0] 'serait un XPath meilleur et légal –

+0

Je n'ai pas copié et collé, honte à moi et merci à vous J'ai corrigé ma réponse Merci pour l'indice avec le piège xpath! – MJohnyJ