Rails.Rspecにおける click_on find().clickなどの使い分け


テストコードの話になります。

find().click

と言われるコードが出てきます。

これは検証ツールを使い
クリックしたい場所のinput要素とname属性を探して
()の中に書きます

find(input[name=commit]).click

これを入力することで
そのページのこの要素を持つボタンやリンクをclick
してくれるって書いてます。

つまり…
クリックしたい要素を!
その場所まで飛んで!
検証ツールで探して!
見つけたらそれを入力して!
って書いてます。

ご安心ください。
簡単なコード!
ご用意しました。

クリックしたいものがボタンの場合

<button>送信</button>
<input type="submit" value="送信">
form_with内の
<%= f.submit "送信" %=>

こんな形の場合。

click_button 'ボタンの表示名'

これを使います。 
押したいボタンの名前は「送信」なので

click_button '送信'

これでOKです。
簡単!!これで押したいボタンの表示名がわかれば設定可能ですね!
ただこれはリンクが押せません。

クリックしたいものがリンク(a要素やlink_to.)

<a href="rspec">RSpecについて</a>

<%= link_to "RSpecについて", rspec %> 

今回は「RSpecについて」の文字をクリックすると
そのページに行けるとします。
この場合は

click_link 'リンクの表示名'

を入力します

click_link ‘RSpecについて’

はい出来た。
余裕ですね。

これなら押して欲しいリンクの表示名だけわかればできます!
こっちはボタンが押せません。

そして!
ここにきてもう1段階進化します。(ごめんなさい長いです)

クリックしたいものがリンクなのかボタンなのか
分からないあなた!
安心してください!!
あります。

ボタンかリンクかわからんけど!
とりあえずここクリックして!

そんなあなたにはこれ!

click_on 'クリックしたい場所の表示名'

これはボタンでもリンクでもクリックしてくれます。

click_on ‘送信’
click_on ‘RSpecについて’

こんなこともできます!

ただし例外があります。

リンク先のないボタンや、リンクは押せません。
a要素の中にhrefを入力していない場合などは押せません。

<a>RSpecについて</a>

これにはhrefがないので押せません。

基本的にはclick_onで解決できるが、場合によっては他のものを使う必要がありそう。

以上です。