ウェブサービスを作っています。

Ferrum を使った DOM 要素の可視性チェック

Ruby で Chrome を操作する gem Ferrum で、DOM 要素が表示されているかどうかを調べる方法です。

次のような visible? メソッドを作ります。

def visible?(selector)
  expr = <<~JS
    function(node) {
      return window.getComputedStyle(node).getPropertyValue('display') !== 'none'
    }
  JS

  @browser.evaluate_func expr, @browser.at_css(selector)
end

@browser = Ferrum::Browser.new
@browser.go_to 'https://example.com/'
@browser.quit

これを使って、たとえば h1 要素が表示されるまで待つ処理は、次のように書けます。

sleep 0.1 until visible?('h1')

実際には無限ループに陥らないよう、タイムアウト処理を入れたほうがよいかと思います。