Ruby
Capybara

capybara で複数マッチする要素の最初のフォーム要素にアクションする

More than 1 year has passed since last update.

前提

capybara ではDSLを使いフォームとやりとりすることが出来ます。

fill_in 'タイトル', with: '響け!ユーフォニアム'

fill_inメソッド によって、フォーム要素のname, もしくは id, もしくはラベルに、「タイトル」 とあるテキストフィールドを埋めることが出来ます。

問題

フィールドが1つならよいのですが、例えば1対Nの関連だったりして、同じ名前の複数のインプットが有る場合、以下のようなエラーとなります。

 Capybara::Ambiguous:
   Ambiguous match, found 2 elements matching field "タグ"

firstメソッド を用いて、

first(:fillable_field, 'タグ').set('春アニメ')

することも出来るのですが、せっかくですので DSL っぽく書きたい。

解決法

そんなときには、

fill_in 'タグ', with: '春アニメ', match: :first

とすることによって、findメソッド由来のオプションを付加することが出来ます。

補足

capybaraドキュメントのMatching節 では、exact, match の二つのオプションが使えるようです。

同様に内部でfindを使っている click_link, click_button などのアクションに対しても有効だと思われます。