開発中のRailsアプリでRSpecを記述中に、findメソッドを利用している部分で要素を上手く取得できず長時間ハマっていました。

何とか解決はできたので、忘れないようにしっかりと記録に残しておきます。

findメソッドとは

まずfindメソッドとはCapybaraで用意されているメソッドで、HTML内の特定の要素を取得することができます。

# HTMLのid属性に'#create_button_id'が設定されている要素を取得
button = find '#create_button_id'

経緯

画面に表示されている一覧からモデルを削除し、削除したモデルが一覧から非表示になっているかというテストを行う予定でした。

テスト方法として、削除したモデルの名前が一覧に含まれていないかを検証したかったのですが、ページ全体を検証していたのでアラート(削除メッセージ)にモデルの名前が表示されテストがパスしません。

なので、ページ全体ではなく特定の領域内で検証しようと思い、findメソッドの利用を試みました。

ですが、メソッドの使い方は間違っていないにも関わらず要素が取得できませんでした。

解決

結論ですが、findメソッドはデフォルトのままでは画面に表示されていないものは取得できないようです。

僕の場合、idを設定した要素は非表示となっていたため取得できませんでした。

なので、findメソッドのvisible引数にfalseを指定してやります。

find '#create_button_id', visible: false

そうすることでページ内の非表示の要素も含めて検索に掛けることができるようになります!

更新日 : 2020年9月17日

投稿者: TWEI

趣味はプログラミング。 以前は仕事でプログラミングをやっていました。現在はWebエンジニアを目指して勉強中。 勉強で得た知識などをブログで発信していく予定です。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA