class Capybara::Vue::Waiter

Attributes

page[RW]

Public Class Methods

new(page) click to toggle source
# File lib/capybara/vue/waiter.rb, line 6
def initialize(page)
  @page = page
end

Public Instance Methods

wait_until_ready() click to toggle source
# File lib/capybara/vue/waiter.rb, line 10
def wait_until_ready
  return unless vue_loaded?

  setup_ready

  start = Time.now
  until ready?
    timeout! if timeout?(start)
    setup_ready if page_reloaded_on_wait?
    sleep(0.01)
  end
end

Private Instance Methods

page_reloaded_on_wait?() click to toggle source
# File lib/capybara/vue/waiter.rb, line 54
def page_reloaded_on_wait?
  page.evaluate_script("window.vueReady === undefined")
end
ready?() click to toggle source
# File lib/capybara/vue/waiter.rb, line 33
def ready?
  page.evaluate_script("window.vueReady")
end
setup_ready() click to toggle source
# File lib/capybara/vue/waiter.rb, line 45
      def setup_ready
        page.execute_script <<-JS
          window.vueReady = false;
          Vue.nextTick(function() {
            window.vueReady = true;
          });
        JS
      end
timeout!() click to toggle source
# File lib/capybara/vue/waiter.rb, line 29
def timeout!
  raise TimeoutError.new("timeout while waiting for vue")
end
timeout?(start) click to toggle source
# File lib/capybara/vue/waiter.rb, line 25
def timeout?(start)
  Time.now - start > Capybara.default_wait_time
end
vue_loaded?() click to toggle source
# File lib/capybara/vue/waiter.rb, line 37
def vue_loaded?
  begin
    page.evaluate_script "(typeof Vue !== 'undefined')"
  rescue Capybara::NotSupportedByDriverError
    false
  end
end