2011-12-16 13 views
80

私は次のことをしたいと思いますが、最初の引数としてロケータが必要なfill_inの性質のためにできません。Capybaraでのfind_inの使用方法(可能であれば)

find(:css, "input[id$='donation_pledge_hundreds']").fill_in :with => "10" 

私も

element = find(:css, "input[id$='donation_pledge_hundreds']") 
fill_in element.<method> , :with => "10" 

をやってみましたが、FILL_INする要素を識別するために、任意のデータを返す方法はありません。

fill_inで使用する正規表現経由でフィールドを見つける最良の方法はありますか?メモリから行く

答えて

136

ので、100%正しいことが、私はあなたが要素自体への参照を持っている場合は、set代わりのfill_inを使用したいと思わないことがあります。

find(:css, "input[id$='donation_pledge_hundreds']").set("10") 

をしかし、あなたの具体的な例のために、fill_inそれはあなたがあなたの発見をチェーンできることは注目に値します

fill_in 'donation_pledge_hundreds', with: "10" 
+0

良い男、それは一つです。その特定のフィールドは異なるコンテキスト(認証された/認証されていない)で使用されるため、異なるフィールドIDが使用されます。 donation_pledge_hundredsはフィールドIDの一般的な部分なので、フィールド名の末尾を比較します$ = – ants

+7

値を変更した後にイベントをトリガしないので、他の組み込みメソッドではなく 'set'を使用するように注意してください。 –

+14

非常に混乱しているインターフェース...要素のfill_in要素はちょうど埋めてください... –

3
find("input[id$='donation_pledge_hundreds']").set "10" 

:あなたはそれがIDを知っているとしての要素を見つけることができるはずです。代わりに、この方法の

@modal = find(".modal") 
@modal.find('input[name=foo]').set "bar" 
5

、あなたは:nameまたは:id、例えばを返すようにブラケットを使用することができます element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" 同じアプローチがselectで使用することができます - select my_type, from: find('select[name$="[type]"]')[:name]

0
fill_in <$id>, :with => 'text you want to fill in' 
関連する問題