46
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-12

前提

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 などのアクションに対しても有効だと思われます。

46
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?