2012-12-17 23 views
22

私はいくつかのHTMLのように持っている場合:Capybara:CSS文字列から属性値を取得できますか?

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

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

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

しかし、その値を取得するために、どのような方法がありますそれは完全にCSSの文字列として記述されている場合?すなわち、「[のhref]のdiv#の引き出し」を

の値を取得しようとしている私は、このような表現を試してみた:

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の表現を持っていますどのようにして直接それを直接使用し、問題の属性の値を取得することが可能でしょうか?

は、私はこれを行うことができた唯一の方法は、jQueryを使っている...

+0

'a [href]'は 'href'属性を持つすべての' a'要素にマッチする単なるセレクタです。 「CSS文字列」とは何を意味しますか? – Blender

+0

なぜこれが必要ですか? –

+0

@Blender、私は 'div#drawer a [href]'がCSS構文で必要とされた属性を記述しようとしている文字列であることを意味しました。しかし、おそらくこれは可能ではないでしょうか? @@Andrey、私は、すべてのページ要素の必要なCSS記述を外部のJSONファイルに入れて、変更の際にその単一の設定点を将来変更できるように実験していました。今、各ステップで要素が個別に識別されるので、何かが変更された場合、かなり多くの異なるファイルを修正する必要があります。 – mickael

答えて

49

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

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

いいね、レオナルドに感謝!ここに答えがあるといいです... :) – mickael

+4

'[: 'data-something']'もうまくいきます。 – Nobu

+0

読み取り専用を検出するために使用します。完璧! 'find("#some_input ")[:readonly]' –

2

、ありがとうございました。

href = page.evaluate_script("$('a.link_class').attr('href');") 
+0

この解決策は私には役に立ちます。誰もがもっと魅力的なものを見つけましたか? –

関連する問題