web-dev-qa-db-fra.com

Capybara: est-il possible d'obtenir une valeur d'attribut à partir d'une chaîne css?

Si j'ai du HTML comme:

<div id='drawer'><ul><li><a href='www'>description</a>...

J'ai vu que je peux obtenir la valeur de href à Capybara avec:

page.find('div#drawer a')['href']

Mais y a-t-il un moyen de récupérer cette valeur si elle est complètement décrite comme une chaîne css? c'est-à-dire en essayant d'obtenir la valeur de 'div # tiroir a [href]'

J'ai essayé avec des expressions comme celle-ci:

page.find('div#drawer a[href]')        => can't convert Capybara::Node::Element into String (TypeError)
page.find('div#drawer a[href]').value  => can't convert nil into String (TypeError)
page.find('div#drawer a[href]').text   => returns the text value of 'description'

J'ai cette expression css dans un fichier de configuration externe, alors serait-il possible de l'utiliser directement et de récupérer la valeur de l'attribut en question?

Je vous remercie...

27
mickael

Probablement trop tard. Mais j'ai aussi eu le même problème et j'ai trouvé la solution. Cela pourrait aider quelqu'un d'autre.

page.find('div#drawer a')[:href]
60
Leonardo Alves

La seule façon dont j'ai pu faire cela est avec jQuery.

href = page.evaluate_script("$('a.link_class').attr('href');")
2
RobertH

Si vous recherchez un élément HTML avec une valeur donnée pour un attribut donné, vous pouvez faire:

expect(page).to have_css('a[href="www"]')
0
cdmo