Capybaraで、style="display: none;"となっているある要素を取得しようと思ったら、思わぬところでハマった。 page.screenshotでスクリーンショットを取っても、print page.htmlでDOMを取得しても、そこにある要素がfindやhas_selector?メソッドから取得できなくて困った。

結論は、style="display: none;"のような非表示の要素は、デフォルトでは検索条件にならない。

どうやら下記のvisibleオプションがあるようです。知らなくて、しばらく途方にくれていました。

http://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Finders#all-instance_method

visible (Boolean, Symbol) — Only find elements with the specified visibility:
true - only finds visible elements.
false - finds invisible and visible elements.
:all - same as false; finds visible and invisible elements.
:hidden - only finds invisible elements.
:visible - same as true; only finds visible elements.

参考