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')
実際には無限ループに陥らないよう、タイムアウト処理を入れたほうがよいかと思います。