web-dev-qa-db-ja.com

カピバラ:CSS文字列から属性値を取得することは可能ですか?

次のようなHTMLがある場合:

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

私はカピバラでhrefの値を取得できることを見てきました:

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

しかし、CSS文字列として完全に記述されている場合、その値を取得する方法はありますか?つまり、'div#drawer a [href]'の値を取得しようとしています

私はこのような表現で試しました:

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'

私は外部の構成ファイルにそのcss式を持っているので、それを直接使用して問題の属性の値を取得することはどういうわけか可能でしょうか?

ありがとうございました...

27
mickael

おそらく遅すぎます。しかし、私も同じ問題を抱えており、解決策を見つけました。それは他の誰かを助けるかもしれません。

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

私がこれを行うことができた唯一の方法は、jQueryを使用することです。

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

特定の属性に特定の値を持つHTML要素を探している場合は、次のようにすることができます。

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